Cookie在被保存之前需要进行卫生处理吗?

时间:2013-08-03 作者:Brooke.

我最近写了一个插件,现在我正在回溯一些,以清理所有用户输入。我知道我应该清理来自$_GET$_POST 因为用户可以在其中插入恶意脚本。

我也在清理我通过get_options 用户输入只是为了安全(不确定options.php API净化,但这是另一个问题)。

但是饼干呢?这些需要消毒吗?如果是,怎么做?以下是我的功能:

$get_cookie_check = wp_kses($_GET[\'view_full_site\'],null); //sanitize user input
$site_url  =  site_url(); 
$domain  =  parse_url($site_url, PHP_URL_HOST);
    if($get_cookie_check ==\'true\'){
        //set the cookie
        setcookie("nifty_cookie", 1, time()+86400, "/", $domain);
        $_COOKIE[\'nifty_cookie\'] = 1;
    }
}
//cookie variable
$full_site_cookie= $_COOKIE[\'nifty_cookie\']; 
我不认为我需要清理这里的任何东西,因为我是通过PHP设置cookie值(在本例中为1)的人。这是正确的想法吗?

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

这可能只是个人的区别,但我认为:

数据验证意味着数据是否“正确”?这是我们所期望的吗

  • 数据清理是指数据*可以安全使用*
    • 虽然可能会有一些模糊,但通常只有在用户输入或获得某些数据时才会进行数据验证,我们希望在使用之前确保其“正确”。这可能是,如果我们期望一个整数,它是整数吗?如果我们期望一个日期,它的形式是否正确?options API允许您为设置定义验证回调。

      Data sanitisation 是为了使数据安全。这应该在您使用数据的任何时候进行。最好的做法是晚些时候消毒,即只在使用前消毒。通常,如果您使用api函数,例如update_option(), update_post_meta() etc(但在直接处理数据库时,您需要这样做)。

      但什么是安全的取决于上下文。数据是用作url、文本输入、文本区域还是SQL查询?

      所以这取决于你打算如何使用这个变量$full_site_cookie 你应该如何消毒它。

      在上面使用$get_cookie_check = wp_kses($_GET[\'view_full_site\'],null);. wp_kses() 价格昂贵,而且您似乎希望$_GET[\'view_full_site\'] “正确”。为什么不严格要求呢:

      $get_cookie_check = ( !empty( $_GET[\'view_full_site\'] ) )
                            && \'true\' == strtolower( $_GET[\'view_full_site\'] ) );
      //$get_cooke_check is now a boolean.
      

    结束