这是至少适度安全的 php 代码吗?
我有一堆 $_POST 变量通过长格式发送,而不是使用 mysql_escape_string()
对每个变量进行硬编码,我可以执行以下操作吗? 我不知道这是否真的是安全和/或可行的代码。
foreach ($_POST as &$post_item){
$post_item = mysql_escape_string($post_item);
}
我相当确定,因为我使用的是 &,它是通过引用而不是值传递它,所以我实际上是在更改 $_POST 中的值。
另外,我应该使用 mysql_real_escape_string() 来代替吗?
编辑:我正在使用 PDO 和prepare() 以及上述方法。 这能帮我解决吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为什么不使用 array_map() ?
但实际上您应该使用参数化/准备好的语句。
mysql_real_escape_string()
考虑当前数据库字符集,mysql_escape_string()
则不考虑。 所以相比之下,前者是更好的选择。编辑(跟进OP对问题的编辑):
由于您已经执行了PDO准备好的语句,因此无需修改您的值。 PDO 负责一切,这就是它的重点(如果您真的将所有数据放入参数中,那就是 - 无论是否使用 PDO,仅连接字符串来构建 SQL 语句都会导致灾难)。 预先转义这些值会导致数据库中出现转义值。
Why not use
array_map()
?But in reality you should be using parametrized/prepared statements.
mysql_real_escape_string()
takes the current database character set into account,mysql_escape_string()
does not. So the former is the better alternative in comparison.Edit (following up the OP's edit to the question):
Since you already do PDO prepared statements, there is no need to modify your values. PDO takes care of everything, that's the whole point of it (If you really put all data in parameters, that is - just concatenating strings to build SQL statements leads to disaster with PDO or without). Escaping the values beforehand would lead to escaped values in the database.
是的,如果您打算走这条路,您应该使用
mysql_real_escape_string()
。 但确保变量可以安全发送到数据库的正确方法是使用参数化查询 通过 mysqli 函数或 PDO.Yes, you should be using
mysql_real_escape_string()
, if you're going to go that route. But the correct way to make sure the variables are safe to send to the database is using Parameterized Queries which are provided in PHP through either the mysqli functions or PDO.除了前面的评论之外,使用参数化查询的另一个好处是数据库将能够进行更好的优化,并且可能使用缓存的查询计划,因此您将获得更好的性能。
In addition to the previous comments, another benefit to using parameterised queries is that the database will be able to do better optimisations and probably use a cached query plan so you will get better performance.