防止表单在网站外部提交

防止表单在网站外部提交
January 12, 2010 | tags 表单应用   | views 223
Comments 0
实例说明:
  如果静态网页含有用户提交的表单和字段信息,而从网页的源代码中,又可以看到网页被提交的目标地址,因而修改静态页面表单提交的目标网址,就可以实现在本地运行静态网页并向服务器提交数据。这样,任何人都可以利用网页在网站外登录网站,从而给网站留下严重的安全隐患。为了解决该问题,本实例介绍一种防止表单在网站外部提交的方法,运行本实例,如图一所示,在“用户名”文本框中输入“无语”后,单击“提交”按钮即可进入到网页的处理页面,此时地址栏中的地址即为处理页的地址(用户也可以通过其他方法获得),当用户在本地机器上编写静态表单页时,将目标地址设置为以上地址后,运行网页并提交表单将显示如图二所显示的提示信息。
 
技术要点:
  由于网站服务器的名称是唯一的,而每次从客户端浏览服务器网页时,所浏览的网页中包含了网页的来源信息。因此可以通过比较服务器名称的方法来防止表单在网站外被提交,在本实例中首先使用Request.Server.Variables("HTTP_REFERER")方法获得网页的URL,其中包含了要打开页面的链接和客户装载页面的方法,然后使用Request.Server.Variables("SERVER_NAME")方法获取服务器主机名,最后比较网页的URL中包含的服务器名称和服务器主机名是否相同。如果表单在网站外部提交,网页的URL为空,比较时将发现路径有误。
  ServerVariables集合的语法:
Request.Server.Variables(服务器环境变量)
  常见的服务器环境变量如下表所示。
常见服务器环境变量
环境变量    说明
ALL_HTTP    传送HTTP HEADER头部
ALL_RAW    取得HTTP HEADER的源程序
ALL_MD_PATH    ISAPI DLL应用程序的METBASE路径
AUTH_PASSWORD    使用基本认证时,Client端输入的认证密码
AUTH_USER    认证时使用的用户名
CERT_COOKIE    Client端证书id
CERT_FLAGS    Client端证书是否存在(存在为1)
CERT_ISSUWE    Client端证书发行者信息
CERT_SUBJECT    Client证书内容
CONTENT_TYPE    Client送出内容的类型
HTTP_<headname>    保存在头部的其他信息
QUERY_STRING    QUERY字符串的相关信息
REMOTE_ADDR    远端主机的IP地址
SCRIPT_NAME    正在运行的脚本的名称
SERVER_NAME    运行脚本的服务器的主机名、DNS或IP地址
SERVER_PORT    取得Server端口号
URL    取得URL信息
  说明:ServerVariables集合可用于提供各有关随HTTP请求一起传递的HTTP头信息。
实现过程:
  (1)在网页中添加表单及相关的表单元素,并设置Form表单的相关属性值。
<form name="form1" action="index.asp" method="post">
<div align="center">
<input type="text" name="textfield">
<input type="submit" name="action" value="提交">
<br>
</div>
</form>
  (2)如果表单被提交,将判断表单提交的路径是否有误,如果提交的路径有误,系统将给予提示,禁止从网站外部进行提交的表单。代码如下:
<%
if request("action")="提交" then
ServerName1=Cstr(Request.ServerVariables("HTTP_REFERER"))
ServerName2=Cstr(Request.ServerVariables("SERVER_NAME"))
if Mid(ServerName1,8,len(ServerName2))<>ServerName2 then
  Response.Write "禁止从网站外部提交表单!!"
else
response.Write("页面提交成功!")
end if
end if
%>
举一反三:
  根据本实例,我们可以:
  1.在编写用户登录程序时,应用到该方法;
  2.在开发网站后台的管理员登陆程序时,应用到该方法;
  3.在编写信息登陆程序时,应用到该方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值