我最近写了一个插件,现在我正在回溯一些,以清理所有用户输入。我知道我应该清理来自$_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)的人。这是正确的想法吗?
最合适的回答,由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.