如何以安全的方式访问带有未知密钥的$ _POST变量?

Jop*_*ppo 1 php

我的php文件接收带有未知数字键的$ _POST变量,例如键的textpart已知,但$ _POST变量的数量和数量是未知的.示例:$ _POST [name1],$ _POST [name2],$ _POST [address1],$ _ POST [address2].

我看到访问这些值的唯一方法是通过以下代码:

foreach($_POST as $k => $v){
  if(strpos($k, 'name') === 0) {
    //do something with $v
  }
  if(strpos($k, 'address') === 0) {
    //do something with $v
  }

}
Run Code Online (Sandbox Code Playgroud)

但是,我的Netbeans然后发出警告'不要直接访问超全球$ _POST数组'.我查看了php过滤器输入函数(http://www.php.net/manual/en/function.filter-input.php),但找不到以安全的方式访问这些类型的$ _POST变量的方法.有什么建议?对于初学者(作为初学者的问题:),为什么直接访问$ _POST vars是不安全的做法?

Hle*_*ess 7

使用可变数量的键作为输入时,您可以格式化您的html,使其看起来像:

<input type="text" name="multi_values[1]" />
<input type="text" name="multi_values[2]" />
Run Code Online (Sandbox Code Playgroud)

现在您可以像这样访问这些变量:

foreach($_POST['multi_values'] as $k => $v){
  //do something with $k and $v
}
Run Code Online (Sandbox Code Playgroud)

此外,我可以想到NetBeans可能会抛出这样一个警告的两个原因:超级全局可以在迭代它们时进行变异(至少在支持并发的语言中),并且$_POST变量的内容不稳定/可能是恶意的,因为它受到请求的控制.用户/浏览器.也就是说,在PHP中你可以$_POST很好地遍历数组.只需始终检查并清理输入.