Ниже приведены названия компаний в моей базе данных.Я пытаюсь произвести на лету строковый запрос, который защищен от SQL-инъекций.
Я проверяю уровень допуска безопасности параметризованного запроса по отношению к SQL-инъекции, потому что слышу слухи, что это не 100%.
===== userinput чистые строки, но со злонамеренным контентом для SQL-инъекции =========
userinput = "Tubo'; UPDATE STOCK_TYPE SET Description='SQL Injection'" &
"WHERE STock_Type_ID=1; --'"
userinput = "'Some Name''; GRANT CONTROL TO [Malicious User]; PRINT ''Game over!" &
"This system is no longer yours!''" &
"-- Malicious User now can control the database!!!'"
userinput = "!!!@@@###$$$%%%^^^&&&***((()))///```~~~___---+++===:::;;;"""'''|||
\\\}}}>>><<<{{{}}}]]]...,,,[[[]]]///"
===== Для поиска названия компании с помощью SQL Injected userinput ==========================
Dim SQL = "select p.Name from EntContext.COMPANIes as p Where p.Name like @CompanyName"
ObjectParamters.Add(New ObjectParameter("@CompanyName", userinput))
Dim databaseObjectQuery As ObjectQuery(Of DbDataRecord) =
New ObjectQuery(Of DbDataRecord)(SQL, EntContext)
databaseObjectQuery.Parameters.Add(parameter)
===========================================================================
База данных COMPANIes.name содержит именно эти строки, чтобы помочь моейтестирование.При успешном поиске по пользовательскому вводу я думаю, что мой код сильнее против атаки.
Но когда я выполняю поиск по COMPANIes.name с точной строкой пользовательского ввода, только первый пользовательский результат дает результат.
Я сужаю виновника до '[', он не дает результата для второго и третьего ввода пользователя через LINQPAD
select p.company_id , p.Name
from EntContext.COMPANIes as p
Where p.Name like '%[%'
Нет результата.Поэтому сделайте это
select p.company_id , p.Name
from EntContext.COMPANIes as p
Where p.Name like '%/[%' escape '/'
, чтобы получить результат, сопоставленный второму и третьему пользовательскому вводу с совпадением '[' в названии компании.
================ Попытка решить программно в VB.NET ===============
FilterSQL = " AND COMPANies.Name like @CompanyName escape " + Chr(255)
objectParameters.Add(New ObjectParameter("CompanyName", "%" & Chr(255) &
searchResultParam.ParamValue.Value & "%"))
The simple identifier 'ÿ' must contain basic Latin characters only.
To use UNICODE characters, use an escaped identifier. Near line 1, column 320.
=============================================================================
Является ли параметризованный запрос на 100% надежным, даже если пользовательский ввод кодируется так?
ObjectParamters.Add (New ObjectParameter ("@CompanyName ", userinput))
Правильно ли было мое предположение о втором и третьем входе пользователя при экранировании этого символа '['?
In параметризованозапрос LINQ, как выполнить поиск по этому точному сохраненному значению?
COMPANIes.Name = "! @ # $% ^ & * () /` ~ _- + = :; "'|}> <{}]., [] / "</p>