我在分析输入表单时遇到问题
我将举三个例子,都考虑到"用户"形式的变化
<form method="POST" action="#">
<input type="text" name="first_name" value="Albert">
<input type="text" name="last_name" value="Einstein">
</form>
原始字段不变,获取数据:
$_POST=数组('first_name'=>'Albert','last_name'=>'Einstein')
<form method="POST" action="#">
<input type="text" name="first_name[]" value="Albert">
<input type="text" name="last_name[]" value="Einstein">
</form>
掺杂字段,我得到的数据:
$_POST=数组('first_name'=>数组(Albert),'last_name'=>阵列(Einstein))
<form method="POST" action="#">
<input type="text" name="first_name[]" value="Albert">
<input type="text" name="first_name[]" value="Einstein">
</form>
掺杂字段,我得到的数据:
$_POST=数组("first_name"=>数组(Albert,Einstein),"last_name"=>null)
即使在处理"类验证"之前,我也会检查字段是否为预期类型
field_X如果一个字符串如预期,并且我得到了一个数组,我会将其标记为错误还是得到数组的第一个元素?如果我收到一个字符串字段中的数组,那么我将如何用发送的数据填写表单
如果我用$_POST['XXX']
填写字段,则显示Array
我希望我已经清楚了,因为这是一个真正的问题
储罐至所有
您需要验证输入不是脚本顶部的数组
if(isset($_POST['my_field'] AND !is_array($_POST['my_field'])) {
$field = htmlentities($_POST['field'], ENT_QUOTES, 'UTF-8');
// You are now "safe"
}
- 您需要确保响应标头Content-Type在application/*之后包含"UTF-8"如果您的响应不是UTF-8,那么您就很容易受到攻击。始终以UTF-8输出字符串。您可能可以在上面脚本的第一行之后添加一些UTF-8验证
您可以使用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']);
}
在本例中,$_POST["first_name"]如果是字符串,则仅为var_dump()
ed。