Блог Сергея Байдачного

Мой блог о технологиях

Простые вещи о безопасности

with one comment

Сижу дома, болею, никого не трогаю. Но, изучая работу «песочницы» для SharePoint 2010, решил проверить, подписывает ли VS 2010 сборки для проектов, которые разворачивает в «песочницу» — подписывает. На фоне этого вспомнил о старых и «хорошо знакомых» вещах, связанных с цифровой подписью, о чем и написал предыдущий пост. И тут же получил комментарий – мол не интересно, все можно найти в MSDN. Оно конечно можно, но этот комментарий побудил меня написать еще один пост, связанный с безопасностью. Я об этом часто рассказываю, об этом написано в MSDN, об этом написано везде, но я сталкиваюсь с этим регулярно.

Итак, была у меня учетная запись в одной онлайн банковской системе. Назовем ее eBank. Система работала замечательно (хотя и была написана какими-то студентами) и позволяла делать много полезных вещей (создавать счета в разных валютах, оформлять переводы и т. д.). И вот, в один прекрасный день, систему решили улучшить. Ну, как у нас принято, переписатьJ Проблема в том, что те студенты уже ушли (в банках платят не очень, а любое повышение в 10 баксов выставляют как мега событие). Поэтому систему писали уже другие студенты. А Вы все знаете, что уровень нынешних студентов уже не тот…

Так вот, сижу я месяц – не работает, три – не работает. Месяцев через шесть, начинаю связываться со службой поддержки. Мол, так и так, когда заработает. А в службе поддержки мне отвечают, что работает уже как полгода. Мне от этого не жарко и не холодно – войти в систему я не могу, появляется страшная ошибка. Пообщавшись, некоторое время, с поддержкой, я получил рекомендацию: «переустановить операционную систему (мало ли что с моими настройками) и обновить браузер IE 6 на IE 5» (еще бы Оперу предложили).

Естественно, рекомендации я выполнять не стал, так как на тот момент уже немного умел программировать. Я просто попросил поменять пароль. Меняли пароль мне дня три. Процедура очень сложная. Отдали в запечатанном конверте, пароль был «123456». После этого я перестал пользоваться услугами этого банка.

В чем же была проблема? В конкатенации строк при построение запроса, который выглядел примерно следующим образом:

“Select count(*) from UserTable where Login=”+login+” and Password=“+password+”

Как вы знаете, текстовые значения в SQL заключаются в апострофы (одинарные кавычки), а мой пароль как раз и содержал апостроф (предположим 123’45). Следовательно, мой запрос выглядел примерно так:

Select count(*) from UserTable where Login=sbad and Password=12345

То есть, в качестве пароля подставлялось 123, а 45’ ассоциировалось с неизвестной командой, что и вызывало ошибку.

Конечно, можно было попробовать в качестве логина (или пароля) ввести одну из двух команд:

“1 or 1=1 —“ – входим в системуJ

“1; drop table UserTable —“ – проверим, случайно не администратор ли используется для входа в системуJ

Естественно, вторая команда работать не будет, если пользователь, под которым работает приложение, имеет минимум прав (то есть не умеет удалять таблицы).

А вот теперь запишем еще два правила, которые следуют из этой истории.

Правило 1. Ваше приложение не должно взаимодействовать с базой данных под правами администратора. Создайте специальный аккаунт приложения, который будет иметь ровно те права, которые необходимы для работы приложения. Сознайтесь, что Вы часто писали код, использующий права администратора?

Правило 2. Не используйте конкатенацию строк для формирования запросов к БД. На мой взгляд, запросам в коде вообще делать нечего (поэтому я не люблю LINQ).

И, наконец, чтобы обучить начинающего разработчика всем этим премудростям, существует множество утилит, выполняющих статический анализ кода. Если Вы используете Visual Studio, то анализатор встроен в оболочку и анализ SQL запросов там есть:

clip_image002

А если Вы используете и Team Foundation Server, то можете сделать прохождение кода через анализатор перед его выгрузкой в хранилище, обязательным правилом – пусть учатся.

Да, я злой:)

Реклама

Written by Sergiy Baydachnyy

29.01.2010 в 20:46

Опубликовано в Security

Tagged with ,

Один ответ

Subscribe to comments with RSS.

  1. […] Читать в моем блоге о технологиях Опубліковані Friday, January 29, 2010 8:47 PM від Sergiy Baydachnyy […]


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: