日期:2014-05-17  浏览次数:20954 次

关于投票限制问题,没有办法完美限制
我做了一个投票程序,
先是限制了同一IP一天只能投10个,操作是从数据库里取出所有今天的这个IP,如果大于10则限制,后来被人用ADSL之类的动态IP给破了..
我又改了一下程序,在投完个加了个COOKIES,最终还是不行
现在我把两次提交的间隔设为2分钟,我还是看到有人能不停的提交,
兄弟们帮忙想想个办法..谢谢!
有什么好的经验告诉兄弟

------解决方案--------------------
IP---> ADSL
COOKIES---> 清本地电脑的COOKIES
SESSION---> 关本地浏览器



------解决方案--------------------
1、判断HTTP_REFERER来源
2、客户段加cookies,最好加密后在存
3、提交间隔时间的判断在服务器端取时间
4、IP限制加上
5、加上图形验证码

以上五项同时采用,所有判断都在服务器端判断,不要用javascript判断,最终作弊的人会觉得作弊太麻烦而放弃
------解决方案--------------------
1、判断HTTP_REFERER来源
2、客户段加cookies,最好加密后在存

这两个做了等于白做的,要搞你的人不会觉得麻烦的
------解决方案--------------------
用邮件验证吧,投一票后不立即生效,而是要投票者提供一个email,然后发送一封验证邮件,让他自己去验证,验证通过后那一票才生效.同时将这个email地址入库以标识为已投票.呵呵
------解决方案--------------------
以下代码相对较危险,不推荐使用
<%
dim remoteaddr
if Request.ServerVariables( "HTTP_X_FORWARDED_FOR ")=empty then
remoteaddr=Request.ServerVariables( "REMOTE_ADDR ")
else
remoteaddr=Request.ServerVariables( "HTTP_X_FORWARDED_FOR ")
end if
Response.Write(GetMac(remoteaddr))
'由于读取某IP的网卡MAC地址
'本程序通过调用arp命令通过查询本机arp表读取特定IP的MAC地址
'使用本程序需注意以下事项:
' 本程序需要“WSCRIPT.SHELL”和“Scripting.FileSystemObject”两个组件,请确保您的服务器可以正常使用这两个组件
' 本程序需要调用cmd.exe程序,请确保IIS来宾帐号对程序有访问权限。
' 本程序需要临时文件保存结果,请确保IIS来宾帐号对临时目录有写权限。
'
function GetMac(IP)
On Error Resume Next
Dim oScript
Dim oFileSys, oFile
Dim All, szTempFile,ipc,phyc,typec
Dim TempPath
Set oScript = Server.CreateObject( "WSCRIPT.SHELL ")
Set oFileSys = Server.CreateObject( "Scripting.FileSystemObject ")
TempPath= "d:\temp\ " '临时目录
szTempFile = TempPath & oFileSys.GetTempName() ' 获取临时文件名
Call oScript.Run ( "cmd.exe /c ping -n 2 " & IP, 0, True) '保证arp表中有此IP
Call oScript.Run ( "cmd.exe /c arp -a " & IP & " > " & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
All=oFile.ReadAll()
oFile.Close
If (IsObject(oFile)) Then
Call oFileSys.DeleteFile(szTempFile, True)
End If
arr = Split(All, vbCrLf)
If UBound(arr) = 4 Then
ipc = InStr(1, arr(2), "Internet Address ")
phyc = InStr(1, arr(2), "Physical Address ")
typec = InStr(1, arr(2), "Type ")
If typec > phyc And phyc > ipc And ipc > 0 Then
GetMac=Ucase(Trim(CStr(Mid(arr(3), phyc, typec - phyc))))
End If
End If
End function
%>