3_Jsp标签_简单标签_防盗链和转义标签的实现

一概念

1防盗链

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

2页面中的转义字符

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

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

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

2.1防盗链的实现

  1.tld约束

<tag>
    <name>referer</name>
    <tag-class>com.tag.RefererTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
            <name>site</name>
            <required>true</required>
    </attribute>
    <attribute>
            <name>page</name>
            <required>true</required>
    </attribute>
</tag>

  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约束

<tag>
     <name>htmlfilter</name>
    <tag-class>com.tag.HtmlFilterTag</tag-class>
    <body-content>scriptless</body-content>
    <!-- <body-content>tagdependent</body-content> -->
</tag>

  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("&lt;");
                    break;
                case ‘>‘:
                    result.append("&gt;");
                    break;
                case ‘&‘:
                    result.append("&amp;");
                    break;
                case ‘"‘:
                    result.append("&quot;");
                    break;
                default:
                    result.append(content[i]);
                }
            }
            return (result.toString());

        }

}

  3.页面引用

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://self-tag-with-hello" prefix="i" %>
<html>
  <head>
    <title>filter</title>
  </head>
  <body>
      <i:htmlfilter>
          <a href="${pageContext.request.contextPath}/referer.jsp">小呵呵</a>
            <body-content>scriptless</body-content>
      </i:htmlfilter>

  </body>
</html>

  4.结果展示

  5.body-content类型介绍

3_Jsp标签_简单标签_防盗链和转义标签的实现

时间: 2024-10-07 16:25:19

3_Jsp标签_简单标签_防盗链和转义标签的实现的相关文章

ASP.NET 实现简单的图片防盗链介绍

在此,网站图片防盗链的方法是,通过获取Http请求头中的 Referer 标头与本网站域名比较,来判断用户是否来自本站跳转过来的 . 创建一个全局处理程序,用来处理images目录下的图片的直接请求: using System; using System.Web; /// <summary> ///DaoLian 的摘要说明 /// </summary> public class DaoLian:IHttpHandler { public bool IsReusable { get

Nginx-accesskey权限模块使用——简单的m3u8防盗链

配置文件:http://www.cnblogs.com/tinywan/p/5983694.html 通过加密后的文件: 正确地址:curl -i http://访问的IP地址(这里是直播节点IP地址)/hls/S0000_8.m3u8?key=c7e2d8f498920f1a86e4c95d4a58a27e 参数错误地址:curl -i http://访问的IP地址(这里是直播节点IP地址)/hls/S0000_8.m3u8?key=c7e2d8f498920f1a86e4c95d4a58a2

24点游戏_简单界面_可直接运行

1 #include<Windows.h> 2 #include<iostream> 3 #include<cstdio> 4 #include<cstdlib> 5 #include<cstring> 6 #include<string> 7 #include<vector> 8 #include<ctime> 9 #include<cmath> 10 using namespace std; 1

解决问题1:可以从桌面显示到FORM MFC/HALCON混合编程系列一_打开图像_简单处理_

没法爱上新浪  转载:http://blog.sina.com.cn/s/blog_812e326f010110og.html 从图1到图2 图1(在桌面显示了) open_window(0,0, Width/2, Height/2,0,"visible","",&WindowHandle); 更改为: Hlong MainWndID =(Hlong) m_hWnd; open_window(0,0, Width/2, Height/2,MainWndID,

排序_简单排序_插入排序

插入排序有三个记录值,其中一个记录着取出来的一个值,也是需要插入的值,从第二个位置开始获取.另外两个初始位置是一样的,从第二个数值开始记录.这个的特点是每一次比较之前,当前假设的数组都是有序的. public class ArrayIns { private long a[]; private int nElems; public ArrayIns(int maxSize) { a=new long[maxSize]; nElems=0; } //插入 public void insert(lo

htaccess高级应用:防盗链阻止迅雷下载以及限制访问

导读: 合理利用htaccess文件,即使没有服务器的管理权限可以解决很多问题:比如用htaccess防盗链,阻止迅雷下载,限制用户访问指定类型的文件.判断User-agent阻止迅雷下载. Rewrite的功能很强大, 合理的利用htaccess文件的设置 即使没有服务器的管理权限可以解决很多问题: 1. 用htaccess限制只能访问某种类型文件控制 httpd.conf 配置文件中可以用 Order.Files 及 FilesMatch 命令来阻止用户查看某种类型的文件,但是当用户被拒绝时

标签案例-开发防盗链标签

1 package cn.itcast.web.tag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 import javax.servlet.jsp.JspException; 8 import javax.servlet.jsp.PageContext; 9 import

实现一个基本防盗链标签

1. 标签处理类 1 public class MyReferer extends BodyTagSupport { 2 private String site; 3 private String back; 4 public String getSite() { 5 return site; 6 } 7 public void setSite(String site) { 8 this.site = site; 9 } 10 public String getBack() { 11 retur

javaWeb 使用jsp标签进行防盗链

/** * 1.新建类继承SimpleTagSupport * 新建2个属性, 添加对应的set方法 * 覆盖doTag()方法 */ import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import javax.servlet.j