zoukankan      html  css  js  c++  java
  • javaWeb安全篇(1)——防盗链技术的实现

    原理描述:
    检测请求头中的Referer属性,如果请求头中Referer属性是以http://www.163.com 开头的,则说明是从合法网站链接过来的请求,如果不是(比如是以非法网站http://www.361.com)开头的,则跳转到合法网站的主页.
    盗链行为与防盗链技术的实现原理示意图

    演示盗链行为之前的准备工作:
    1. 创建一个虚拟主机,用于模拟非法盗链网站
    在磁盘路径e:下创建一个ROOT文件夹,在该文件夹下创建默认主页index.html
    内容如下

    <h1>易网</h1><hr/>
    广告
    <a href="http://localhost/Day07/exec/fengjie.jsp">凤姐独家新闻</a>
    广告

    注:为了模拟dns域名解析,需要在windows/sysem32/drivers/etc/hosts 文件中修改非法网站的域名解析地址为本地127.0.0.1 还需要在tomcat服务器的 tomcat*/conf/server.xml 文件中配置一个虚拟主机 <Engine>标签中添加 <Host name="www.361.com" appBase="e:/361"/>即可完成配置

    1. 创建一个合法的jsp应用fengjie.jsp,用于模拟合法防盗链网站
    <body>
        <%
            String ref = request.getHeader("Referer");//获取请求头中Referer字段中的内容
            if(ref ==null || "".equals(ref) || !ref.startsWith("http://localhost")){//如果Referer字段不是以http://localhost开头,则证明是非法的
                response.sendRedirect(request.getContextPath()+"/index.jsp"); //否则重定向到合法主页并返回,不显示余下的内容
                return;
            }
         %>
        凤姐回忆录:我的奋斗史------
      </body>

    演示现象:

    1.在地址栏键入www.361.com登录非法网站点击查看独家新闻,看到其链接是盗用的合法网站的内容
    1.从361进盗看独家新闻

    通过非法网站的链接点进去之后可以直接查看到合法网站的新闻
    2.点击链接后直接看到了新闻,可耻的盗链行为得逞

    2,为了杜绝这种可耻的盗链现象,我们在合法web应用中加入防盗链功能

    看到改进后的现象为:即使点了该非法网站的盗链接,也能重定向到合法网站的主页index.jsp
    这里写图片描述
    这里写图片描述
    这里写图片描述

    **

    使用自定义标签进行改进:

    **
    原来的jsp文件中嵌套了java代码,现在可以直接使用 <exec:ref/>代替,简化页面布局,使繁琐的java代码从jsp页面中消失。。。

    做法如下:
    1.创建web应用中创建RefTag类,并继承SimpleTagSupport类,覆盖父类的doTag()方法

    public void doTag() throws JspException, IOException {
            //和在servlet中的代码不同,该类没有包含request对象,需要先获取request对象
            PageContext pc = (PageContext) getJspContext();//不能通过JspContext直接获取request对象,需要先获取PageContext
            HttpServletRequest request = (HttpServletRequest) pc.getRequest();
            HttpServletResponse response = (HttpServletResponse) pc.getResponse();
    
            String ref = request.getHeader("Referer");
            if(ref ==null || "".equals(ref) || !ref.startsWith("http://localhost")){
                response.sendRedirect(request.getContextPath()+"/index.jsp");
                return;
            }
    }

    2.在exec.tld文件中描述该自定义标签的属性

    <tag>
            <name>ref</name>
            <tag-class>com.itheima.exec.RefTag</tag-class>
            <body-content>empty</body-content>
     </tag>

    3.在新闻页面的jsp文档fengjie.jsp中引用该自定义标签

    <body>
        <exec:ref/>
        凤姐回忆录:我的奋斗史------
    </body>
  • 相关阅读:
    MATLAB 之 App designer 小白学习(四)
    MATLAB 之 APP DESIGNER 学习(三)
    MATLAB 之 App designer 小白学习(二)
    MATLAB 之 App designer 小白学习(一)
    激光烧蚀 @有机聚合物
    激光驱动巨量转移工艺
    基于神经网络的函数逼近
    单片机复位电路仿真分析
    基于Python的3R机器人运动仿真
    基于MATLAB的单级倒立摆仿真
  • 原文地址:https://www.cnblogs.com/shiguangmanbu2016/p/5932923.html
Copyright © 2011-2022 走看看