Php 防止字符串字段中的数组-XSS

Php 防止字符串字段中的数组-XSS,php,arrays,forms,validation,xss,Php,Arrays,Forms,Validation,Xss,我在分析输入表单时遇到问题。。。 我将给出三个例子,都考虑到“User”形式的变化 原始字段不变,获取数据: $\u POST=数组“first\u name”=>“Albert”,“last\u name”=>“Einstein” 掺杂字段,我得到数据: $\u POST=array“first\u name”=>array Albert,“last\u name”=>array Einstein 掺杂字段,我得到数据: $\u POST=数组“first\u name”=>数组Albert,

我在分析输入表单时遇到问题。。。 我将给出三个例子,都考虑到“User”形式的变化

原始字段不变,获取数据: $\u POST=数组“first\u name”=>“Albert”,“last\u name”=>“Einstein”

掺杂字段,我得到数据: $\u POST=array“first\u name”=>array Albert,“last\u name”=>array Einstein

掺杂字段,我得到数据: $\u POST=数组“first\u name”=>数组Albert,Einstein,“last\u name”=>null

即使在处理“类验证”之前,我也会检查字段是否属于预期的类型? 字段_X如果字符串如预期的那样,并且我得到了一个数组,我会将其标记为错误,还是得到数组的第一个元素

如果我接收到一个字符串字段中的数组,那么我将如何用发送的数据填写表单? 如果我用$\u POST完成字段,数组中会出现['XXX']

我希望我已经清楚了,因为这是一个真正的问题 您可以使用gettype进行类型验证

form.html:

<form method="POST" action="action.php">
    <input type="text" name="first_name" value="Albert">
    <input type="text" name="last_name" value="Einstein">
</form>
action.php

<?php

if (gettype($_POST['first_name']) === 'string') {
    var_dump($_POST['first_name']);
}

在本例中,$\u POST['first\u name']仅在为字符串时才被var\u转储。

您需要验证输入是否不是脚本顶部的数组

if(isset($_POST['my_field'] AND !is_array($_POST['my_field'])) {
  $field = htmlentities($_POST['field'], ENT_QUOTES, 'UTF-8');
  // You are now "safe"
}
您需要确保您的响应头内容类型在应用程序之后包含UTF-8/* 如果您的响应不是UTF-8,则您很容易受到攻击。始终以UTF-8格式输出字符串。您可能可以在上面脚本的第一行之后添加一些UTF-8验证。
朋友,你不明白。first_name字段必须是string,但可以将该字段更改为name=first_name[],这将生成一个数组值,谢谢。我知道了,您所说的是请求伪造。您可以使用gettype将类型验证添加到验证列表中。gettype不一定数组类型的问题很严重,那么我认为最好的选择是使用\u数组。当我在数组中找到值或播发类型错误时,\u array是否为true?这一部分是关于standardabout模式的:当一个数组我应该在数组中找到值或者公布一个类型错误时?要么作为数组发送请求,要么不作为数组发送请求。如果您不选择以数组的形式发送数据,那么就不要在数组中查找值,因为这是不必要的,因为我假设您可以完全控制预期的请求介质。允许动态请求是不合适的。在这种情况下,使用数组没有任何优势。不要公布类型错误,只显示404或一般错误消息,不给黑客太多的工作。解决一个通用消息。。。这个问题发生在测试我的验证类时,我想我必须为类型创建一个规则。
<form method="POST" action="action.php">
    <input type="text" name="first_name" value="Albert">
    <input type="text" name="last_name" value="Einstein">
</form>
<?php

if (gettype($_POST['first_name']) === 'string') {
    var_dump($_POST['first_name']);
}
if(isset($_POST['my_field'] AND !is_array($_POST['my_field'])) {
  $field = htmlentities($_POST['field'], ENT_QUOTES, 'UTF-8');
  // You are now "safe"
}