Я новичок в 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
.
Заранее благодарим вас за любые предоставленные советы и предложения.
Также были бы хороши прямые примеры.