防止表单在网站外部提交 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.在编写信息登陆程序时,应用到该方法。
转载于:https://www.cnblogs.com/xust/articles/2622087.html