我正在创建侧边栏搜索(通过单击选项),并选择单击的变量来创建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);
您可以尝试这个。
注意,我只是展示如何在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