首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >帖子已设置,但未回显

帖子已设置,但未回显
EN

Stack Overflow用户
提问于 2012-12-01 01:01:24
回答 5查看 216关注 0票数 2

我有一个表单发布到一个页面,我有一个奇怪的问题,我从POST数据中获取值。正如您所看到的,在运行条件之前,我可以检查image_idvotefb_id_form是否都已设置。

javascript警报运行,因此我知道设置了三个变量。但我得到的是令人困惑的。我得到了第一个警告窗口,上面写着“有效”。然后我会看到两个空白的警告窗口。当我试图警告他们时,fb_id_form怎么可能被‘设置’(通过条件)却没有值呢?

代码语言:javascript
运行
复制
if(isset($_POST['image_id']) && isset($_POST['vote']) && isset($_POST['fb_id_form'])){
    $image_id = $mysqli->real_escape_string($_POST['image_id']);
    $vote = $mysqli->real_escape_string($_POST['vote']);
    $fb_id_form = $mysqli->real_escape_string($_POST['fb_id_form']);
    echo "<script>alert('worked');</script>";
    echo "<script>alert('".$fb_id_form."');</script>";
    echo "<script>alert('".$_POST['fb_id_form']."');</script>";
}

这是表单数据(在同一页上):

代码语言:javascript
运行
复制
echo "<form method=\"post\" action=\"\">
<input type=\"hidden\" name=\"image_id\" value=\"".$id."\" />
<input type=\"hidden\" name=\"vote\" value=\"1\" />
<input type=\"hidden\" name=\"fb_id_form\" value\"".$fb_id."\" />
<input type=\"submit\" name=\"submitvote\" value=\"Vote\" />
</form>";

这是问题所在。我在表单之前回显了一个$fb_id警报,它给了我正确的值。当我提交它的时候,我想这个值丢失了。

EN

Stack Overflow用户

发布于 2012-12-01 01:19:02

From the manual

isset -确定变量是否已设置且不为空

如果变量为""0false等,则不会返回false。在您的示例中,很容易通过发布以下数据来绕过您的健全性检查:

代码语言:javascript
运行
复制
image_id=&vote=&fb_id_form=

您需要额外的数据验证,您可以使用PHP filter functions进行验证。检查$_POST是否包含这三个参数以及它们是否为整数的示例代码:

代码语言:javascript
运行
复制
$params = filter_input_array(INPUT_POST, array(
'image_id'   => array('filter' => FILTER_VALIDATE_INT, 'options' => array('default' => NULL)),
'vote'       => array('filter' => FILTER_VALIDATE_INT, 'options' => array('default' => NULL)),
'fb_id_form' => array('filter' => FILTER_VALIDATE_INT, 'options' => array('default' => NULL))
));

例如,有人将此数据发布到您的页面:

代码语言:javascript
运行
复制
image_id=&vote=hello+world&fb_id_form=12345

然后,上面的代码将返回:

代码语言:javascript
运行
复制
array(3) {
  ["image_id"]=>
  NULL
  ["vote"]=>
  NULL
  ["fb_id_form"]=>
  int(12345)
}

PS:mysqli->real_escape_string不会验证您的数据。

票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13649672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档