Делает 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 в коде (используя SqlCommand
s), вы не получите каких-либо защиту, нужно использовать параметры.
несколько элементов управления, которые используют SQL (SqlDataSource и membership framework), используют параметры и безопасны для инъекций.
ASP.NET не защищает от SQL-инъекций!
ASP.NET это просто платформа для веб-приложений, и она не диктует, каким образом вы получаете доступ к своей базе данных. Это зависит от того, как вы реализуете доступ к данным:
- если вы используете ADO.NET, и строят ваши SQL-запросы в виде строк, то вы должны санировать любой пользовательский ввод, чтобы быть в безопасности от инъекций.
- если вы используете ADO.NET и используйте SqlParameters, тогда я думаю, что вы в безопасности против инъекций.
- если вы используете инструмент ORM для доступа к данным, то я бы сказал, что вы в безопасности (по крайней мере, при использовании общих)
- если вы используете наборы данных, то вы, вероятно, также в безопасности.
- если вы используете некоторые сторонние элементы управления databound, то я надеюсь, что они заботятся о защите от SQL-инъекций
вероятно, я забыл упомянуть много в своем ответе, но вы можете видеть, что ответ: "это зависит"
Если вы используете SqlParameter
s, и никогда не объединять пользовательский ввод в SQL, вы должны быть в безопасности. Вы можете использовать SqlParameter
s без хранимых процедур тоже.
нет, ASP.Net не защищает от SQL-инъекций. Код отгрузки MS для ASP.NEt предполагается, что элементы управления не содержат SQL-инъекций, но это не предотвращает всех проблем, в которые может загнать себя разработчик. Лучшая защита-это хорошее понимание SQL-инъекции и тщательное кодирование. Когда это недостижимо по каким-то причинам, есть инструменты, которые могут помочь как средство анализа кода Microsoft .NET (CAT.NET). Это бесплатный плагин VS, который может анализировать сгенерированные сборки и обнаруживают риски инъекций SQL, XSS и XPath. Такой инструмент не является пуленепробиваемым, но гораздо лучше, чем ничего.
частично. Существует фильтр, который включен по умолчанию, что затрудняет построение атаки SQL-инъекции, если она не выключена.
метод, который многие приложения ASPNET используют для доступа к базам данных MSSQL, также делает их в целом устойчивыми к атакам SQL-инъекций.
но по-прежнему можно создать уязвимое приложение, если вы достаточно небрежны.