Предотвращение атак SQL-инъекций: с чего начать - PullRequest
7 голосов
/ 06 февраля 2012

Я хочу защитить свой сайт от атак SQL-инъекций. Есть ли у кого-нибудь хорошие ссылки для защиты сайта от атак такого типа на сайте ASP.NET (c #, веб-формы)?

EDIT:

Я должен указать, что я использую Entity Framework

Ответы [ 7 ]

14 голосов
/ 06 февраля 2012

Первая и лучшая линия защиты - не использовать динамический SQL .

Всегда использовать параметризованные запросы .

Посмотрите на страницу OWASP об SQL-инъекции .

4 голосов
/ 06 февраля 2012

Посмотреть эти ресурсы:

По сути, как уже отмечал Одед, все сводится к тому, чтобы перестать объединять ваши операторы SQL - особенно если это касается данных, введенных пользователем в текстовые поля, - и использовать параметризованные запросы в ADO.NET.

3 голосов
/ 06 февраля 2012
2 голосов
/ 06 февраля 2012

Это замечательная серия, в которой рассматриваются 10 основных угроз безопасности для веб-приложений и способы их устранения с помощью ASP.net: http://www.troyhunt.com/2010/05/owasp-top-10-for-net-developers-part-1.html

1 голос
/ 06 февраля 2012

Это легко.Большинство инъекций происходит от кода, который выглядит следующим образом:

var myQuery="SELECT something FROM somewhere WHERE somefield="+userSuppliedData;
//execute myQuery against db
//now suppose userSuppliedData=="'';DROP TABLE somewhere;"

Если вы выполняете подобные SQL-запросы вручную, вы рискуете.Рассмотрите возможность использования ORM или параметризованных запросов.

0 голосов
/ 26 июня 2018

получить данные через такие параметры, как:

string str = "insert into CustomerHistoryDD(logo,ceoPicture,ceoProfilePicture,coverPhoto,employee1,employee2,employee3,employee4) values(@param1,@param2,@param3,@param4,@param5,@param6,@param7,@param8)";
        SqlCommand cmd = new SqlCommand(str, con);
        con.Open();
        cmd.Parameters.AddWithValue("@param1", link);
        cmd.Parameters.AddWithValue("@param2", link1);
        cmd.Parameters.AddWithValue("@param3", link2);
        cmd.Parameters.AddWithValue("@param4", link3);
        cmd.Parameters.AddWithValue("@param5", tb_Emp1.Text);
        cmd.Parameters.AddWithValue("@param6", tb_Emp2.Text);
        cmd.Parameters.AddWithValue("@param7", tb_Emp3.Text);
        cmd.Parameters.AddWithValue("@param8", tb_Emp4.Text);
        cmd.ExecuteNonQuery();
        con.Close();
        lbl_msg.Text = "Data Saved Successfully";
0 голосов
/ 06 февраля 2012

Используйте хранимые процедуры с параметрами и по возможности избегайте встроенного SQL ...

...