博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
web html 防盗链
阅读量:7249 次
发布时间:2019-06-29

本文共 4185 字,大约阅读时间需要 13 分钟。

一概念

1防盗链

  在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件,通过referer,网站可以检测目标网页访问的来源网页。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。

2页面中的转义字符

  在HTML中,定义转义字符串的原因有两个:第一个原因是像“<”和“>”这类符号已经用来表示HTML标签,因此就不能直接当作文本中的符号来使用。为了在HTML文档中使用这些符号,就需要定义它的转义字符串。

字符 转义字符
" &quot;
& &amp;
< &lt;
> &gt;
空格 &nbsp;

-------------------------------------------------------------------------------------------------------

2.1防盗链的实现

  1.tld约束

referer
com.tag.RefererTag
empty
site
true
page
true

   2.实现了简单Tag接口的自定义Tag处理类

package com.tag;import java.io.IOException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspException;import javax.servlet.jsp.PageContext;import javax.servlet.jsp.SkipPageException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class RefererTag extends SimpleTagSupport{    private String site;    private String page;    public void setSite(String site) {        this.site = site;    }    public void setPage(String page) {        this.page = page;    }    @Override    public void doTag() throws JspException, IOException {                PageContext context = (PageContext)this.getJspContext();        HttpServletRequest request = (HttpServletRequest)context.getRequest();        HttpServletResponse response = (HttpServletResponse)context.getResponse();        String referer = request.getHeader("referer");        String path = request.getContextPath();        if(referer==null||referer.startsWith(site)){            if(page.startsWith(path))                response.sendRedirect(page);            else if(page.startsWith("/"))                response.sendRedirect(path+page);            else                response.sendRedirect(path+"/"+page);        //    throw new SkipPageException(); 不执行       //    执行则是jsp片段invoke        }                } }

  3. 页面引用

------------index.jsp-------------------referer.jsp-----------

  4.结果页面跳转

-----------------------------------------------------------------------------------------------------------

2.2转义标签的实现

  1.tld约束

htmlfilter
com.tag.HtmlFilterTag
scriptless

  2.自定义Tag处理类(其中Filter方法来自)

apache_tomcat-6.0.39.webapps\examples\WEB-INF\classes.util包

package com.tag;import java.io.IOException;import java.io.StringWriter;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.SimpleTagSupport;public class HtmlFilterTag extends SimpleTagSupport{    @Override    public void doTag() throws JspException, IOException {        JspFragment jf = this.getJspBody();        StringWriter content = new StringWriter();        jf.invoke(content);                String _content = filter(content.getBuffer().toString());        this.getJspContext().getOut().write(_content);            }      public static String filter(String message) {            if (message == null)                return (null);            char content[] = new char[message.length()];            message.getChars(0, message.length(), content, 0);            StringBuffer result = new StringBuffer(content.length + 50);            for (int i = 0; i < content.length; i++) {                switch (content[i]) {                case '<':                    result.append("<");                    break;                case '>':                    result.append(">");                    break;                case '&':                    result.append("&");                    break;                case '"':                    result.append(""");                    break;                default:                    result.append(content[i]);                }            }            return (result.toString());        }    }

 

  3.页面引用

 
View Code

  4.结果展示

  5.body-content类型介绍

 http://www.cnblogs.com/foreverzd/p/3833252.html

转载于:https://www.cnblogs.com/pengkunfan/p/3833500.html

你可能感兴趣的文章
zabbix配置web监控实现网页监控
查看>>
Postgresql lock锁等待检查
查看>>
codeforces1141D题解(暴力+贪心)
查看>>
Java Spring Boot 2.0实战MyBatis连接池阿里Druid与SQL性能监控
查看>>
信用算力基于 RocketMQ 实现金融级数据服务的实践
查看>>
基于oauth 2.0 实现第三方开放平台
查看>>
kubernetes1.4 基础篇:Learn Kubernetes 1.4 by 6 steps(1):概要
查看>>
百万下载量的 Android 应用后台收集用户信息
查看>>
SQL Server 多表数据增量获取和发布 1
查看>>
C3P0连接池
查看>>
这 25 个开源机器学习项目,一般人我不告诉 Ta
查看>>
【WePY小程序框架实战四】-使用async&await异步请求数据
查看>>
iOS UIImageView(图片)
查看>>
可折叠显示的发光搜索表单
查看>>
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.2. 表和索引
查看>>
java使用正则表达式判断手机号,固定电话,身份证,邮箱,url,车牌号,日期,ip地址,mac,人名等...
查看>>
新手也能轻松掌握的分布式系统「事务」技巧
查看>>
iOS开发之使用Git的基本使用(一)
查看>>
配置云存储网关在线服务支持多个互联VPC-高速通道版
查看>>
6个步骤从头开始编写机器学习算法:感知器案例研究
查看>>