我在我的时事通讯订阅者数据库的“电子邮件”字段中找到以下内容:' OR 1=1/*
我知道这是一个 SQL 注入,但就是这样。我已经用谷歌搜索了一下,但我仍然清楚它到底想要达到什么目的。这发生在 11 月初,据我所知,我们在那段时间没有停电。有哪位好心人能告诉我这家伙可能在做什么吗?有没有办法知道他是否实现了他想要做的事情?
我对此几乎一无所知,我很担心。:(
我在我的时事通讯订阅者数据库的“电子邮件”字段中找到以下内容:' OR 1=1/*
我知道这是一个 SQL 注入,但就是这样。我已经用谷歌搜索了一下,但我仍然清楚它到底想要达到什么目的。这发生在 11 月初,据我所知,我们在那段时间没有停电。有哪位好心人能告诉我这家伙可能在做什么吗?有没有办法知道他是否实现了他想要做的事情?
我对此几乎一无所知,我很担心。:(
'OR 1=1
是尝试使查询成功,无论什么/*
是尝试启动多行注释,因此忽略查询的其余部分。
一个例子是
SELECT userid
FROM users
WHERE username = ''OR 1=1/*'
AND password = ''
AND domain = ''
如您所见,如果您要填充用户名字段而不转义,'
无论用户在查询中传递什么凭据,都将返回系统中的所有用户 ID,可能会授予攻击者访问权限(如果管理员是您的第一个用户,则可能是管理员访问权限)。您还会注意到查询的其余部分将被注释掉,因为/*
包含了 real '
。
您可以在数据库中看到该值这一事实意味着它已被转义并且该特定攻击没有成功。但是,您应该调查是否进行了任何其他尝试。
它可能旨在选择表中的所有信息。如果您使用这种查询(例如在 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 代码中添加 /* 时不会将其作为注释忽略