【发布时间】:2020-10-15 14:23:31
【问题描述】:
我正在审核以下代码:
function getNormalizedLocationPath($path)
{
$path = is_scalar($path) ? strtolower(trim($path)) : '';
$path = preg_replace('/[^a-z0-9.]/', '', $path);
return $path;
}
$path=getNormalizedLocationPath($_GET['path']);
$sql= "INSERT INTO paths VALUES (${path})";
$pdo = new PDO();
$pdo->query($sql);
如您所见,这是一段明显的 SQL 注入漏洞代码,但我很难证明这一点。我如何证明这段代码容易受到我的主管的攻击?
【问题讨论】:
-
由于“消毒”功能只留下字符 a-z、0-9 和点,我看不出这里会造成多大的损害。超出预期的“扩展” SQL 语法,通常需要在某处使用引号、大括号或至少是空格……由于没有使用引号围绕该值,因此该查询当然只能工作对于以数字开头的值,其他任何内容(除了值关键字,例如
nullmabye)都会导致开头出现语法错误。
标签: php sql-injection