我正在为我最后一年的项目申请 CTF。我想制作一个 SQL 注入标志,但我不希望他们可以通过注入 ' 来简单地发现 SQLi 漏洞。因此,有没有办法使用 PHP 使 SQL 注入更难但并非不可能?
如何使 SQL 注入更难但并非不可能?
信息安全
php
sql注入
2021-08-14 16:55:56
3个回答
盲注 SQL可能是更难的技术之一,因为它需要更多的工作。您可以制作一个不显示任何基于查询的输出的页面,但在查询格式错误时显示错误消息。然后攻击者将被迫使用盲 SQLi 技术对其进行攻击。
当然,自动化工具会立即打破这一点,因为它可以自动化整个注入。一种有趣的解决方法是使用某种超级简单的图像验证码(没有失真,只是一张普通图像),攻击者必须解决它才能发送查询。这将迫使他们手动完成,或者让他们研究 OCR 技术。
您可以隐藏错误详细信息,这使用户更难知道注入是可能的。
正如多项式所提到的,下一个级别将是盲 SQL 注入。
此外,您可以在当前页面之外的另一个页面上反映注入,例如日志页面,这样用户就不会得到关于注入代码的即时反馈。
或者您可以替换输入字符串中的某些字符(参见:SQL 注入:replace(“'”, “''”) 不够好吗?)。
我的第一个想法是限制您寻找的字符或正则表达式模式。您可以限制在用户输入中仅使用某些允许攻击但会使哪种攻击有效的字符串。
我想说想出这样的事情的最简单的方法可能是考虑你希望某人到达的特定攻击,然后向后工作。尝试设计保护以阻止除您希望他们执行的攻击之外的所有内容。它甚至可以简单到使其成为 SQL 注入证明,然后专门允许所需的攻击输入,尽管这可能有点过于棘手,具体取决于您要查找的内容。