也说投票系统的防范
注意:文章首发eteek的blog,后由原创作者友情提交到邪恶八进制信息安全团队技术论坛。转载请注明原始出处。
PS:eteek就是verror,只因为论坛注册必须要6位。
因为工作需要,需要制作一个投票程序。因为各种原因,只有很短的时间去做这个程序,因为以前没有做过此类程序,因此此程序一直在查找漏洞中运行。个人认为此类程序很能考验一些新手(本人就是)的事务处理能力。
其实这个问题我在邪八发过帖讨论过。
分析与总结如下:
1、禁止外部提交数据。
这一个是非常重要,这个代码很好找,网上就有。
基本就是如下:
2、加验证码
关于加这个功能有很多争议,并且验证码很容易被绕过。放在里面还是不错的,以往我都是放在投票页的,今天看到一个强人噢,他让你一点,就弹出一个页面,让你输入,这针对某些注册机还是非常有效的。
3、加验证码还得必须加上一句:强制刷新与禁止后退功能
强制刷新可以防止验证码问题
禁止后退可以防止那种点“后退”按钮进行操作的方法,不过可能用户使用不方便。
4、限制IP功能
因为某些使用代理来投票。放一个取真实IP的FUNCTION,也是网上,不知道是哪位兄弟写的,先谢过了~
5、COOKIES法与数据库记录法
我采用COOKIES采集与数据库采集同时使用的方法,在判断COOKIES的同时,还要判断数据库中的IP记录,比如说同一天内这个IP的个数,如果超过20也CUT,
给个SQL语句
6、很容易被忽略的一点:
提示“投票成功”页面与投票页的分离,我就犯了这个错误。
所以,要记住在提示response.write("OK")的同时,一定要放在ok.html页,切记切记~~~
当然,如果服务器程序不安全,被人拿到权限,那就没得玩了~
就写这么多了,等俺记起来再说~~
PS:eteek就是verror,只因为论坛注册必须要6位。
因为工作需要,需要制作一个投票程序。因为各种原因,只有很短的时间去做这个程序,因为以前没有做过此类程序,因此此程序一直在查找漏洞中运行。个人认为此类程序很能考验一些新手(本人就是)的事务处理能力。
其实这个问题我在邪八发过帖讨论过。
分析与总结如下:
1、禁止外部提交数据。
这一个是非常重要,这个代码很好找,网上就有。
基本就是如下:
Copy code
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if mid(server_v1,8,len(server_v2))<>server_v2 then
response.write "禁止外部提交数据"
response.end
else
~~~~~~
end if
2、加验证码
关于加这个功能有很多争议,并且验证码很容易被绕过。放在里面还是不错的,以往我都是放在投票页的,今天看到一个强人噢,他让你一点,就弹出一个页面,让你输入,这针对某些注册机还是非常有效的。
3、加验证码还得必须加上一句:强制刷新与禁止后退功能
强制刷新可以防止验证码问题
禁止后退可以防止那种点“后退”按钮进行操作的方法,不过可能用户使用不方便。
4、限制IP功能
因为某些使用代理来投票。放一个取真实IP的FUNCTION,也是网上,不知道是哪位兄弟写的,先谢过了~
Copy code
<%
'**********************************************************
Function getIP()
Dim strIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1,InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1,InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
getIP = Trim(Mid(strIPAddr, 1, 30))
End Function%>
5、COOKIES法与数据库记录法
我采用COOKIES采集与数据库采集同时使用的方法,在判断COOKIES的同时,还要判断数据库中的IP记录,比如说同一天内这个IP的个数,如果超过20也CUT,
给个SQL语句
Copy code
"sql="select * from fy_user where u_ip='" & ip & "'and DatePart('m',u_add_time)=DatePart('m',now()) and DatePart('d',u_add_time)=DatePart('d',now())"”
if rs.RecordCount>=20 then ~~~
6、很容易被忽略的一点:
提示“投票成功”页面与投票页的分离,我就犯了这个错误。
所以,要记住在提示response.write("OK")的同时,一定要放在ok.html页,切记切记~~~
当然,如果服务器程序不安全,被人拿到权限,那就没得玩了~
就写这么多了,等俺记起来再说~~
顶(0)
踩(0)
- 最新评论