时间:2013-07-19 16:48:33

web应用安全参数检测方法(检测输入参数方法)

分享到:

 

前面我们说到,web应用安全的基数是,做好参数检测!就像是小区防止小偷,必须把好所有进入门。然后,对进入人员进行检测!这些我们都清楚的,就是有时候在web应用中,对输入参数检测时候发现困难!因为,输入参数字符可以各种各样,长度也不相同!我们从什么维度准确标识出我所需要的格式呢?

这里我观点是,应用对参数检测可以分为2个关卡,第一个关卡可以是,保证参数输入安全。第二个关卡是保证它是业务所需要的值。一个应用,保证安全是最基础的。我们第一关检测参数,怎么样做比较好呢?

标识参数方法?

所有web传入都是字符串,我们怎么样标识字符串呢?字符串都是有字符组成的,常见是ascii码,对于中文网站,有gb2312,gbk等字符。从这里看,字符个数会很多。它们之间如果做长度不一组合字符串,将会更多了。 因此,再一次说明,不要用现在字符串方法,来检测!有可能你需要限制是无底洞!可以说,对于我们一个web应用参数,90%以上,基本在ascii码就可以,很少参数会突变到这100多个字符范围。所以,标识一个字符串,可以从以下2个方面来限制:

1、字符串 中字符范围 (如:如果是手机号0-9,用户名可能是字母+数字之类)

2、字符串 长度 (如手机号是:11位,用户名可能是:6-15位)

以上方法可以保证,不在用户需要字符范围的字符,一定不能进入后端!我们看看一般例子!

<?php
/**
*读取get值
*@copyright  http://blog.chacuo.net
*@author 8292669
*@param $k string get参数名称
*@param $p string 正则表达式内容
*@return string|array 读取值
*/
function input_get($k,$p='.*')
{
	$v = isset($_GET[$k])?$_GET[$k]:'';
	if(is_array($v))
	{
		$_v = array();
		foreach ($v as $k=>$_v1)
		{
			$_v[$k]=!preg_match("/^".$p."$/",$_v1)?'':$_v1;
		}
		return  $_v;
	}
	return !preg_match("/^".$p."$/",$v)?'':$v;
}

测试:var_dump(input_get(‘a’,'\d+’),input_get(‘b’,'\d+’));  读取a,b参数,都为数字的!

web应用安全参数检测方法 
因为参数b输入是:2ccc,因此不是0-9字符。所以返回为空字符串!

上面这样每次输入正则表达式确实很麻烦的,其实,一个应用,业务字段,应该都比较固定,我们可以再在该基础上面,进一步封装些,取独立业务字段函数。如:input_getUser($k) 专门读取用户名,input_getQQ($k)专门读取QQ号。如此类推,然后我们发现真的需要独立写检测的变得非常少了!

怎么样限制中文字符?

我有一个真实姓名框,需要输入真实姓名!我该怎么样检测?我们知道常见中文字符表是gb2312,其实中国人取名字现在都需要在常见汉字里面挑选。也就是在区位码表中找。所以,我们问题就变成了,怎么样检查用户输入是不是在gb2312字符集中。gb2312是多字节的,一个中文都是2个字节。只要我们先对好范围就可以了。 gb2312字符集表,我们可以查看:http://doc.chacuo.net/gb2312

gb2312字符集 

第一个字节范围是:A1-F7 第2个字节范围是A1-FE ,因此我们正则表达式可以写成:[\xA1-\xF7][\xA1-\xFE] 就可以对2个字节限制了。 “怎么拿过去用不了?”,这里我们做中文限制,只完成第一步,在指定字符集中,找好需要用到中文的字符编码。第二步,就是你要将原字符串转码为该字符集编码。如:你如果是utf-8编码,你需要将获取字符串先转码为gb2312,然后再用gb2312字符位置 正则表达式来检测! 如果,你不转码,你发现刚刚找的那个字符位置正则表达式毫无用处了!通过这个,我们注意做中文位置检测时注意:

1、选择好字符集,找好字符位置,准备好字符范围的正则表达式

2、将待检测字符串,转码为选号的字符集的编码

现在,我们知道了字符串检测方法了,无论简单参数、还是复杂中文字符参数!我们都可以轻松完成了!通过字符串中字符范围定位需要字符在实际检测中,非常安全! 因为,很多经常出现问题字符,都不会出现在应用的参数中!只要我们保证第一个关卡,只允许包含业务相关的字符的字符串进入!应用安全,基本上没有问题!好了,就到这里吧!欢迎朋友们发表自己观点!

作者:程默的博客  QQ:8292669
原文网址:http://blog.chacuo.net/360.html
订阅保持关注:http://blog.chacuo.net/feed
本文版权归作者所有,欢迎转载,请务必添加原文链接。


 

留下评论

要发表评论,您必须先登录