在php中查询字符串

时间:2011-05-05 14:38:12

标签: php security

这段代码有一些安全问题?制作查询字符串的正确方法是什么?

我通常不会使用这种类型的代码,所以我的问题。

 <?php
    $id = $_REQUEST['id'];
    ?>
    <?
    switch($id) {

        case "principal":
            $pagina = "pag.php";
            break;
        case "perfil":
            $pagina = "secure.php";
            break;

        default:
            $pagina = "home.php";
            break;
    }
    ?>

    <?
    if( (isset($pagina)) and (file_exists($pagina)) ) {
        include($pagina);
    } else {
        echo "Page error";
    }
    ?>

5 个答案:

答案 0 :(得分:1)

唯一可能的问题是,如果您从$ _REQUEST获取ID,有人可以通过在URL字符串中放入?id = x来更改您的查询。在你的情况下可能无关紧要(很难说因为我们不知道发生了什么的完整背景),但这是可能的。您可以通过向用户隐藏的$ _POST将变量发送到页面来使其更加安全。

答案 1 :(得分:1)

入侵者可以从secure.php中猜出id并通过在他的浏览器中输入yourpage.php?id = perfil来访问它...

答案 2 :(得分:1)

如果你的select语句变大,我建议使用数组:

// array of pages
$paginas = array(
    'principal' => 'pag.php',
    'perfil' => 'secure.php'
);

$id = (int)$_GET['id'];

if ( isset( $paginas[$id] ) && file_exists($paginas[$id]) ) {
    require( $paginas[$id] );
}
else {
    require('home.php');
}

答案 3 :(得分:0)

对于涉及$ id的每种情况,您都有一个处理程序,因此它应该是安全的。您也不需要这个,因为$ pagina将始终设置为:(isset($pagina))

答案 4 :(得分:0)

我会为此添加一些htmlspecialchars。你永远不会知道人们可以尝试做什么!

如果你想确保“双重”,那么你可以随时做;

filter_var($val, FILTER_SANITIZE_STRING);