不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
阻止外部提交和客户端脚本不兼容解决方法
编辑:dnawo 日期:2008-01-24
为了阻止一些人恶意的向站点提交内容,我们在站点中加入了阻止外部提交,你将会发现在客户端使用脚本window.open或是document.location.href进行跳转时都成了非法来源了,似乎只能通过点击页面的链接或提交表单的方式才可能是合法的。既然通过提交表单可以,那我们只需在页面中构造一个隐藏的表单,脚本要跳转时动态的更改隐藏表单的提交地址,并用脚本提交表单不就解决了!下边是测试代码:
index.htm:
test.asp:
另一种方法是通过修改服务器端程序:既然我们的目的只是为了阻止外部提交,那么只需在有通过Post或Get方式进行提交数据时才验证来源,其他情况都不验证,这样上边脚本不兼容问题自然也就没有了。上边的程序不仅阻止外部提交,连友情链接也都被阻止了。修改后的服务器端程序如下:
当然,也可以将上边验证程序写成一个函数,在需要的时候再调用也是可以的,这也是一种比较通用的做法:
index.htm:
复制内容到剪贴板
程序代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<!-- <meta http-equiv="refresh" content="5;URL=test.asp" /> -->
<title>外部提交测试</title>
</head>
<body>
<form id="jumpto" name="jumpto" method="post" action="" style="display:none;"></form>
<a href="test.asp">Links</a>
<br /><br /><br />
<input name="btn" type="button" id="btn" value="window.location" onclick="window.location = 'test.asp';" /><br />
<input name="btn2" type="button" id="btn2" value="document.location.href" onclick="document.location.href = 'test.asp';" /><br />
<input name="btn3" type="button" id="btn3" value="window.open" onclick="window.open('test.asp');" /><br />
<input name="btn4" type="button" id="btn4" value="location.replace" onclick="location.replace('test.asp');" /><br />
<input name="btn5" type="button" id="btn5" value="jumpto(就我可以)" onclick="jumpto.action='test.asp';jumpto.submit();" /><br />
</body>
</html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<!-- <meta http-equiv="refresh" content="5;URL=test.asp" /> -->
<title>外部提交测试</title>
</head>
<body>
<form id="jumpto" name="jumpto" method="post" action="" style="display:none;"></form>
<a href="test.asp">Links</a>
<br /><br /><br />
<input name="btn" type="button" id="btn" value="window.location" onclick="window.location = 'test.asp';" /><br />
<input name="btn2" type="button" id="btn2" value="document.location.href" onclick="document.location.href = 'test.asp';" /><br />
<input name="btn3" type="button" id="btn3" value="window.open" onclick="window.open('test.asp');" /><br />
<input name="btn4" type="button" id="btn4" value="location.replace" onclick="location.replace('test.asp');" /><br />
<input name="btn5" type="button" id="btn5" value="jumpto(就我可以)" onclick="jumpto.action='test.asp';jumpto.submit();" /><br />
</body>
</html>
test.asp:
复制内容到剪贴板
程序代码

<%
Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
Server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
Response.Write("来源: " & mid(server_v1,8,len(server_v2)) & "<br/>")
Response.Write("当前: " & Server_v2 & "<br/>")
If mid(server_v1,8,len(server_v2))<>server_v2 then
Response.write "警告!你正在从外部提交数据!!请立即终止!!"
Response.End
End if
%>
Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
Server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
Response.Write("来源: " & mid(server_v1,8,len(server_v2)) & "<br/>")
Response.Write("当前: " & Server_v2 & "<br/>")
If mid(server_v1,8,len(server_v2))<>server_v2 then
Response.write "警告!你正在从外部提交数据!!请立即终止!!"
Response.End
End if
%>
另一种方法是通过修改服务器端程序:既然我们的目的只是为了阻止外部提交,那么只需在有通过Post或Get方式进行提交数据时才验证来源,其他情况都不验证,这样上边脚本不兼容问题自然也就没有了。上边的程序不仅阻止外部提交,连友情链接也都被阻止了。修改后的服务器端程序如下:
复制内容到剪贴板
程序代码

<%
If Instr(Request.Form,"=")>0 or Instr(Request.QueryString,"=")>0 Then
Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
Server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
Response.Write("来源: " & mid(server_v1,8,len(server_v2)) & "<br/>")
Response.Write("当前: " & Server_v2 & "<br/>")
If mid(server_v1,8,len(server_v2))<>server_v2 then
Response.write "警告!你正在从外部提交数据!!请立即终止!!"
Response.End
End if
End If
%>
If Instr(Request.Form,"=")>0 or Instr(Request.QueryString,"=")>0 Then
Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
Server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
Response.Write("来源: " & mid(server_v1,8,len(server_v2)) & "<br/>")
Response.Write("当前: " & Server_v2 & "<br/>")
If mid(server_v1,8,len(server_v2))<>server_v2 then
Response.write "警告!你正在从外部提交数据!!请立即终止!!"
Response.End
End if
End If
%>
当然,也可以将上边验证程序写成一个函数,在需要的时候再调用也是可以的,这也是一种比较通用的做法:
复制内容到剪贴板
程序代码

<%
Sub checkForm()
Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
Server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
Response.Write("来源: " & mid(server_v1,8,len(server_v2)) & "<br/>")
Response.Write("当前: " & Server_v2 & "<br/>")
If mid(server_v1,8,len(server_v2))<>server_v2 then
Response.write "警告!你正在从外部提交数据!!请立即终止!!"
Response.End
End if
End Sub
%>
Sub checkForm()
Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
Server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
Response.Write("来源: " & mid(server_v1,8,len(server_v2)) & "<br/>")
Response.Write("当前: " & Server_v2 & "<br/>")
If mid(server_v1,8,len(server_v2))<>server_v2 then
Response.write "警告!你正在从外部提交数据!!请立即终止!!"
Response.End
End if
End Sub
%>
评论: 0 | 引用: 0 | 查看次数: 4356
发表评论
请登录后再发表评论!