Безопасность с динамически генерируемым SQL-запросом - PullRequest
0 голосов
/ 24 октября 2019

Я создаю поиск в боковой панели (щелкнув параметры) и выбирая переменные, выбранные для создания запроса sql.

Более конкретно:
1. пользователь выбирает параметры в боковой панели.
2. Я создаю str (как URL для вызова), основываясь на этих выборках, добавляя params как 'param1 = value &' ...
3. ajax-вызов php controller-> model-> query dababase на основе параметров через $ _GET.

В конце я использую подготовленные утверждения, но теоретически злоумышленник может составить свой собственный URL. Чтобы избежать этого, я предварительно указываю допустимые значения ($ keysArr), и, если переменные $ _GET отсутствуют, скрипт умирает. Также просто добавьте int () к ожидаемым числовым значениям, чтобы php выдавал ошибку и выдавал ошибку, если это не int.

$keysArr = ['x', 'y', 'z'];

foreach ($ArrfromGET as $key => $value) {
    if (!in_array($key, $keysArr)) {
        die("don't attack me");
    }
}

Я делаю это правильно?
Поиск основан на значениях, сгенерированных динамически, поэтому я не уверен, что с этим делать. Код основан на (https://www.w3schools.com/js/js_ajax_database.asp);

1 Ответ

0 голосов
/ 24 октября 2019

Вы можете попробовать это.

Примечание. Я просто показываю, как защитить динамический запрос в SQL

DECLARE @ParameterDefinition NVARCHAR(MAX) 
 SET @ParameterDefinition = '  
  @P_Name NVARCHAR(50)  
 , @P_Address NVARCHAR(50)';
DECLARE @SQL  NVARCHAR(MAX);
DECLARE @Name  NVARCHAR(50) = '' //set here value
DECLARE @Address NVARCHAR(50) = '' //set here value

SET  SQL = 'SELECT * FROM USER WHERE Name = @P_Name OR Address = @P_Address'


 EXECUTE sp_executesql @SQL, @ParameterDefinition,
 @P_Name = @Name,
 @P_Address = @Address
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...