网络投票的安全问题!

zy51 2006-08-18 02:43:46
数据中候选人的设计为其中一字段为ID.

记录身份证和IP的表中有一字段是vote,记录所投人物的ID,限制每人可以投10个.但在数据库中发现有
该字段有形如10,10,10,10,10,10,10,10,10,10的记录.说明有人恶意的串改了内容把10票同时投个一个人了.复选框不能选中10次吧.我不知道他是怎么办到的,求教.

注:我已经做过外部提交限制.只接受本站域名下的参数传递.
...全文
288 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
leohuang 2006-08-20
  • 打赏
  • 举报
回复
dim concenturl
concenturl=""

if trim(concenturl)<>"" and checkserver(concenturl)=false then
response.write "document.write ('数据被保护,禁止被其他站点调用!');"
response.end
end if

上边的禁止就没用,把网页另存下来,把所有的checkbox的id都改成自己的就投票了
你的concenturl从哪来?
定义了之后,接着置空,然后判断第一个条件就不成立,不管第二个条件成不成立都不会,显示"数据被保护....",所以就提交成功了
zy51 2006-08-20
  • 打赏
  • 举报
回复
leohuang(LEO) 正解,判断外部提交的这个过程写完后忘记写上域名了.concenturl本来不是要置空的.哎,粗心,还是亏在粗心上面. 谢谢了!分全是你的.
zy51 2006-08-19
  • 打赏
  • 举报
回复
kafly(王者) 表单如下:
<form name="theform" action="vote.asp" method="post">
<div class="content1">
<%
...数据库链接省略
do while not rs.eof
%>
<div class="list"><img src="<%=rs("img")%>" height="150" width="120" alt="<%=rs("name")%>" onclick="javascript:open('view.asp?id=<%=rs("id")%>','','width=780,height=310')" /><div class="inputc"><input type="checkbox" value="<%=rs("id")%>" name="selectv" id="vote<%=rs("id")%>" /><%=rs("name")%></div></div>
<%
rs.movenext
i=i+1
if i mod 5=0 And i<>20 Then
response.write "</div><div class=""content1"">"
end If
Loop
%>
</div>
<div id="submit">
身份证所在地:
<select name="city">
<option value="云南">云南</option>
<option value="天津">天津</option>
<option value="河北">河北</option>
<option value="山西">山西</option>
<option value="内蒙古">内蒙古</option>
<option value="北京">北京</option>
<option value="辽宁">辽宁</option>
<option value="吉宁">吉宁</option>
<option value="黑龙江">黑龙江</option>
<option value="上海">上海</option>
<option value="江苏">江苏</option>
<option value="浙江">浙江</option>
<option value="广东">广东</option>
<option value="广西">广西</option>
<option value="安徽">安徽</option>
<option value="福建">福建</option>
<option value="江西">江西</option>
<option value="山东">山东</option>
<option value="河南">河南</option>
<option value="湖北">湖北</option>
<option value="湖南">湖南</option>
<option value="海南">海南</option>
<option value="重庆">重庆</option>
<option value="四川">四川</option>
<option value="贵州">贵州</option>
<option value="西藏">西藏</option>
<option value="陕西">陕西</option>
<option value="甘肃">甘肃</option>
<option value="青海">青海</option>
<option value="宁夏">宁夏</option>
<option value="新疆">新疆</option>
<option value="台湾">台湾</option>
<option value="香港">香港</option>
<option value="澳门">澳门</option>
<option value="国外">国外</option>
</select>
身份证号码:<input type="text" value="" name="cardid" /><input type="submit" value="确定投票" class="btn1_mouseout" onmouseover="this.className='btn1_mouseover'" onmouseout="this.className='btn1_mouseout'" /><input type="reset" class="btn1_mouseout" onmouseover="this.className='btn1_mouseover'" onmouseout="this.className='btn1_mouseout'" style="margin-left:20px" value="重新选择" />
</div>
</form>
kafly 2006-08-19
  • 打赏
  • 举报
回复
没问题哦。。。。

表单有问题没?
zy51 2006-08-18
  • 打赏
  • 举报
回复
谁帮忙看看啊?
zy51 2006-08-18
  • 打赏
  • 举报
回复
上面是我写的代码,请大家帮忙看看,是哪里存在问题?
zy51 2006-08-18
  • 打赏
  • 举报
回复
<%
'on error resume next
dim concenturl
concenturl=""

if trim(concenturl)<>"" and checkserver(concenturl)=false then
response.write "document.write ('数据被保护,禁止被其他站点调用!');"
response.end
end if

Private function checkserver(str)
dim i,servername
checkserver=false
if str="" then exit function
str=split(Cstr(str),",")
servername=Request.ServerVariables("HTTP_REFERER")
for i=0 to Ubound(str)
if right(str(i),1)="/" then str(i)=left(trim(str(i)),len(str(i))-1)
if Lcase(left(servername,len(str(i))))=Lcase(str(i)) then
checkserver=true
exit for
else
checkserver=false
end if
next
end Function

'取得身份证号和IP地址
cardid=request.form("cardid")
ip=request.serverVariables("remote_addr")

If cardid<>"" Then
If Left(cardid,2)<>"53" Then errmsg("系统不允许外省身份证投票!")
If Not conn.execute("select ip from card where ip='"&ip&"'").eof then errmsg("您已经投过票了")
If not conn.execute("select idcard from card where idcard='"&cardid&"'").eof Then errmsg("一个身份证,只能投一次票")
call CheckCardId(cardid)
Else
errmsg("身份证不能为空!")
End If

sub errmsg(str)
response.write "<script type=""text/javascript"">window.alert('"&str&"');window.location.href=""index.asp"";</script></body></html>"
response.end
End sub

Function CheckCardId(cardid)
'''身份证验证程序省略
End Function

If request.form("selectv")="" or UBound(Split(request.Form("selectv"),","))+1>10 Then
ErrMsg("您不能不选择,并且最多只能选择10个人进行投票!")
End If

For Each vid In request.Form("selectv")
response.write vid&"<br>"
sql="update person set vote=vote+1 where id="&vid
conn.execute sql
Next

sql1="insert into card (idcard,vote,ip) values ('"&cardid&"','"&request.Form("selectv")&"','"&ip&"')"
conn.execute sql1
errmsg("投票成功!")
%>
kafly 2006-08-18
  • 打赏
  • 举报
回复
想看看你处理表单的程序
tippointGmail 2006-08-18
  • 打赏
  • 举报
回复
截取提交数据的格式,如果没有做数据类型约束,很可能出现类似的问题
对数据库进行了攻击??
估计是程序代码验证不严格的问题
zy51 2006-08-18
  • 打赏
  • 举报
回复
wisword() 刷新的话,那就会另外起一条记录了. 不可能是10,10,10,10这样的存储.
wisword 2006-08-18
  • 打赏
  • 举报
回复
他是用刷新做到的吧,你应该加入防刷新机制
《ASP.NET开发典型模块大全(修订版)》以关键技术和热点技术为核心,通过27个典型模块和5章热点技术,全面地介绍了如何使用asp.net进行各领域的web项目开发。全书共3篇分为32章,第1篇关键模块篇,覆盖网站开发的关键领域,内容涉及论坛、博客、播客、网络硬盘、电子邮件、在线考试、网站备忘录、在线短消息、网站访问量统计与分析、系统后台管理权限分配等网站关键模块;第2篇常见模块篇,覆盖网站开发的各个领域,内容涉及网站会员注册及登录、会员密码找回、留言本、上传与下载、图片资源管理、搜索引擎、网上问卷调查、rss在线订阅、聊天室、购物车、在线银行支付、手机短消息管理、在线音乐、投票系统、万能打印、数据自动备份与恢复等常见模块;第3篇热点技术应用篇,解决网站开发在某个领域遇到的技术难题,内容涉及linq数据访问技术、安全技术、服务技术、ajax、高级应用技术等。 《ASP.NET开发典型模块大全(修订版)》附有配套光盘。光盘提供了书中所有案例的全部源代码,并经过精心调试,在windows xp和windows 2000下全部通过,保证能够正常运行。此外,光盘中还提供有编程词典试用版软件。 《ASP.NET开发典型模块大全(修订版)》案例涉及领域广泛,实用性非常强。学习本书读者可以了解各个领域的特点,能够针对某一行业进行软件开发,也可以通过光盘中提供的模块源代码进行二次开发,以减少开发系统所需要的时间。本书适合各级软件开发人员学习使用,也可供大、中专院校师生学习参考。

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧