thinkphp 页面提交参数的过滤(转义)

当使用thinkphp框架接受表达内容。

如果使用I函数获取表单数据,如I("data");这个数据是默认被过滤的。

默认的过滤方法

'DEFAULT_FILTER'        =>  'htmlspecialchars', // 默认参数过滤方法 用于I函数...

如果对输入的参数进行正则匹配,当遇到特殊字符时会出问题。

htmlspecialchars的反函数为htmlspecialchars_decode()。使用该函数可以把转义的参数再转回来。

但这并没有解决全部问题,因为不同版本的thinkphp的I函数是不一样的,而且DEFAULT_FILTER还可以设置别的值。

所以当我们确实需要获取原始数据而非转义数据时,还是使用最原始的 $_POST("PARAM");最靠谱。


但是这事还是没完。因为php里还有addslashes()函数他会过滤提交给php的参数。也就是用原始的$_POST依然要面对过滤的问题。

我可以通过get_magic_quotes_gpc()来判断是否开启了该过滤,并用stripslashes()反过滤。

不幸的是,不同版本里的php对该函数的支持依然不同,php6里该函数被取消了。


综上,你不得不再每个项目里去测试框架和php参数的过滤,以使项目按照您的意愿执行。

另外如果您的php框架使用的是gbk的编码的话,那么还会出现字符集转换的问题,但这并不代表使用utf-8字符集时不会有问题。

总之对于输入参数的过滤转义,和字符集的转化都是非常麻烦而且特例特测的事情。


测试技巧。

不要仅直接用输入和输出的方式来测试,因为这个过程可能经历了多个过滤。

使用在php文件中定义变量然后输出,测试输出没有问题,再测试$_POST,再测试I函数。

如果要确保输入的数据安全还是自己用正则表达是来过滤一般,这是最靠谱的啦。

其次I(函数)的安全性还是有的,一般情况尽量使用I(函数)

特别情况,尽量使用$_POST来处理,一方面是效率更高而且代码中区别对待可读性好,还有就是不必关心DEFAULT_FILTER参数的设置。

在php5中去反addslashes()的函数

	//去掉在引号前面自动加的:单引号('),双引号("),反斜杠(\),和NULL
function deal_quote($str){
	if(get_magic_quotes_gpc()) {
		return stripslashes($str);
	}
}

I(函数)过滤器  htmlspecialchars() & (和号)" (双引号) ' (单引号) < (小于) > (大于)
php中过滤器  addslashes()  单引号('),双引号("),反斜杠(\),和NULL

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值