2009-12-15 5 views
0

как предотвратить утечку безопасности в моей собственной созданной форме, какие данные я пишу в свой db?formular security удалить символы перед записью DB

В основном я решил заменить опасные символы ('', "", ~, ....) ... но я не знаю, как это сделать чистым способом для каждого элемента элемента (более 20) ...

Я не знаю, облегчает ли asp.net для этого.? Хорошо, валидаторы, которые я уже проверил, но по крайней мере мне нравится удалять все опасные и экзотические символы.

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

спасибо

EDIT: OK. Я вставляю функцию API API CMS Kentico. Так что, конечно, там паремет.

ответ

4

Вы должны использовать параметризованные запросы; таким образом ваш пользователь не может вводить SQL.

SqlCommand command = new SqlCommand(
    "SELECT * FROM Table WHERE [email protected]", connection); 
command.Parameters.AddWithValue("@Id", 1); 
0

Если вы используете parametrized queries нет никакого риска SQL инъекций, и вы можете хранить любые символы в БД. Позже, показывая их на странице, вы должны убедиться, что HTML кодирует данные.

1

Все ваши операторы SQL должны использовать SqlParameters вместо того, чтобы быть построены как полные строки. Это предотвратит атаки SQL-инъекций.

NO:

var cmd = new SqlCommand("INSERT INTO MyTable (MyColumn) VALUES ('" + formValue + "')", connection); 
cmd.ExecuteNonQuery(); 

ДА:

var cmd = new SqlCommand("INSERT INTO MyTable (MyColumn) VALUES (@FormValue)", connection); 
cmd.Parameters.AddWithValue("@FormValue", formValue); 
cmd.ExecuteNonQuery(); 
+0

Хорошо. Спасибо. Поэтому подумайте, что моя проблема решена, потому что импорт осуществляется с помощью API CMS Kentico. И вставить его я уверен с параметрами. кстати, вы знаете правильное решение для замены этих символов перед вставкой с помощью простой codE? благодаря –

1

Вы должны использовать параметризованные вызов к базе данных. При необходимости он будет избегать символов и позволит им безопасно сохраняться в вашей базе данных.

E.g.

using (DbCommand command = connection.CreateCommand()) 
{ 
    command.CommandText = "myStoredProc"; 
    command.CommandType = CommandType.StoredProcedure; 

    DbParameter parameter = command.CreateParameter(); 
    parameter.ParameterName = "myParameter"; 
    parameter.DbType = DbType.AnsiString; 
    parameter.Size = 100; 
    parameter.Direction = ParameterDirection.Input; 
    parameter.Value = "foo"; 

    command.ExecuteNonQuery(); 
} 

или

using (DbCommand command = connection.CreateCommand()) 
{ 
    command.CommandText = "insert myTable (column1) values @myParameter"; 
    command.CommandType = CommandType.Text; 

    DbParameter parameter = command.CreateParameter(); 
    parameter.ParameterName = "myParameter"; 
    parameter.DbType = DbType.AnsiString; 
    parameter.Size = 100; 
    parameter.Direction = ParameterDirection.Input; 
    parameter.Value = "foo"; 

    command.ExecuteNonQuery(); 
} 

Вы можете спокойно заменить 'Foo' для любой строки вы хотите, не подвергая себя от атак SQL-инъекции.

Смежные вопросы