формальная безопасность удалить символы перед записью в БД - PullRequest
0 голосов
/ 15 декабря 2009

как предотвратить утечки безопасности в моей собственной созданной форме, какие данные я записываю в мою базу данных?

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

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

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

спасибо

РЕДАКТИРОВАТЬ: ОК. Я делаю вставку с функцией API CMS Kentico. Так что, конечно, он там измеряется.

Ответы [ 4 ]

4 голосов
/ 15 декабря 2009

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

SqlCommand command = new SqlCommand(
    "SELECT * FROM Table WHERE ID=@Id", connection);
command.Parameters.AddWithValue("@Id", 1);
1 голос
/ 15 декабря 2009

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

* 1003 Е.Г. *

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-инъекций.

1 голос
/ 15 декабря 2009

Все ваши операторы 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 голосов
/ 15 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...