具有动态生成的sql查询的安全性

问题描述 投票:0回答:1

我正在创建侧边栏搜索(通过单击选项),并选择单击的变量来创建sql查询。

更具体地说:1.用户在侧栏中选择选项。2.我根据添加的参数作为“ param1 = value&”的选择创建str(作为要调用的URL)...3.通过$ _GET基于参数对Ajax调用php控制器->模型->查询dababase。

我最后使用准备好的语句,但是从理论上讲,攻击者可以编写自己的url。为了避免这种情况,我预先指定了允许的值($ keysArr),如果$ _GET vars不存在,脚本就会死掉。也可以简单地将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);

javascript sql ajax search
1个回答
0
投票

您可以尝试这个。

注意,我只是展示如何在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
© www.soinside.com 2019 - 2024. All rights reserved.