xss、sql注入及csrf防御

本文简要介绍了xss、sql注入和csrf三种常见的前端安全问题及其防御措施。xss攻击可通过输入过滤防御,sql注入需对恶意SQL命令进行特殊字符过滤。对于csrf,仅做referer检测不足以防止漏洞,应结合token校验。文中提到了创建过滤器进行请求白名单管理、特殊字符转义,以及如何在web.xml中配置拦截器,以实现请求检测和安全防护。
摘要由CSDN通过智能技术生成

简单总结一下:

xss:跨站脚本攻击,通过前端input将js脚本注入到后台

sql注入:将恶意的sql命令注入到后台数据库引擎执行

csrf:跨站请求伪造,以用户身份在攻击页面对目标网站发起伪造用户操作的请求

其中xss和sql注入可以通过拦截请求并进行特殊字符过滤来防御,而csrf需要进行referer检测和token校验进行防御,如果只做了referer检测,在实际的第三方机构检测中,csrf漏洞还是存在的,所以需要进行token校验,token校验在这里不做过多说明,只进行referer检测。

首先创建一个过滤器:

package com.net.web.filter;

import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Iterator;

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

import com.net.pva.sysconfig.AppConfig;
import com.net.web.common.UserTools;
import com.net.web.utils.XssFilterHttpServletRequestWrapper;



/**  
 * @Title XssAndSqlFilter.java
 * @Description 防XSS、sql注入和CSRF漏洞   filter
 * @author 2Dark
 */
public class XssAndSqlFilter  implements Filter {  
	
	//获取请求url白名单
	public static final String CSRF_WHITE_URL = AppConfig.get("csrf.white.url");
	//获取sql注入拦截接口白名单(这些接口传递敏感参数时不会进行拦截,直接放行)
	public static final String SQL_WHITE_API = AppConfig.get("sql.white.api");
	protected FilterConfig filterConfig = null;
	protected boolean ignore = true; 

    @Override  
    public void destroy() {  
        // TODO Auto-generated method stub  

    }  

    @Override  
    public void init(FilterConfig arg0) throws ServletException {  
        // TODO Auto-generated method stub 
    	this.filterConfig = arg0; 
    	//this.inj_str = filterConfig.getInitParameter("keywords");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            javax.servlet.FilterChain chain) throws IOException,
            ServletException {
    	
    	HttpServletRequest req = (HttpServletRequest)request;  
    	HttpServletResponse res = (HttpServletResponse)response;
    	
    	//请求头检测
        Enumeration<String> enumParams = req.getHeaderNames();
        while (enumParams.hasMoreElements()) {
            String headName = enumParams.nextElement();
            headName = headName.toLowerCase();
            String headValue = req.getHeader(headName);
			headValue = headValue.toLowerCase();
			
			if (headName.equals("referer")) {
                if (isCSRFAttack(headValue)) {
                    return;
                }
            }
        }
    
//    	//
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值