Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 16201|Ответ: 0

[ASP.NET] ASP.NET анти-SQL инъекции

[Скопировать ссылку]
Опубликовано 17.04.2015 13:06:50 | | |

1. Что такое SQL-инъекция?
     Так называемая SQL-инъекция заключается в вставке SQL-команд в форму для подачи или ввода строки запроса доменного имени или страницы, а затем обмануть сервер и заставить его выполнить некоторые вредоносные SQL-команды. Вводя параметры для создания умных SQL-операторов, вы можете успешно получить нужные данные.

2. SQL тип инъекции
В частности, SQL-инъекцию можно разделить на пять категорий: инъекция чисел, инъекция символов, инъекция поиска (like), инъекция в инъекции и инъекция соединения предложений.
С точки зрения применения особое внимание следует уделять внедрению SQL-инъекции в IP, поиску, пакетному удалению и переносу из базы данных в базу.

3. Как делать инъекции

Рассмотрим типичный пример
SqlCommand cmd = new SqlCommand("SELECT * FROM PE_USERS WHERE UserName = '"
2+ Имя пользователя + "' И UserPassword = '" + Пароль + "'", conn);

Поскольку нет проверки для имени пользователя и PassWord, если UserName="admin' ИЛИ 1=1--"
Выполняемое SQL-оператор получает вид:

ВЫБРАТЬ * ИЗ PE_USERS ГДЕ UserName='admin' ИЛИ 1=1—' И UserPassword=''

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



4. Как предотвратить инъекцию SQL

1. Фильтровать или преобразовать подозрительные строки

      SQL-инъекции предотвращаются за счёт написания функций, которые фильтруют или преобразуют опасные строки, а затем используют GLOBAL.ASAX или переписывают экземпляры контекста

     Вот пример

публичный статический bool SqlFilter2 (строка InText)
2  {
3-строковое слово="and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
4 if(InText==null)
5 возвратов ложно;
6 Foreach(строка I в слове. Сплит('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+" ")>-1)|| (InText.ToLower(). IndexOf(" "+i)>-1))
9    {
10 возвратов истинно;
11    }
12   }
13 возвратов ошибочно;
14  }


2. Global.asax

Protected void Application_BeginRequest(Object sender, EventArgs e)
2  {
3 // Прохождение параметров Post, за исключением скрытых доменов
4 Foreach (String I в этом). Форма запроса)
5   {
6 if(i=="__VIEWSTATE")continue;
7 this.goErr(this. Request.Form.ToString());   
8   }
9 // Пройдите параметр Get.
10 Foreach (String I в этом). Request.QueryString)
11   {
12 this.goErr(this. Request.QueryString.ToString());   
13   }
14  }
private void goErr(string tm)
2  {
3 если(WLCW. Extend.CValidity.SqlFilter2(tm))
4 этого. Response.end()
5  }

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

Недостатки: 1. Он фильтрует некоторые символы, которые изначально не использовались для инъекций, вызывая неожиданные проблемы. Например, если имя участника форума содержит те же символы, что и отфильтрованные символы, это вызовет неожиданные проблемы и проблемы.

        2. Фильтрация или преобразование требуется каждый раз, что снижает эффективность программы

2. Используйте хранящиеся процедуры для параметрических запросов

Основная цель SQL-инъекции — выполнять вредоносные команды в базе данных путём подачи вредоносного SQL-кода. Таким образом, пока команды SQL обрабатываются до выполнения, инъекции SQL можно эффективно предотвратить. Параметризованные запросы эффективно предотвращают внедрение SQL.

Пример

const string strSQL = "SELECT * FROM [PE_Users] WHERE UserName = @UserName";
Параметры parms = новые параметры ("@UserName", DbType.String, имя пользователя);

Выше есть @UserName параметр, использующий объект Prarmeter, с помощью которого параметр добавляется в объект Command,
Это даёт вам параметризованный запрос.
Как описано выше, ADO.NET отправляет следующий SQL-оператор на SQL Server:

Exec sp_executesql N 'select * из [pe_users], где username=@username ',N
'@username nvarchar(20) ',@username=N 'имя'

SQL Server заменяет @username строкой «name» перед выполнением запроса.
Предположим, у вас есть следующие входные данные:

'Союз выбрать @@version, нуль, ноль—

Сгенерированный SQL-оператор выглядит так:

Exec sp_executesql N 'select * из [pe_users], где username=@username ',N
'@username nvarchar(20) ',@username=N ''' объединение выбрать @@version,null,null--'

Видно, что ADO.NET ускользает от ввода.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Копирование кода


DbTye или SqlDbType могут быть различными типами данных.
Вы можете выбрать по типу данных.
В некоторых местах его также можно использовать для указания длины параметра: int size. Это также эффективно предотвращает переполнение базы данных и SQL-заметки
Возможность поступления.
Плюсы: эффективно предотвращает инъекцию SQL.
Недостатки: Некоторые места нельзя применять, например, в.

3. Белый список

Описание:
Некоторые известные диапазоны параметров можно обрабатывать в виде белых списков, что предотвращает внедрение SQL и запросы
Неправильно, например: упорядочивать по имени + столбца, когда имя столбца передаётся в виде параметра, можно сформулировать белый список, который сначала оценит параметр
независимо от того, есть ли номер в белом списке, а затем выполните запрос, иначе оно будет обработано неправильно.
Преимущества: безопасность и надёжность
Недостатки: Ограниченный спектр применений




Предыдущий:Текстовое поле позволяет вводить только номера
Следующий:asp.net Текстовый редактор (FCKeditor)
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com