必须过滤PHP GET?

时间:2014-04-13 09:40:25

标签: php sql

我有一个页面,通过$_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(),是否有必要?

我对当前设置没有任何问题,但我只是很好奇。

提前谢谢!

2 个答案:

答案 0 :(得分:2)

不。事实上,如果您碰巧有一个"页面,那么消毒可能是有害的。其中包含撇号,或者clean函数影响的任何内容(您的switch会失败)

你在这里有一个白名单。您尚未明确定义的任何内容都将被拒绝。

答案 1 :(得分:1)

不仅没有必要,也不可能。你的"清洁"功能,无论它是什么,都没有意义并且不会起作用。您不能神奇地过滤或清除输入值,直到您知道如何使用它。例如,要发送到数据库的值需要用引号括起来,并且要转义引号字符,而要作为文本输出到HTML页面的值需要使用htmlspecialchars()进行转义,但是清除变量并不是一种通用的方法。