SQL инъекций - PullRequest
       21

SQL инъекций

4 голосов
/ 19 ноября 2011

У меня есть сайт asp.net ... В последние дни я видел в своих журналах, что меня атакуют с помощью инъекции sql, например:

Exceptia: Error Caught in Application_Error event Error in: http://gramma.ro/Site/DetaliiProdus.aspx?c=m1&p=1465&s1=45&s2=79/**/or/**/1=@@version))--

Конечно, это вызовет исключение, потому что я проверяю параметры перед выполнением любого запроса sql:

Error Message:Input string was not in a correct format.

За всеми этими исключениями я перенаправляю пользователя на конкретную страницу ошибки.

Конечно, эти атаки не влияют на меня сейчас (я использую параметризованные команды sql), но я беру ips и помещаю их в IIS - IP-адрес и ограничения домена , чтобы ip больше не может получить доступ к моему сайту.

Мой вопрос: что еще я могу сделать? Кажется, что этот злонамеренный пользователь, даже если я блокирую его ip, собирается и пытается провести такую ​​же атаку с другого ip (за последние 3 дня я заблокировал около 6 ips, что довольно уродливо ...). Можете ли вы предложить что-нибудь еще, что я должен сделать?

ОБНОВЛЕНИЕ: Все эти атаки ставят /**/or/**/1=@@version вместо значения параметра запроса, поэтому я уверен, что атака - это не случайная проблема пользователей, а настоящая атака с использованием SQL-инъекций. Проблема в том, что эти ips находятся в разных местах, поэтому я не могу сообщить о них некоторым интернет-провайдерам или хост-компаниям ...

Ответы [ 2 ]

2 голосов
/ 19 ноября 2011

Это обеспечит защиту от одного запроса, который вы показываете.Чтобы должным образом защитить от внедрения SQL, параметризовать все запросы, насколько это возможно, проверять пользовательские параметры ввода.

В моем коде я на самом деле иду дальше и выбрасываю исключения для любых неожиданных строк запросов, что делает обнаружение API (котороеэто и есть атака), гораздо сложнее.

Добавьте это в global.asax

void Application_BeginRequest(object sender, EventArgs e)
{
    if(HttpContext.Current.Request.Url.ToString().Contains("@@version"))
    {
        throw new HttpException(400,"Bad Request");
    }
}
0 голосов
/ 04 июня 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...