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>
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb中,实现网站用户登录功能通常涉及到以下几个关键步骤: 1. **前端页面设计**:创建登录界面,包括用户名输入框(username)、密码输入框(password),以及登录按钮。可以使用HTML、CSS和JavaScript进行前端开发。 2. **后端服务器处理**:后端使用Java和Servlet或Spring MVC框架接收用户的登录请求。通常会涉及以下步骤: - 用户名和密码的验证:检查输入的用户名和密码是否匹配数据库中的记录。你可以使用JDBC连接数据库查询用户信息,也可以使用ORM框架如Hibernate或MyBatis。 - 使用Session或Cookie管理用户状态:如果验证通过,为用户创建一个Session,存储用户标识(通常是登录凭据的哈希值)或其他重要信息,这样后续请求可以识别用户。 3. **安全性考虑**:确保密码安全,一般会采用哈希+盐的方式加密存储,登录时对比哈希值。同时,防止SQL注入和XSS攻击。 4. **错误处理和反馈**:对输入错误或验证失败的情况,返回合适的错误消息给前端,并可能显示错误提示。 5. **登录/登出功能**:除了登录,还需要提供登出功能,清除Session或Cookie,结束用户会话。 6. **登录日志记录**:为了审计和安全,应该记录用户的登录尝试和结果。 相关问题: 1. 如何在JavaWeb中防止跨站脚本攻击(XSS)? 2. 什么是Session和Cookie的区别,它们在用户登录中的作用是什么? 3. 如何在Java中使用Spring Security来增强登录系统的安全性?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值