跨站请求伪造解决办法之——过滤referer

本文介绍了一种通过在web.xml中配置referer过滤器来防止非法请求的方法。该过滤器检查请求头中的referer信息,若referer为空或不包含当前服务器名称,则认为请求非法,并转向错误页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 当然,referer也是可以伪造的,Http请求本身就没有不能伪造的东西。

所以本方法只能在一定程度上防止非法请求,仅供参考。

 

项目的web.xml中增加过滤器:

    <filter>
        <filter-name>RefererFilter</filter-name>
        <filter-class>com.sdyy.common.filters.RefererFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>RefererFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>  

 

项目中增加RefererFilter类:

package com.sdyy.common.filters;

import java.io.IOException;  

import javax.servlet.Filter;  
import javax.servlet.FilterChain;  
import javax.servlet.FilterConfig;  
import javax.servlet.ServletException;  
import javax.servlet.ServletRequest;  
import javax.servlet.ServletResponse;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  

public class RefererFilter extends HttpServlet implements Filter {  

    private static final long serialVersionUID = 1L;  
    private FilterConfig filterConfig;  

    public void init(FilterConfig config) {  
        this.filterConfig = config;  
    }  

    public void doFilter(ServletRequest req, ServletResponse res,  
            FilterChain chain) throws ServletException, IOException {  

        HttpServletRequest request = (HttpServletRequest) req;  
        HttpServletResponse response = (HttpServletResponse) res;  
        // 链接来源地址  
        String referer = request.getHeader("referer");  
        if (referer == null || !referer.contains(request.getServerName())) {  
            /** 
             * 如果 链接地址来自其他网站,则返回错误页面 
             */  
            request.getRequestDispatcher("/WEB-INF/error.jsp").forward(request, response);  
        } else {   
            chain.doFilter(request, response);  
        }  
    }  

    public void destroy() {  
        this.filterConfig = null;  
    }  

} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值