2016-04-13 2 views
-2

У меня есть страница, которая будет генерировать AuthKey для моего веб-приложения. Я использую базу данных базы данных доступа (просто чтобы попробовать ее локально, позже я перейду на SQL Server). В моем кодексе я использую C# в качестве моего языка ввода.C# Как я могу предотвратить SQL Injection с помощью ASP.NET?

Это мой код:

using System.Data.OleDb; 
OleDBCommand cmd = new OleDBCommand(); 
cmd.CommandText = "insert into AuthKeys (AuthKey, User_Assign,locatedAt) values(@AuthKey, @idstr, 'Dashboard')"; 
cmd.Parameters.Add("@AuthKey", OleDbTypes.<sometype>).Value = AuthKey; 
cmd.Parameters.Add("@idstr", OleDbTypes.<sometype>).Value = idstr; 

idstr == имя_пользователя AuthKey == код, сгенерированный ключ (GUID) Но, как я заметил, это приложение очень уязвима для SQL инъекций. Поэтому мой вопрос: как я могу предотвратить SQL Injection?

EDIT: Мой вопрос связан этот форум пост: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/94608549-6fee-4c01-82ae-601ed7c20327/getting-errors-with-insert-into?forum=sqlnetfx#e933c92b-8d0a-4b40-906f-2d335b30b6d4

+6

Нет, это не ** уязвимо, поскольку вы уже использовали [подготовленные заявления] (https://en.wikipedia.org/wiki/Prepared_statement). –

+3

Я не вижу никакого кода, который выполняет действие на основе URL-адреса, так как он не подходит SQL-инъекции –

+1

Без объяснения причин, почему вы считаете, что «это приложение очень уязвимо для SQL-инъекций», это не очень разумный вопрос. –

ответ

6

Но, как я заметил, это приложение очень уязвимо для SQL инъекций.

Нет, это не так. Вы не можете вмешиваться в фактический оператор SQL, поскольку уже используете параметры. В вашем коде не существует уязвимости SQL-инъекции.

+0

Я полагаю, вы имеете в виду «tamper»;) – Nyerguds

1

Напротив, этот подход (с использованием подготовленных операторов и параметризованных запросов) является единственным разумным и надежным способом избежать инъекций SQL.

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

3

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

В этом случае вы, вероятно, захотите что-то большее на стороне проверки, чтобы предотвратить эти нежелательные записи записи.