none
Защита от SQL инъекций RRS feed

  • Вопрос

  • Добрый день, подскажите пожалуйста, достаточно ли принятых мер, для защиты от инъекций в параметрах, или мне необходимо осуществлять дополнительные проверки?

    Метод Execute вызывается напрямую из методов Веб службы

    public static DataTable Execute(string Query, params SqlParameter[] Params)
    {
        DataTable Table = new DataTable();
                
        using (SqlConnection SqlConnection = new SqlConnection(ConnectionString))
        {
            try
            {
                SqlConnection.Open();
    
                SqlCommand Command = new SqlCommand(Query, SqlConnection);
                Command.Parameters.AddRange(Params);
                SqlDataAdapter Adapter = new SqlDataAdapter(Command);
                Adapter.Fill(Table);
            }
            catch { }
            finally
            {
                SqlConnection.Close();
            }
        }
    
        return Table;
    }


    Пример вызова метода, переменные Login и Password "прилетают" в службу и никоим образом не проверяются

    using p = System.Data.SqlClient.SqlParameter;

    var result = Db.Execute("exec SP_Login @Login, @Password", new p("@Login", Login), new p("@Password", Password)); if (result.Rows.Count != 0) { Session = new Storage.Session() { Id = result.Rows[0].Field<int>("id"), Name = result.Rows[0].Field<string>("name"), Role = (Storage.Roles)result.Rows[0].Field<int>("type") }; Storage.Sessions.Add(Environment.SessionID, Session); }


    Знаю, что для вызова хранимых лучше использовать конструктор , но у меня их не так много и все они простенькие, без выходных параметров, возвращающие одну таблицу как результат. В основном у меня просто запросы, и для унификации я пользуюсь единым методом для всего.

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



    • Изменено JusteG 13 сентября 2016 г. 7:19
    13 сентября 2016 г. 3:31

Ответы

  • Этого достаточно если все что вводится пользователем передается в параметрах.



    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Предложено в качестве ответа Alexander RusinovModerator 13 сентября 2016 г. 6:50
    • Помечено в качестве ответа JusteG 13 сентября 2016 г. 7:11
    13 сентября 2016 г. 6:39
    Модератор

Все ответы

  • Этого достаточно если все что вводится пользователем передается в параметрах.



    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Предложено в качестве ответа Alexander RusinovModerator 13 сентября 2016 г. 6:50
    • Помечено в качестве ответа JusteG 13 сентября 2016 г. 7:11
    13 сентября 2016 г. 6:39
    Модератор
  • Ну да, абсолютно все, как в указанном примере. Спасибо за быстрый ответ.
    • Изменено JusteG 13 сентября 2016 г. 7:11
    13 сентября 2016 г. 7:11