php – SQL注入保护

前端之家收集整理的这篇文章主要介绍了php – SQL注入保护前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我以为我会对我认为基本上消除sql注入的可能性的选项有所了解(我认为).

目前,我有我的管理员帐户,这显然让我完全掌握了数据库(更改,删除等).我有一个PHP使用的帐户只能访问SELECT,UPDATE,DELETE,INSERT.如何为每个操作设置一个用户,然后只是在MysqL_query语句中引用连接ID – 现在显然这会给服务器带来更大的压力,基本上必须进行4个连接,但是如果它的安全性是重要的是,在我看来,这将是一个有效的选项,通过将命令限制为您想要在这种情况下执行的EXACT函数.有关此选项可行性的任何想法?

更新:正如我之前没有提到的那样,这不会是阻止sql注入,MysqL_real_escape_string(),预备语句等的唯一障碍.但我只是想,如果有些人如何,所有这些都失败了,不会这样至少限制他们可以做的伤害? (例如,在注册表单上,他们将无法选择哈希值或删除条目).

这不是sql注入的全部内容.每次使用SQL查询中尚未清理的参数时,都会使数据库处于打开状态,这可能不一定会破坏数据.它也可能是窃取数据或获取未经授权的访问.

考虑一个非常受限制的帐户,它可以做的就是SELECT.您编写了一个身份验证查询

$sql = "SELECT COUNT(*) AS count
          FROM users 
         WHERE user_id='{$_POST['user']}' AND pass='{$_POST['password'}'";

// check if returns a count of 1,if yes,log in

使用正常输入,您希望查询看起来像:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'username' AND pass='********'

如果用户名和传递匹配,则应该返回1作为计数.现在,攻击者尝试以管理员身份登录.由于您尚未清理输入,因此将$_POST [‘user’]发送为:admin’; – .整个查询变为:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'admin'; -- AND pass='********'

之后的所有内容都是注释,因此忽略了其他条件并返回1.你去了,你刚刚授予恶意用户管理员权限.这就是一些真正的攻击的执行方式.您从低权限帐户开始,通过安全漏洞尝试获取更多权限.

长话短说,具有受限制权限的应用程序范围的帐户(例如:没有DROP,ALTER等)是好的.永远不要给任何人或任何应用程序更多的权限.但要防止sql注入,请使用prepared statements.

原文链接:https://www.f2er.com/php/131977.html

猜你在找的PHP相关文章