网络投票的作弊原理及综合解决方案
2010-04-05赖春江苏哲新
赖春江,苏哲新
(东莞广播电视台阳光网站,广东 东莞 523129)
1 引言
网络调查及投票是伴随互联网的发展而出现的新的调查及投票方式,这种新方式打破了传统投票在时间和地域上的限制,拓宽了参与人群的范围,尤其在电视节目与观众互动中被广泛应用。由于投票的数据基本上是记录在数据库里,使得投票结果的统计和分发变得便捷和及时。但由于HTTP协议本身的缺陷和网络参与者身份确认的复杂性,也使其极易遭受作弊攻击,出现“刷票”行为。近年来,东莞阳光网承办了多次大型网络投票活动,笔者在这些活动的技术工作中积累了一定实践经验,针对在实际工作中发现的不同攻击手段进行深入分析,并提出有效的解决方案。
2 攻击原理及技术
2.1 HTTP的无状态性
超文本传输协议HTTP的设计目的在于支持超文本的传输,客户端向HTTP服务器发送请求,HTTP服务器接收到请求后将相应资源发回给客户端。因为每次的请求和响应都是相对独立的,所以服务器和客户端都没有必要记录这一过程。一般而言,一个URL对应着唯一的超文本资源,HTTP服务器对于不同的客户端的同一个URL的请求也会返回相同的超文本。因此,没有必要记录用户的行为状态,HTTP协议被设计成无状态的连接协议。
2.2 网络投票记录用户行为需求
网络投票一般是指用户通过Web页面在客户端浏览器填写投票表单,然后提交给服务器进行记录处理的一种方式。网络投票往往需要选择候选选项(候选人或候选单位等)、投票人的身份信息(姓名、身份证号码等)。由于投票的结果可能涉及各参与方的利益,候选人往往会为了影响投票结果而进行各种各样的作弊“刷票”行为。因此,为了保证投票结果的公平有效,投票活动组织者需要对投票行为进行有效地控制,其方法一般有要求填写表单的身份证号码字段进行身份证号码合法性校验、IP地址投票限制和验证码等。
2.3 网络投票常见的作弊攻击手段
2.3.1 伪造身份证号码
一般来说,重大的网络投票一般都需要投票者填写表单时提交合法的身份证号码才能进行投票,并以身份证号码来作为甄别是否重复投票的依据。但互联网上的网络投票一般不可能跟公安系统的身份证数据库进行对接,因此,投票处理程序只能从逻辑上根据客户端提交的身份证号码进行算法有效性的校验,只要客户端提交的身份证号码通过算法校验,投票程序就认为这是一个合法的身份证号,并且若投票记录数据库里没有该身份证号码的投票记录就允许其进行投票。因此作弊者很可能对该投票程序进行任意攻击和作弊“刷票”。
2.3.2 突破IP地址投票数限制
为了防止作弊者不断地进行作弊“刷票”,投票处理程序往往对同一个IP地址在特定时间段内的投票总数进行限制。服务器端对客户端IP地址一般会采用两种方式,一种是通过HTTP会话的REMOTE_ADDR获取跟服务器通信的客户端IP地址,如果投票程序通过这种方式获取客户端IP,并对每个IP在某一时段内的投票总数做了限制,作弊者必须拥有相当数量的公网真实IP资源才能对投票程序发起影响结果的攻击;另一种是先通过HTTP头的X_FORWARDED_FOR字段来获取通过代理服务器访问投票服务器的客户端真实IP,但是否可以获取客户端真实IP取决于代理服务器是否允许服务器端获取客户端的真实IP,同时如果客户端不通过代理服务器访问投票服务器,投票服务器同样获取不了客户端的IP。一般来说,Web程序开发人员为了更加准确地获取客户端的IP地址往往会先试图去获取X_FORWARDED_FOR的值,获取失败后再去获取跟服务器直接通信的主机IP。
由于X_FORWARDED_FOR是通过客户端提交的HTTP头来获取,而客户端的HTTP头的数据可以在提交前进行任意修改,因此,Web程序开发人员想尽可能地通过穿透代理服务器获取客户端真实IP地址的美好愿望给投票作弊者敞开了大门,客户端通过修改每次提交的HTTP头里的X_FORWARDED_FOR字段值就能成功突破IP投票数限制进行任意投票。
2.3.3 识别破解图片认证码
为了解决HTTP协议的无状态性给Web应用程序带来的问题,产生了两种用于保持HTTP连接状态的技术,一个是Cookie,而另一个则是Session。由于Cookie值存储在客户端的硬盘上,同样存在与HTTP头一样被修改的危险,因此,数据保存在服务器端的Session技术则显得更加安全可靠。网络投票程序为了防止客户端利用特定软件通过重复提交投票表单信息进行作弊,往往使用图片验证码技术,在服务端生成图片验证码信息并通过Session来对客户端输入进行认证,理论上只要验证码信息不被客户端作弊程序破解,客户端就无法实施大规模的批量刷票作弊行为,从而保证投票的安全可靠。
图片验证码技术的实施,提高了网络投票作弊的技术门槛,在一定程度上保证了投票的安全。同时,投票验证码实施技术的复杂性也对Web开发人员提出了更高的技术要求。目前,基于图片验证码生成技术的难度限制,绝大部分网站都使用了阿拉伯数字和英文字母的图片验证码,并且生成的图片上的干扰线和噪点并不多。针对数字和英文字母的破解算法很容易获取,并且破解率比较高,其攻击原理如下:
1)先分析目标验证码图片的验证码类型(数字、字母或组合型等)、验证码位数、字符位移范围、字符旋转范围、干扰线及噪点、前景色、背景色、图片的大小等。
2)根据验证码类型确定相应的破解字符范围及各字符图片独特的像素值。
3)根据图片的前景色、背景色、干扰线及噪点情况去除图片的干扰线、噪点及背景色。
4)根据验证码位数、字符位移范围、字符旋转范围对图片进行字符截取。
5) 将截取的字符图片跟预先确定的破解字符范围内的字符图片进行像素匹配,匹配像素命中率最高的字符就是验证码字符。
3 解决方案
通过对网络投票攻击原理及手段的技术分析,可以知道目前要完全通过技术手段杜绝网络投票的作弊行为难度很大。但若对现有技术进行改进,并组合使用更加难破解的图片验证码、单一IP投票数限制及身份证号码校验等多种防范手段,可以大幅提高作弊成本并降低其成功率,使其作弊行为不足以影响投票结果。通过同步采取以下几种手段,可以基本堵塞网络投票中的漏洞。
第1种防范手段是采用复杂干扰像素背景中文图片验证码技术。这是最核心的防范手段,通过本网站近年来多场大型网络投票的检验,效果明显,投票结果得到社会各界的公认。该手段采用图片验证码技术,很好地弥补了HTTP协议无状态连接的缺陷。但其缺点是实施技术门槛高,一般网络程序只能生成数字和英文字母验证码,降低了攻击破解技术门槛,这需要对验证码生成技术进行改进。目前,不少允许用户上传图片的网站都会对用户上传的图片叠加网站版权信息的“水印”文字或者图片,因此可以把该技术运用到中文验证码的生成上来。该技术把验证码字符叠加到背景图片上,因此可以根据文字前景颜色选择干扰性强的背景图片,同时对验证码的字符集可以简单地进行大范围扩充,只要服务器上字符集有字符生成,甚至可做出如 “10除以2加3等于几”这样的问题式验证码。用于生成 “水印”的技术一般使用Web Server组件,目前基于ASP,PHP,Java等Web开发语言的组件很容易得到,技术实现的门槛相对也比较低。下面简要介绍其防范流程:
1)预先制作干扰性强的复杂背景图片集,如制作20张图片。
2)随机生成验证码值,并写入Session里。为了投票客户端输入的方便,这里只选择了GB2312字符集的第1级常用汉字3 755个。
3)随机选择背景图片、字体、前景色及验证码位移值,把验证码叠加到图片上。
4)为了防范攻击程序不断重复获取验证码来进行攻击,在生成验证码后随即把系统当前时间当作验码生成时间写入Session里,并在投票程序里提交延时设置。
第2种防范手段是除了使用难破解的验证码外,可以直接获取跟服务器通信的主机IP地址,而不用通过获取HTTP头的X_FORWARDED_FOR字段来获取客户端IP地址,避免IP地址伪造攻击,然后根据需要进行一定的IP投票数限制,使得作弊攻击者必须拥有大量的真实公网IP地址资源,大幅提高作弊门槛和成本。
第3种防范手段是进行投票时要求客户提交个人信息,如提交身份证号码等,并对其进行合法性校验。该方法对使用投票作弊软件的攻击者往往作用不大,但能增加其手动刷票的作弊成本。
第4种防范手段是对每次投票都进行详细记录,如投票对象、投票时间、来源IP、个人信息等,以便发现作弊攻击时进行查找和清理。
4 小结
由于HTTP协议本身的弱点及现有技术的限制,目前难以完全通过技术手段杜绝网络投票的作弊行为,但通过对现有技术的改进,根据具体情况灵活使用不同的技术手段,可以大幅提高网络投票的作弊成本,降低作弊行为的成功率,从而保证投票结果的真实、公正、可靠。