У меня есть программное обеспечение для настольных компьютеров, которое построено на основе SQL 2005. Сервер SQL находится в моем офисе, и есть 1 общедоступный веб-сайт, который отображает часть содержимого этой базы данных.

У меня проблема

  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>

  1. Я выполнил поиск в Google только по ссылке cashfastreiiu.com, и оказалось, что на некоторых других сайтах в базе данных есть точно такая же строка HTML, что и на общедоступном веб-сайте.

Мои вопросы

Как это могло случиться? Только HTTP-порт доступен для HTTP-сервера (IIS 7.5), и этот сервер подключается к базе данных, используя только свой внутренний IP. Сервер SQL не доступен для общественности. Настольное клиентское приложение запускается на 8 компьютерах сотрудников, и эти люди используют компьютеры с Windows 7 в режиме блокировки с нулевыми правами администратора. Они не могут устанавливать приложения с разрешения администратора.

Публичный сайт предназначен только для просмотра, нет способа обновить данные с публичного сайта.Никто в Интернете не может обновить или ввести данные в базу данных.

С чего мне начать искать дыры в моей безопасности?

Спасибо

1 ответ1

1

Как и предполагает ваш заголовок, очень вероятно, что это вызвано SQL-инъекциями (но, не видя больше вашего реального кода для веб-сайта, действительно невозможно сказать ...).

Для устранения неполадок вы хотите посмотреть на код, который обслуживает данные для вашего сайта. Я предполагаю, что вы получаете какой-то ввод, строку поиска или что-то от пользователя, а затем используете это, чтобы выбрать, какие данные отображать - в этом случае вы должны посмотреть, как делается этот выбор. Вы фильтруете что-то вроде sqlstring = "SELECT * FROM table WHERE somecolumn LIKE %'" + searchstr + "'"? Если это так, вы открыты для SQL-инъекций. Это не должно быть так очевидно - есть много ошибок, которые можно сделать, которые выставляют базу данных ...

Независимо от того, как это произошло в первую очередь, существует один простой и чрезвычайно убедительный способ предотвратить его повторение: убедитесь, что учетная запись, которую веб-сайт использует для получения данных, имеет доступ только для чтения к базе данных. Если вам нужно, создайте нового пользователя в SQL Management Studio, предоставьте этому пользователю права только на чтение для нужных ему таблиц (и не более!) И измените строку подключения в конфигурации веб-сайта, чтобы вместо нее использовать новую учетную запись. Таким образом, не имеет значения, насколько плохой остальной код для сайта - пользователи, получающие доступ к вашей базе данных через веб-интерфейс, никогда не смогут ничего хранить в базе данных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .