Возможное внедрение SQL
У меня есть программное обеспечение для настольных компьютеров, которое построено на основе SQL 2005. Сервер SQL находится в моем офисе, и есть 1 общедоступный веб-сайт, на котором отображается часть содержимого из этой базы данных.
У меня проблема
- Следующий HTML-код был вставлен в столбец описания для каждой записи в одной из таблиц моей базы данных.
<div style=position:absolute;top:-9999px;><a href=http://cashfastreiiu.com >cash fast</a><a href=http://guaranteedpaydayloansmsflg.com >guaranteed payday loans</a><a href=http://instantcashroacg.com >instant cash</a><a href=http://paydayloanstorezxucx.com >payday loan store</a><a href=http://paydaylendingvbmpz.com >payday lending</a></div>
- Я выполнил поиск в Google только по ссылке cashfastreiiu.com, и оказалось, что на некоторых других сайтах в базе данных есть точно такая же строка HTML, что и на общедоступном веб-сайте.
Мои вопросы
Как это могло случиться? Только HTTP-порт доступен для HTTP-сервера (IIS 7.5), и этот сервер подключается к базе данных, используя только свой внутренний IP. Сервер SQL не доступен для общественности. Настольное клиентское приложение запускается на 8 компьютерах сотрудников, и эти люди используют компьютеры с Windows 7 в режиме блокировки с нулевыми правами администратора. Они не могут устанавливать приложения с разрешения администратора.
Общедоступный веб-сайт предназначен только для просмотра, нет способа обновить данные с общедоступного сайта. Никто в Интернете не может обновить или ввести данные в базу данных.
С чего мне начать искать дыры в моей безопасности?
Спасибо
1 ответ
Как и предполагает ваш заголовок, весьма вероятно, что это вызвано SQL-инъекциями (но, не видя больше вашего реального кода для веб-сайта, действительно невозможно сказать...).
Для устранения неполадок вы хотите посмотреть на код, который обслуживает данные для вашего сайта. Я предполагаю, что вы получаете какой-то ввод, строку поиска или что-то от пользователя, а затем используете это, чтобы выбрать, какие данные отображать - в этом случае вы должны посмотреть, как делается этот выбор. Вы фильтруете что-то вроде sqlstring = "SELECT * FROM table WHERE somecolumn LIKE %'" + searchstr + "'"
? Если это так, вы открыты для SQL-инъекций. Это не должно быть так очевидно - есть много ошибок, которые можно сделать, которые выставляют базу данных...
Независимо от того, как это произошло в первую очередь, существует один простой и чрезвычайно убедительный способ предотвратить его повторение: убедитесь, что учетная запись, которую веб-сайт использует для получения данных, имеет доступ только для чтения к базе данных. Если вам нужно, создайте нового пользователя в SQL Management Studio, предоставьте этому пользователю права только на чтение для нужных ему таблиц (и не более!) И измените строку подключения в конфигурации веб-сайта, чтобы использовать вместо нее новую учетную запись. Таким образом, не имеет значения, насколько плохой остальной код для сайта - пользователи, получающие доступ к вашей базе данных через веб-интерфейс, никогда не смогут ничего хранить в базе данных.
Поскольку для отображения информации требуется восстановление из базы данных, возможно, произошла атака SQL-инъекции и произошла вставка.