background image

要执行什么,而

process.inc 是真正过滤后的数据到达的地方。

注意
确 保

security.inc 总 是 被 包 含 在 每 个 脚 本 的 最 开 始 的 位 置 比 较 好 的 方 法 是 使 用

auto_prepend_file 设置。
过滤的例子
建立白名单对于数据过滤是非常重要的。由于不可能对每一种可能遇到的表单数据都给出例
子,部分例子可以帮助你对此有一个大体的了解。
下面的代码对邮件地址进行了验证:
<?php$clean 

array();$email_pattern 

'/^[^@\s<&>]+@([-a-z0-9]+\.)+[a-z]{2,}$/i';if 

(preg_match($email_pattern, $_POST['email'])){$clean['email'] = $_POST['email'];}?>下面的代
码确保了

$_POST['color']的内容是 red,green,或者 blue:

<?php$clean = array();switch ($_POST['color']){case 'red':case 'green':case 'blue':$clean['color'] = 
$_POST['color'];break;}?>下面的代码确保$_POST['num']是一个整数(integer):
<?php$clean  =  array();if  ($_POST['num']  ==  strval(intval($_POST['num']))){$clean['num']  = 
$_POST['num'];}?>下面的代码确保$_POST['num']是一个浮点数(float):
<?php$clean  =  array();if  ($_POST['num']  ==  strval(floatval($_POST['num']))){$clean['num']  = 
$_POST['num'];}?>名字转换
之前每个例子都使用了数组

$clean。对于开发人员判断数据是否有潜在的威胁这是一个很好

的习惯。

 永远不要在对数据验证后还将其保存在$_POST 或者$_GET 中,作为开发人员对超

级全局数组中保存的数据总是应当保持充分的怀疑。
需要补充的是,使用

$clean 可以帮助思考还有什么没有被过滤,这更类似一个白名单的作

用。可以提升安全的等级。
如果仅仅将验证过的数据保存在

$clean,在数据验证上仅存的风险是你所引用的数组元素

不存在,而不是未过滤的危险数据。
时机
一旦

 PHP 脚本开始执行,则意味着 HTTP 请求已经全部结束。此时,用户便没有机会向脚

本发送数据。因此,没有数据可以被输入到脚本中(甚至

register_globals 被开启的情况下)。

这就是为什么初始化变量是非常好的习惯。