如果GET变量不存在,则停止运行PHP

时间:2014-07-28 03:25:11

标签: php html

在我的页面上,用户可以选择要显示的数据。我只是使用下拉列表和GET参数来完成此操作。它目前看起来像这样:

表格:

<form method="get" action="contents.php">
  <select name="TutorialBlock">
    <option value="tuts1">Block One - Starting</option>
    <option value="tuts2">Block Two</option>
    <option value="tuts3">Block Three</option>
  </select>
  <input type="submit">
</form>

根据用户选择的选项加载数据的脚本:

<?php
  $var_value = $_GET['TutorialBlock'];
 include '/includes/'.$var_value.'.php';
?>

这很好用,并且PHP包含正确的文件,具体取决于用户选择的选项,问题是,如果用户没有选择选项,PHP只会抛出找不到文件的错误,因为它正在寻找一个文件不在那里。如果没有设置GET参数,有没有办法可以阻止PHP脚本运行?

3 个答案:

答案 0 :(得分:3)

您现在正在做的是导致一些严重的漏洞。你永远不能相信用户输入。

您应该针对白名单运行$_GET['TutorialBlock']。这是一个例子。

$whitelist = array(
    'page',
    'blockpage',
    //....etc
);

if(isset($_GET['TutorialBlock']) && !empty($_GET['TutorialBlock'])) {
    // now make sure it's in the whitelist.
    if(!in_array($_GET['TutorialBlock'], $whitelist)) {
        die('bad page');
    } else {
        include '/includes/'.$_GET['TutorialBlock'].'.php';
    }
} else {
     // user didn't select page... do something here..
}

上面只是伪代码(例子),你仍然需要确保用户输入是vaid。

答案 1 :(得分:0)

$var_value = isset($_GET['TutorialBlock']) ? $_GET['TutorialBlock'] : false;

if($var_value) {
  include '/includes/'.$var_value.'.php';
} else {
  // query value wasn't there
  exit("TutorialBlock is required");
}

重要

您的代码可能会受到目录遍历攻击的影响。

答案 2 :(得分:0)

if(isset($_GET['TutorialBlock'])) {
    $var_value = $_GET['TutorialBlock'];
    include '/includes/'.$var_value.'.php';
} else {
    //not set
}