加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

限制直接通过地址栏键入链接地址访问xml配置文件

发布时间:2020-12-16 06:00:51 所属栏目:百科 来源:网络整理
导读:前言 在实际的web项目中,有些配置项会放在xml文件里面,对于xml文件,我们其实并不希望访问者进行访问,毕竟xml文件里面可能配置了一些较为敏感的信息,比如内网IP、用户名及密码等。 对此,希望能够限制访问者直接在地址栏键入链接地址访问到xml文件。 方

前言

在实际的web项目中,有些配置项会放在xml文件里面,对于xml文件,我们其实并不希望访问者进行访问,毕竟xml文件里面可能配置了一些较为敏感的信息,比如内网IP、用户名及密码等。
对此,希望能够限制访问者直接在地址栏键入链接地址访问到xml文件。

方法

1、 判断请求方式(POST、GET)

在web项目内读取xml文件一般进行的是POST请求,而通过地址栏键入地址访问则为GET请求,依次来区分。

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException {
            HttpServletRequest httpreq = (HttpServletRequest) request;
            String method = httpreq.getMethod();
            if("GET".equals(method)) {
                httpres.sendRedirect(httpreq.getContextPath() + "/error.html");
                return;
            }
            chain.doFilter(request,response);
        }

当然,在web.xml里面也要相应的配置filter:

<filter>
            <filter-name>authVisitPage</filter-name>
            <filter-class>web.AuthVisitFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>authVisitPage</filter-name>
            <url-pattern>*.xml</url-pattern>
        </filter-mapping>

2、 利用document.referrer属性

referrer是与对网页的请求有关的document对象中的属性。referrer属性中保存着链接到当前页面的那个页面的URL,在没有来源页面的情况下,referrer属性中可能会包含空字符串。
该属性不可设置。

public void doFilter(ServletRequest request,ServletException {
            HttpServletRequest httpreq = (HttpServletRequest) request;
            String referer = httpreq.getHeader("Referer");
            if(referer == null) {
                httpres.sendRedirect(httpreq.getContextPath() + "/error.html");
                return;
            }
            chain.doFilter(request,response);
        }

这里只是判断referer是否为空,但忽略了一种情况:
假设已知xml的路径(如:http://域名/configs/*.xml),我们可以在本地新建一个web工程,里面增加一个跳转

<a href="http://域名/configs/*.xml">跳转</a>

如果还是用之前的过滤器,只是判断referer是否为空的话,是不能够过滤掉这种跳转过来的访问请求。对此,过滤器需要增加判断:禁止非内部访问

public void doFilter(ServletRequest request,ServletException {
            HttpServletRequest httpreq = (HttpServletRequest) request;
            String referer = httpreq.getHeader("Referer");
            String host = httpreq.getHeader("Host");
            if(referer == null || referer.indexOf(host) < 0) {
                httpres.sendRedirect(httpreq.getContextPath() + "/error.html");
                return;
            }
            chain.doFilter(request,response);
        }

总结

  • 对于第一种方法,应该也存在跳转访问这个bug,同时这种方法就要求内部所有对xml的访问都应确保为POST方式。这样一对比的话,感觉第二种方法可能会更好。

  • 对这个需求如果进行扩展的话,可以限制不想被访问者直接访问的所有文件类型。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读