php - 如何突破此 SQL 注入(inject)保护

标签 php sql-injection

这个问题不是关于为已验证的函数创建一个实际的替代方案来防止注入(inject),而是关于如何与那些看不到他们自制的注入(inject)预防代码中的缺陷的人争论!

我正试图向一位同事表明观点,但他的 SQL 注入(inject)“解决方案”对我来说似乎相当安全。

他通过做清除查询

$query = $_POST['username'];
$look = array('&', '#', '<', '>', '"', '\'', '(', ')', '%');
$safe = array('&amp;', '&#35;', '&lt;', '&gt;', '&quot;', '&#39;', '&#40;', '&#41;', '&#37;');
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/

相关文章:

mysql - 在 Rails 中以安全的方式使用子字符串查询

java - 被困在密码更改代码中

mysql - hibernate SQL 注入(inject)

php - nodejs中的远程mysql数据库连接

php - 使用ajax动态添加元素到表格

php - 如果我的表在 mysql 中有超过 200 列,是否会出现性能问题?

php - 如何在php中计算两个时间之间的差异并显示出来

c# - 我应该如何处理表单中的单引号以帮助防止 SQL 注入(inject),使用 WebMatrix razor (C#)

php - jQuery、javascript 数组/对象 SQL 注入(inject)问题

php - 如何使用 PHP 选择和回显 MySQL 数据(一对多)