如何防止站外提交数据?从理论上说是没有绝对可行的办法。如果你要找绝对可行的办法。请跳过此文,此文只是提高站外提交的难度。
一、为什么要防止站外提交数据?
1、有的人为了减轻对服务器的压力,把对用户输入的数据的有效性判断放在了JS里,而从站外提交时,数据没有进行有效性判断。(其实这种方法很笨。)
2、防止机器人提交数据。比如,批量用户注册。批量发帖。
3、安全性。
二、防止站外提交的方法
本文来自李生平的博客。本文网址:http://www.lishengping.com/archives/46
1、判断HTTP中的Referer。Referer记录了来源页的网址。判读来源页的域名即可知道是否站外提交。(破解方法:伪造Referer)
2、Session法。当用户进入网站的时候设置一Session,当用户提交数据时在判断这个Session。但问题是,为了标识用户是哪个Session,服务器回向浏览器写入一个标识的Cookie。(破解方法:访问一个表单页,记录Cookie,当提交的时候把Cookie也提交)
3、设置强大的Hash。当打开表单页时,给表单生成一个Hash,当提交是判断这个Hash。(破解方法:正则匹配Hash,提交时将Hash一起提交)
4、验证码。在表单中设置验证码。如果验证码不够强大,可以被程序识别。如果验证码强大,可以提交数据之前人工识别。(破解方法:虽然还是要人工录入验证码。但已经和在网页里提交数据相比,要省事多了)
三、以上防止站外提交数据的方法的通用破解方法。
一般网站是使用HTTP协议。那么只要伪造一个和原来HTTP请求相似的HTTP请求就可了。
四、增加站外提交数据的难度。
通常站外提交数据的方法有2种:1、外站的FORM。2、非浏览器进行POST数据。
第一种方法局限性很大,比如不可以伪造HTTP头信息。很容易就得到了防止。
第二种方法可以伪造HTTP请求。如果是高手破解防站外提交数据,几乎是没办法防止站外提交数据的。
通常情况下,非浏览器提交数据都是不会去下载JS、图片、CSS文件。也就是说,当用户打开表单页。浏览器会下载当前页的图片、JS、CSS文件。而非浏览器却只下载HTML文件。也就是说,当下载HTML是设置一个SESSION,当下载HTML所包含的JS或其他类型文件时改变这个SESSION的值。当提交数据时判断这个SESSION是否改变值。这种方法不会让HTTP请求发生改变。因此破解者很难发现防止站外提交数据的方法和其他文件有关。让破解者琢磨不透。
这个SESSION的值可以是整数。下载一个文件加1,假如这个FORM所在页有2个CSS文件,4个JS文件,7个图片,那么可以判断这个SESSION的值应该大于几(例:8)。
这只是增加外站提交数据难度的一个方法。非一定能防站外提价数据。