我在时事通讯订阅者数据库的“电子邮件”字段中发现以下内容:' OR 1=1/*
我知道这是 SQL 注入,但仅此而已。我用谷歌搜索了一下,但我仍然清楚它到底想要实现什么。这发生在 11 月初,据我所知,当时我们没有出现停电情况。你们好心人能告诉我这个人可能正在尝试做什么吗?有没有办法知道他是否实现了他想要做的事情?
我对此几乎一无所知,而且我很担心。 :(
'OR 1=1
是无论如何都要让查询成功的尝试/*
是尝试启动多行注释,因此查询的其余部分将被忽略。
一个例子是
SELECT userid
FROM users
WHERE username = ''OR 1=1/*'
AND password = ''
AND domain = ''
正如您所看到的,如果您要填充用户名字段而不转义
'
,无论用户在查询中传递什么凭据,都会返回系统中可能向攻击者授予访问权限的所有用户ID(如果管理员是您,则可能是管理员访问权限)第一个用户)。您还会注意到查询的其余部分将被注释掉,因为 /*
包括真正的 '
。
您可以在数据库中看到该值,这意味着它已被逃脱并且特定攻击没有成功。但是,您应该调查是否进行了任何其他尝试。
它可能旨在选择表格中的所有信息。如果您使用这种查询(例如在 PHP 中):
mysql_query("SELECT * FROM newsletter WHERE email = '$email'");
电子邮件 ' OR 1=1/* 将给出此类查询:
mysql_query("SELECT * FROM newsletter WHERE email = '' OR 1=1/*");
因此它选择所有行(因为 1=1 始终为真,并且查询的其余部分被“注释”)。但没有成功
数据库中的具体值不是您应该关注的。这可能是攻击者模糊测试您的系统以查看它是否容易受到一组标准攻击的结果,而不是利用已知漏洞进行有针对性的攻击。
您应该专注于确保您的应用程序能够抵御这些类型的攻击; OWASP 是一个很好的资源。
如果您使用参数化查询来访问数据库,那么您可以安全地防止 Sql 注入,除非您也在后端使用动态 Sql。
如果您不这样做,您就很容易受到攻击,您应该立即解决此问题。
此外,您应该考虑对电子邮件地址进行某种验证。
如果您对用户输入使用验证代码,以限制在输入表单中使用符号和部分代码,那就更好了。如果您在 html 代码中嵌入 php,则您的 php 代码必须位于顶部,以确保如果黑客编辑页面并在您的 html 代码中添加 /* ,它不会被作为注释而忽略