在我的页面上,用户可以选择要显示的数据。我只是使用下拉列表和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脚本运行?
答案 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
}