利用http的referer头和Servlet隐藏JavaScript代码
2010-05-13 13:17
246 查看
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 Form的Action的地址,JavaScript的src地址,link的css的href的地址,response.sendRecirect(String path)方法都遵循如下规则:
地址不以/开头代表相对与本页面设置的<base href=”基地址”>的地址,基地址默认为本页所在目录。地址以/开头代表相对于当前web站点根目录的地址,这里的web站点根目录指的是,例如:http://localhost:8080,而web应用的根目录是,例如:http://localhost:8080/website1。之所以这些地址都是相对于http://localhost:8080,因为这些地址是交给浏览器执行的。
比较保障的做法是,都使用/开头的路径。例如在a.jsp页面forward到b.jsp页面,如果b.jsp页面中的css文件使用的是相对路径,而a.jsp和b.jsp又不在一个目录,就会出错。因为浏览器是不知道被forword到b.jsp,还按照相对a.jsp的目录去查找资源。
4.2 Request的getRequestDispatcher(String path)方法,这里的path如果是以/开头,代表web应用程序的根目录,如果不是,则表示相对目录。
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 Form的Action的地址,JavaScript的src地址,link的css的href的地址,response.sendRecirect(String path)方法都遵循如下规则:
地址不以/开头代表相对与本页面设置的<base href=”基地址”>的地址,基地址默认为本页所在目录。地址以/开头代表相对于当前web站点根目录的地址,这里的web站点根目录指的是,例如:http://localhost:8080,而web应用的根目录是,例如:http://localhost:8080/website1。之所以这些地址都是相对于http://localhost:8080,因为这些地址是交给浏览器执行的。
比较保障的做法是,都使用/开头的路径。例如在a.jsp页面forward到b.jsp页面,如果b.jsp页面中的css文件使用的是相对路径,而a.jsp和b.jsp又不在一个目录,就会出错。因为浏览器是不知道被forword到b.jsp,还按照相对a.jsp的目录去查找资源。
4.2 Request的getRequestDispatcher(String path)方法,这里的path如果是以/开头,代表web应用程序的根目录,如果不是,则表示相对目录。
相关文章推荐
- javascript利用初始化数据装配模版的实现代码
- AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求
- 利用函数的惰性载入提高 javascript 代码性能
- 利用WScript.Shell对象隐藏cmd命令行运行框的实现代码
- 利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
- AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求[原创]
- 利用httpclient和多线程刷访问量代码
- 利用javascript解决图片缩放及其优化的代码
- Ajax 利用XMLHttpRequest、jquery几种实现[代码片段]
- javaScript 隐藏与显示的代码
- javascript 层隐藏和显示的代码
- javascript下利用for( in )语句 获得所有事件名称的代码
- 利用HttpServletResponseWrapper操作Response对象
- 利用JavaScript实现天气菜单栏在网页边角处展现和隐藏的效果
- JavaScript下利用fso判断文件是否存在的代码
- JavaScript下利用fso判断文件是否存在的代码
- JavaScript里实现显示和隐藏的代码