Предотвращение внедрения SQL в веб-приложение ASP.NET

Я новичок в C # и ASP.NET.

Я использую VS2005 C # и SQL Server 2005 и провел некоторые исследования по предотвращению SQL-инъекций.

У меня есть несколько функций в моем серверном веб-приложении, и я не уверен, что они требуют проверка ввода.


1) Войдите в элемент управления из панели инструментов. Я реализовал контроль входа в систему непосредственно из VS Toolbox, и я попытался использовать RegularExpressionValidator для своего инструмента входа в систему, но, похоже, он не работает. У Microsoft уже есть встроенная проверка для этого инструмента?


2) Загрузить файлов Excel в базу данных SQL Server. У меня есть функция, которая позволяет пользователям загружать листы файлов Excel в базу данных. Вначале я не чувствую необходимости проверять его, поскольку нет открытых sql-запросов, но после этого я спрашиваю себя, может ли пользователь вводить SQL-запросы в файл Excel, что приведет к SQL-инъекция во время загрузки. Ниже приведен фрагмент моего кода загрузки, я с нетерпением жду совета, если потребуется проверка:

string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strUploadFileName + ";Extended Properties=Excel 8.0;";

using (OleDbConnection connection =
             new OleDbConnection(connStr))
{
    string selectStmt = string.Format("Select [COLUMNS]  FROM [userlist$]");

    OleDbCommand command = new OleDbCommand(selectStmt, connection);

    connection.Open();
    Console.WriteLine("Connection Opened");
    // Create DbDataReader to Data Worksheet
    using (DbDataReader dr = command.ExecuteReader())
    {
        // SQL Server Connection String
        string sqlConnectionString = "Data Source=<datasource>";

        // Bulk Copy to SQL Server
        using (SqlBulkCopy bulkCopy =
                   new SqlBulkCopy(sqlConnectionString))
        {
            bulkCopy.DestinationTableName = "UserDB";
            bulkCopy.WriteToServer(dr);;
        }
    }
}

3) INSERT операторы. У меня есть пара операторов INSERT , которые в основном используются для вставки новых записей в базу данных. Поскольку эти операторы на самом деле не содержат данных grep из базы данных, я не уверен, требуется ли проверка. Ниже приведен пример оператора INSERT :

SqlConnection conn = new SqlConnection("<datasource>");
string sql = string.Format("INSERT INTO [UserData] (Username, Password, Role, Membership, DateOfReg) VALUES ('" + un.Text + "', '" + pw.Text + "', '" + role.Text + "', '" + ms.Text + "', '" + dor.Text + "')"); --> all *.Text are textboxes on the webpage

SqlCommand cmd = new SqlCommand(sql, conn);
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();

4) Функция поиска на веб-странице. У меня есть несколько страниц .aspx, на которых отображаются данные с помощью GridView.Ниже приведен пример моего поискового запроса, который использует текстовое поле и фильтр раскрывающегося списка:

SqlDataSource1.SelectCommand = "SELECT * FROM [UserData] where [" + DropDownList1.Text + "] like '%" + searchTextBox.Text + "%'";
SqlDataSource1.DataBind();

Я хотел бы знать, какой самый простой способ выполнить проверку правильности ввода самих операторов sql без создания дополнительных методов и функций , к приведенным выше примерам, как я видел регулярное выражение и использование mysql_real_escape_string .

Заранее благодарим вас за любые предоставленные советы и предложения.

Также были бы хороши прямые примеры.

6
задан 7 December 2011 в 07:48
поделиться