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>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
%>另一种方法是通过修改服务器端程序:既然我们的目的只是为了阻止外部提交,那么只需在有通过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
%>当然,也可以将上边验证程序写成一个函数,在需要的时候再调用也是可以的,这也是一种比较通用的做法:
<%
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)
暂无评论。