Делает asp.net защита от атак SQL-инъекций

по умолчанию делает ASP.net защита от атак SQL-инъекций при использовании элементов управления ASP?

7 ответов


нет. Пока вы предоставляете SQL, вам решать, как вы используете элементы управления.

это обычно означает очистку ввода и использование параметризованных запросов или хранимых процедур над динамическими строками SQL.

Если элемент управления генерирует запросы для вас (например, элементы управления членством и т. д. тогда вы хорошо защищены.


да и нет.

ADO.NET имеет очень хорошую поддержку параметризации, и при правильном ее использовании значения параметров будут автоматически санированы для предотвращения SQL-инъекции. Таким образом, вы можете добавить параметры в SqlCommand (или SqlDataSource управление), не беспокоясь слишком о том, что в них.

хорошая новость заключается в том, что параметризация ваши вещи очень легко. Я покажу вам пример C# для выполнения этого программно, но вы можете сделать это декларативно с серверными элементами управления, если вы предпочитаете.

плохая новость в том, что, как и все остальное, вам все равно нужно думать о том, что вы делаете. Любая строка из небезопасного источника должен быть параметризован если вы хотите иметь любую безопасность. Если вы вставите его дословно В запрос, вы обойдете ADO.NET ' s функции безопасности.

безопасность:

string name = txtName.Text;
sqlCommand.CommandText = "select * from product where name = @name";
sqlCommand.Parameters.AddWithValue("name", name);

не безопасный:

string name = txtName.Text;
sqlCommand.CommandText = "select * from product where name = " + name;

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

все еще не безопасно (да, Я видел это в производственном коде)!

string sql = "select * from product where name = " + txtName.Text;
sqlCommand.CommandText = "exec(@sql)";
sqlCommand.Parameters.AddWithValue("sql", sql);

TL; DR: ADO.NET имеет отличные возможности для остановки SQL-инъекции, но только если вы используете их правильно.


большинство ASP.Net элементы управления (за исключением DataGrid) вообще не используют SQL.

Если у вас есть собственный SQL в коде (используя SqlCommands), вы не получите каких-либо защиту, нужно использовать параметры.

несколько элементов управления, которые используют SQL (SqlDataSource и membership framework), используют параметры и безопасны для инъекций.


ASP.NET не защищает от SQL-инъекций!

ASP.NET это просто платформа для веб-приложений, и она не диктует, каким образом вы получаете доступ к своей базе данных. Это зависит от того, как вы реализуете доступ к данным:

  • если вы используете ADO.NET, и строят ваши SQL-запросы в виде строк, то вы должны санировать любой пользовательский ввод, чтобы быть в безопасности от инъекций.
  • если вы используете ADO.NET и используйте SqlParameters, тогда я думаю, что вы в безопасности против инъекций.
  • если вы используете инструмент ORM для доступа к данным, то я бы сказал, что вы в безопасности (по крайней мере, при использовании общих)
  • если вы используете наборы данных, то вы, вероятно, также в безопасности.
  • если вы используете некоторые сторонние элементы управления databound, то я надеюсь, что они заботятся о защите от SQL-инъекций

вероятно, я забыл упомянуть много в своем ответе, но вы можете видеть, что ответ: "это зависит"


Если вы используете SqlParameters, и никогда не объединять пользовательский ввод в SQL, вы должны быть в безопасности. Вы можете использовать SqlParameters без хранимых процедур тоже.


нет, ASP.Net не защищает от SQL-инъекций. Код отгрузки MS для ASP.NEt предполагается, что элементы управления не содержат SQL-инъекций, но это не предотвращает всех проблем, в которые может загнать себя разработчик. Лучшая защита-это хорошее понимание SQL-инъекции и тщательное кодирование. Когда это недостижимо по каким-то причинам, есть инструменты, которые могут помочь как средство анализа кода Microsoft .NET (CAT.NET). Это бесплатный плагин VS, который может анализировать сгенерированные сборки и обнаруживают риски инъекций SQL, XSS и XPath. Такой инструмент не является пуленепробиваемым, но гораздо лучше, чем ничего.


частично. Существует фильтр, который включен по умолчанию, что затрудняет построение атаки SQL-инъекции, если она не выключена.

метод, который многие приложения ASPNET используют для доступа к базам данных MSSQL, также делает их в целом устойчивыми к атакам SQL-инъекций.

но по-прежнему можно создать уязвимое приложение, если вы достаточно небрежны.