利用http的referer头和Servlet隐藏JavaScript代码

1.       定义一个用于输出JavaScript代码 Servlet类。

package com.mycompany.response.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class HideJavaScript extends HttpServlet {

protected void service(HttpServletRequest request,

                    HttpServletResponse response) throws ServletException, IOException {

 

           response.setHeader("Pragma", "No-cache");

           response.setHeader("Cache-Control", "no-cache");

           response.setDateHeader("Expires", 0);

           response.setContentType("text/javascript;charset=UTF-8");

           PrintWriter out = response.getWriter();

           String referer = request.getHeader("referer");

           if(!(referer==null)&&!referer.equalsIgnoreCase("")&&referer.startsWith("http://localhost:8080/response/"))

           {

                    out.println("document.write('这些就是隐藏的JavaScript代码!')");

                    out.println("window.alert('执行了此代码!')");

           }

           else

           {

                    out.println("请勿盗链!");

           }

}

}

2.       解释

首先通过http头实现禁止缓存的功能。防止浏览器将代码缓存。

然后设置mime类型为text/javascript。通过判断referer向外输出JavaScript代码。

3.       在需要使用JavaScript的页面中:

jsp页面中:

<script type="text/javascript" src="<%=request.getContextPath() %>/hidejavascript">

</script>

html页面中:

<script type="text/javascript" src="/website1/hidejavascript">

</script>

4.       Jsp页面中的地址

4.1  FormAction的地址,JavaScriptsrc地址,linkcsshref的地址,response.sendRecirect(String path)方法都遵循如下规则:

           地址不以/开头代表相对与本页面设置的<base href=”基地址”>的地址,基地址默认为本页所在目录。地址以/开头代表相对于当前web站点根目录的地址,这里的web站点根目录指的是,例如:http://localhost:8080,而web应用的根目录是,例如:http://localhost:8080/website1。之所以这些地址都是相对于http://localhost:8080,因为这些地址是交给浏览器执行的。

比较保障的做法是,都使用/开头的路径。例如在a.jsp页面forwardb.jsp页面,如果b.jsp页面中的css文件使用的是相对路径,而a.jspb.jsp又不在一个目录,就会出错。因为浏览器是不知道被forwordb.jsp,还按照相对a.jsp的目录去查找资源。

4.2 RequestgetRequestDispatcher(String path)方法,这里的path如果是以/开头,代表web应用程序的根目录,如果不是,则表示相对目录。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值