JSP —— 使用referer 请求头防止表单从外部提交,防止从外部登录网站

来源:互联网 发布:哪里胡杨林最美 知乎 编辑:程序博客网 时间:2024/05/22 01:26

我将访问网站分为普通访问与登录访问,前者是以游客身份,后者是以该网站的用户身份。

对于游客身份,游客能看到的信息必然只能是公共的,不涉及隐私的,所以对于游客所显示的页面的链接可以在任何网站引用。

对于用户身份,用户需要登录网站,出于某些安全因素考虑,我们通常希望用户只能通过网站的登录页面登录网站,而不能通过其他网站登录,这就涉及到本篇日志的主题。


分三部分:第一部分,从外部的登录网站示例;第二部分,阻止从外部登录;第三部分,一些小知识点。


一、从外部登录网站示例

1、index.jsp为工程web应用JWebStudyJSP 的登录页面,里面有个用于提交登录信息的表单:

<form action="http://localhost:8088/JWebStudyJSP/testEncode.jsp" method="get"><input type="text" name="userName"/><input type="pass" name="userPass"/><input type="submit" value="Submit"></form>
说明:

之所以把action的路径写完整,是为了在浏览器端能看到此登录页面的提交位置,然后在其它工程中模拟用户利用此url 登录应用。

2、新建一个工程JTest,写一个页面,取名为loginFromOtherSite.html,里面利用上面的url:

<form action="http://localhost:8088/JWebStudyJSP/testEncode.jsp" method="get"><input type="text" name="userName" value="aName"/><input type="pass" name="userPass" value="1234"/><input type="submit" value="Submit"></form>
3、发布两个工程,在JTest 工程中通过loginFromOtherSite.html也能访问原本只能通过JWebStudyJSP 的index.jsp登陆后的页面,即实现了从外部登录。

说明:

上面示例汇中,将JWebStudyJSP作为某个服务器上的网站,将JTest 作为用户自己利用可见的具体提交地址创建的网站,最后用户通过自己的网站登录了目标网站。


二、阻止从外部登录

阻止用户从自己的网站登录,可使用HTTP头的referer 属性,URL 类解决。具体如下:

对登录或表单提交后的处理页面(此处即testEncode.jsp),在页面中通过referer判断请求来源,有效阻止从外部登录。

关键代码:

<%//获取请求来源的服务器主机host名String referURL=request.getHeader("referer");URL urlOne=new URL(referURL);String refererHostName=urlOne.getHost();out.println("refererHostName:"+refererHostName);//获取当前页面的 路径,并通过路径获得本服务器host名String requestURL=request.getRequestURL().toString();URL urlTwo=new URL(requestURL);String thisHost=urlOne.getHost();out.println("requestHost:"+thisHost);//判断是否为从外部登录if(referHostName!=thisHost){//转向提示页面,显示不能从外部登录或提交表单request.sendRedirect("..");}else{//正常处理}%>


三、小知识点

1、可以用外部登录模拟第三方登录,首先需要先访问第三方网站,获得相应信息后再使用信息登录目标网站。

2、URL 类,位于java.net 包中。

3、referer 头说明:

This is the address of the previous web page from which a link to the currently requested page was followed. (The word “referrer” has been misspelled in the RFC as well as in most implementations to the point that it has become standard usage and is considered correct terminology)
4、单独编写的页面中的超链接无法访问网络上的资源,必须发布后在服务器中后,才能访问。要从外部登录网站或提交表单,前提是必须知道登陆后或提交后的具体url,及原来登录页面所需提交的参数。(可以找具体网站练练,看它们有没有进行登录判断!)









0 0