我在日志中发现有人试图攻击我的页面。我有一些子页面,其中数据是通过 URL 提交的 ID 从数据库中提取的。喜欢页面.php?id=666我可以在日志中找到这些攻击:
page.php?id=../../../../../../../../../../etc/passwd
page.php?id=/proc/self/environ
page.php?id=-1%27
更重要的是,我的代码很弱吗?这次攻击会成功吗?
$id = intval($_GET['id']);
$stmt = $con->prepare("SELECT *
FROM mytable AS myvar
WHERE myvar.ID =:ID");
$stmt->bindValue(':ID', $id, PDO::PARAM_INT);
$stmt->execute();
提前感谢!
不,此代码不易受到 SQL 注入的攻击。
intval
转换和具有PDO::PARAM_INT
绑定的预准备语句都确保在比较正在执行的语句时仅使用整数值。
无论如何,上述请求似乎不仅旨在识别SQL注入,还旨在识别几个不同的漏洞,例如路径遍历(CWE-22)和本地文件包含(CWE-98)。因此,您可能还需要注意这些漏洞。
看起来攻击者试图访问 Web 服务器上各种目录中的文档和其他数据。我不认为这是SQL注入。但是,请确保在必要时保护对目录和所有文档的访问。
您在PDO上带有准备好的陈述,这应该可以防止您被注射。