SQL注入尝试 - 我的代码容易受到攻击


SQL injection attempt - is my code vulnerable?

我在日志中发现有人试图攻击我的页面。我有一些子页面,其中数据是通过 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上带有准备好的陈述,这应该可以防止您被注射。