Pull to refresh

Comments 8

Что бы этого всего не было надо соблюдать 4 очевидные вещи:
1) закрыть возможность обращаться к SQL серверу всем кроме айпи адреса с приложением. Очень часто они на одном находятся.
2) везде нормальные пароли.
3) изучить наконец SQL инъекции.
4) использовать для запроса пользователя с ограниченным числом прав (т.е. не надо давать ему доступ к другим базам, которые он не используют и прочие лишние полномочия)
Ещё добавил бы, что для MSSQL полезно вообще не давать доступа приложениям к данным напрямую, а вместо этого использовать хранимые процедуры с проверками.
Вредные советы все еще живы.

Часто еще советуют использовать вьюшки, это законно, но:

Пользуясь такого рода инкапсуцляцией стоит помнить, что резалт-сеты не имеют индексов, и, если вы в дальнейшем собираетесь манипулировать результатами выборок, то можно столкнуться с проблемной производительностью. А если все методы реализовывать в виде хранимух процедур, то это превращается в кошмар поддержки. Знаю не по наслышке.
Резалт сеты на то и резалт, чтобы в них уже были готовые данные, и если не хватает вьюх, на которые индексы так же можно повесить, как раз и нужны процедуры. Давая приложению доступ к данным, особенно если это OLTP, получаем огромную дыру в безопасности. Не буду спорить что это несколько накладнее в поддержке, но я думаю оно того стоит ради безопасности данных.
вьюхи и инлайн функции — это не резалт-сеты, они в запросах раскрываются и оптимизатор уже может воспользоваться индексами исходных таблиц. А вот с мультистейтмент-функциями так уже не получается
Спасибо за информацию. Возможно я просто напросто отстал от прогресса MS SQL Server и мой опыт несколько устарел :-)

Проблема с вьюхами у нас была на практике. Толи 2005, толи 2008 сервер.
Cтатья ни о чём. Назвать надо было «проверяем, не забыли ли поменять пароль с дефолтного на нормальный» или «проверяем, не забыли ли проверить входящие данные».
Переменная `$id` никак не фильтруется, значит, можно провести SQL-инъекцию, в которой любой запрос будет выполнен из-под админской учетки `sa`. Для того чтобы выполнять команды на уровне операционной системы, необходимо активировать хранимую процедуру `xp_cmdshell`, которая по умолчанию выключена. Нам потребуется отправить четыре запроса для ее активации:

Вон оно как просто оказывается. Нашел переменную и выполнил запросы, красота!
Sign up to leave a comment.