我有一个页面,通过$_GET['page']
从网址抓取变量。
我的问题是,由于我的页面设置,如果它仅用于PHP开关来抓取页面,是否有必要过滤此变量? 例如:
define('TAB_ID', 1100);
define('PAGE_ID', 5005);
define('TITLE','Goodies');
define('MAIN',true);
require_once "global.php";
if(!LOGGED_IN) {
header("Location: ".WWW."/");
exit;
}
if(!isset($_GET['page'])){
$page = "badges";
} else {
$page = clean($_GET['page']);
}
$core->Header(1);
$core->Header(2);
include(TEMPLATES.'/generic-top.php');
switch($page){
default:
case "badges": {
include(TEMPLATES.'/goodies/badges.php');
}
}
include(TEMPLATES.'/footer.php');
我有一个名为clean()
的函数,用于从漏洞中清除变量,但由于此变量未在任何类型的查询中使用,仅适用于switch()
,是否有必要?
我对当前设置没有任何问题,但我只是很好奇。
提前谢谢!
答案 0 :(得分:2)
不。事实上,如果您碰巧有一个"页面,那么消毒可能是有害的。其中包含撇号,或者clean
函数影响的任何内容(您的switch
会失败)
你在这里有一个白名单。您尚未明确定义的任何内容都将被拒绝。
答案 1 :(得分:1)
不仅没有必要,也不可能。你的"清洁"功能,无论它是什么,都没有意义并且不会起作用。您不能神奇地过滤或清除输入值,直到您知道如何使用它。例如,要发送到数据库的值需要用引号括起来,并且要转义引号字符,而要作为文本输出到HTML页面的值需要使用htmlspecialchars()
进行转义,但是清除变量并不是一种通用的方法。