[在生成sql脚本而不是直接访问数据库时如何防止sql注入漏洞?

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

对于我的工作,我需要生成一个sql脚本来从json文件中更新数据库中的tsome值,如下所示:

$jsonContents=file_get_contents('./myfile.json');
$jsonContents=json_decode($jsonContents, true);

$script="";

foreach($jsonContents['data'] as $element)
{
  $script.="UPDATE mytable element='{$element['value']}' where id={$element['id']};";
}

file_put_contents('./script.sql',$script);

因此,我想知道一旦执行了sql脚本,是否存在潜伏sql注入的危险,还是可以安全地将数据原样放置到sql脚本中?如果在某些情况下sql注入威胁潜伏,如何使我的脚本sql注入安全?

请记住,我被要求提供一个sql脚本,而不是直接访问数据库并使用php更新值。在后一种情况下,我可以只使用PDO和准备好的语句。

数据库层是postgresql。

php database sql-scripts
1个回答
1
投票

清理前端数据毫无意义。知道如何进行注入攻击的任何人都将简单地编辑脚本。使用filter_var解析JSON数据时,可以清理服务器端。

foreach($jsonContents['data'] as $element)
{
    $safeVal = filter_var($element['value'], FILTER_SANITIZE_STRING);
    $safeID = filter_var($element['id'], FILTER_SANITIZE_STRING);
    $script.="UPDATE mytable element=$safeVal where id=$safeID;";
}

如果您的ID是数字,那么它将使用较少的资源来使用其他过滤器,例如FILTER_SANITIZE_NUMBER_INT

这将清除文件,但由于有人可以编辑文件,因此这是一种不好的做法。在更新或创建之前,您需要清理读取文件的服务调用。

© www.soinside.com 2019 - 2024. All rights reserved.