在
PHP 5.2中有一个很好的安全功能,被称为“input_filter”,所以不是说:
$name = $_GET['name'];
你现在可以说:
$name = filter_input (INPUT_GET,'name',FILTER_SANITIZE_STRING);
并自动清除您的字符串,还有:
> FILTER_SANITIZE_ENCODED
> FILTER_SANITIZE_NUMBER_INT
> FILTER_SANITIZE_EMAIL
> FILTER_SANITIZE_URL
等等
所以这是使用非常方便的安全功能,我想完全切换到它.
问题是…我经常在处理它们之前操作$_GET和$_POST数组,如下所示:
$_GET [‘name’] ='(默认名称)’;
但是似乎filter_input无法访问$_GET中的更改,因为它读取类型为int(?)的“INPUT_GET”.如果我可以得到filter_input来读取$_GET,但是会很好:
$name = filter_input ( $_GET,FILTER_SANITIZE_STRING );
给我错误:
Warning: filter_input() expects parameter 1 to be long,array given.
任何人都可以想到一种可以的方式:
>操纵INPUT_GET的源(不管它是什么),以便我可以在filter_input读取它们之前更改其值
> get filter_input读取$_GET
附录:
Rich问:“你为什么要改变数组,当然你希望他们是一个输入,而不是你以编程方式插入的东西.”
这是一个非常方便的地方预处理变量,例如为了:
> set defaults(if $_GET [‘state’] =”then $_GET [‘state’] =’AL’)
>做手工处理(删除所有空格等)
>安全性(其中一些将由filter_input完成)
然后我知道当我得到传入的变量,它是安全和有效的.当然,我可以将$_GET数组复制到另一个数组并处理THAT数组,但这只是一个不必要的步骤,因为$_GET已经是一个功能齐全的数组,所以使用已经存在的这些系统数组是有意义的.
您可以手动强制使用
filter_var和
filter_var_array再次读取阵列
$name = filter_var ( $_GET['name'],FILTER_SANITIZE_STRING );