这个问题不是关于为已验证的函数创建一个实际的替代方案来防止注入(inject),而是关于如何与那些看不到他们自制的注入(inject)预防代码中的缺陷的人争论!
我正试图向一位同事表明观点,但他的 SQL 注入(inject)“解决方案”对我来说似乎相当安全。
他通过做清除查询
$query = $_POST['username'];
$look = array('&', '#', '<', '>', '"', '\'', '(', ')', '%');
$safe = array('&', '#', '<', '>', '"', ''', '(', ')', '%');
str_replace($look, $safe, $query);
然后继续登录
"SELECT * FROM users WHERE username = '" . $query . "'
AND password = '" . md5($_POST['password']) . "'";
我正试图让他使用 PDO 或等同物,但你怎么能真的破坏这种保护?我没有答案,这真的很困扰我,因为我无法向他解释这为何不安全以及为什么不应该这样做。
最佳答案
我建议“这种方法是否可以被破坏”的问题是不相关的。真正要问的问题是“为什么您要使用自己开发的临时解决方案,而不是已经编写、测试和调试并且已经被成千上万的用户使用的解决方案?”
关于php - 如何突破此 SQL 注入(inject)保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14524575/