这是至少适度安全的 php 代码吗?

发布于 2024-07-17 09:31:41 字数 403 浏览 7 评论 0 原文

我有一堆 $_POST 变量通过长格式发送,而不是使用 mysql_escape_string() 对每个变量进行硬编码,我可以执行以下操作吗? 我不知道这是否真的是安全和/或可行的代码。

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}

我相当确定,因为我使用的是 &,它是通过引用而不是值传递它,所以我实际上是在更改 $_POST 中的值。

另外,我应该使用 mysql_real_escape_string() 来代替吗?

编辑:我正在使用 PDO 和prepare() 以及上述方法。 这能帮我解决吗?

I have a BUNCH of $_POST variables being sent in via a long form and instead of hard coding each one with a mysql_escape_string() is it ok for me to do the following? I don't know if this is actually safe and/or viable code.

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}

I'm fairly certain that because i'm using the &, it's passing it in by reference, not value, so i'm actually changing the value in the $_POST.

Also, should I use mysql_real_escape_string() instead?

EDIT: I am using PDO and prepare() along with the above method. Does this take care of it for me?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦情居士 2024-07-24 09:31:41

为什么不使用 array_map() ?

array_map(mysql_real_escape_string, $_POST);

但实际上您应该使用参数化/准备好的语句。

mysql_real_escape_string() 考虑当前数据库字符集,mysql_escape_string() 则不考虑。 所以相比之下,前者是更好的选择。

编辑(跟进OP对问题的编辑):

由于您已经执行了PDO准备好的语句,因此无需修改您的值。 PDO 负责一切,这就是它的重点(如果您真的将所有数据放入参数中,那就是 - 无论是否使用 PDO,仅连接字符串来构建 SQL 语句都会导致灾难)。 预先转义这些值会导致数据库中出现转义值。

Why not use array_map()?

array_map(mysql_real_escape_string, $_POST);

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.

花期渐远 2024-07-24 09:31:41

是的,如果您打算走这条路,您应该使用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.

夜清冷一曲。 2024-07-24 09:31:41

除了前面的评论之外,使用参数化查询的另一个好处是数据库将能够进行更好的优化,并且可能使用缓存的查询计划,因此您将获得更好的性能。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文