【问题标题】:Good explaining of using PHP superglobal arrays and while/foreach loops很好地解释了使用 PHP 超全局数组和 while/foreach 循环
【发布时间】:2014-07-01 13:26:13
【问题描述】:

这个问题实际上总共包含 2 个问题。

  1. 我想进一步了解安全性和 $_POST、$_SESSION、... 网页安全性的处理

  2. 不久前有人告诉我不要再使用“旧的”WHILE 循环,即使我从数据库 (MYSQL) 中查询时也始终使用 foreach。

回到我的第一个问题,例如当我这样做时:

$var = $_POST['input'];

我知道我最好转义/保护一些不需要的符号,即 " 或 \ 以防万一有不良意图的人可能会做坏事。 但我看到分配不同的用法。有些人告诉我使用:

$var = filter_input(INPUT_POST, 'input', FILTER_SANITIZE_STRING);

其他人告诉我使用:

$var = mysql_real_escape_string($_POST['input']);

比别人告诉我这样做

$var = $_POST['input'];
$var = mysql_real_escape_string($var);

现在最好、最安全、最现代的方法是什么?我必须保护我的 $_SESSION 吗? 请记住,如果我使用 PDO 从我的 mysql 数据库连接、输入、选择和更新,我总是使用准备好的语句。

对于问题 2,我尝试将我以前的(有时很长)代码更改为更短的(数组)方式,并尝试使用 foreach 和/或在有或没有函数或 oop 类的情况下尽可能好。但是有人告诉我,我最好不要使用 While 而是将所有内容放在 for > foreach 循环中。为什么你不再使用一段时间了,你不再使用它有什么好处。真的也可以完全放弃吗?

提前感谢您的明确解释!

【问题讨论】:

  • 以后请不要把两个不相关的问题放在一个帖子里。只需发布两个单独的问题。
  • 总有人给我的帖子减分,以此为乐?你真的在阅读这两个问题时遇到问题吗?试图在论坛上保持活跃,但如果每次都发生这种情况,那么非常感谢!
  • 我没有否决你的问题,但我想指出,三个人投票结束它是“太宽泛”。 (您需要 250 个代表才能看到这一点。)我的猜测是,否决票和接近票都是因为您在一篇帖子中提出了两个问题。

标签: php arrays foreach while-loop


【解决方案1】:

每当你逃避东西时,上下文是必不可少的。

如果您使用(现已过时的)mysql_ 函数插入数据库,则使用mysql_real_escape_string

如果您作为 HTML 文档的一部分输出到浏览器,则使用 htmlspecialchars

如果您将用户输入作为参数传递给 shell 函数,则使用 escapeshellarg

如果您将用户输入放到 JavaScript 变量中,请使用 json_encode

我在这里要说明的一点是,没有灵丹妙药可以逃避用户输入。这完全取决于您使用它的目的。


上下文对于循环也很重要。如果您正在遍历索引数组,您将使用 for 循环。如果您正在迭代关联(key=>value)数组,则使用foreach。如果您正在循环某个条件,请使用while。所有循环类型都有自己的用途。

【讨论】:

  • 你不需要使用for,因为它是一个索引循环,如果你想使用你自己的迭代条件,你可以使用for,例如,只循环前10个项目而不是全部。 Foreach 将遍历所有值。虽然说..虽然(这)是真的,但这样做。
【解决方案2】:

如果您使用 PDO 准备语句和 bind parameters 作为输入值,则不需要也不应该对值进行任何转义。转义用于将值直接放入 SQL 字符串并且它们需要符合 SQL 语法(例如,对于字符串文字中的嵌入引号)。绑定参数是与 SQL 字符串分开指定的,所以它们不需要这个。

while 循环并没有真正的错误foreach 循环在适用的情况下使用起来更简单。

【讨论】:

    猜你喜欢
    • 2018-02-09
    • 2017-01-07
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2011-08-03
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多