前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何预防SQL注入,XSS漏洞(spring,java)

如何预防SQL注入,XSS漏洞(spring,java)

作者头像
Java架构师必看
发布2021-12-14 13:38:13
7420
发布2021-12-14 13:38:13
举报
文章被收录于专栏:Java架构师必看

如何预防SQL注入,XSS漏洞(spring,java)

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说如何预防SQL注入,XSS漏洞(spring,java),希望能够帮助大家进步!!!

SQL注入简介

SQL注入是由于程序员对用户输入的参数没有做好校验,让不法分子钻了SQL的空子,

比如:我们一个登录界面,要求用户输入用户名和密码:

用户名: ’ or 1=1–

密码:

点击登录之后,如果后台只有一条简单的待条件的sql语句,没有做特殊处理的话:

如:

String sql="select * from users where username='"+userName+"' and password='"+password+"' "

这样拼接的结果是

String sql="select * from users where username='’or 1=1--' and password='' "

这条语句会将数据库中的数据全部读出来。

很显然由于username=’’or 1=1中用户名等于” 或1=1这个条件恒成立,然后后面加上了–,然后后面的语句不起作用。所以就把数据库中的数据全部读取出来了。

如果:执行

select * from users where username='' ;DROP Database (DB Name) --' and password=''

则会产生很严重的后果。

怎样预防SQL注入

预防SQL注入主要有三个方式 :

1.采用预编译语句集(PreparedStatement),其内置处理sql注入的能力。

代码语言:javascript
复制
String hql=”from User user where user.username=:username ” and
user.password=:password ; 
Query query=session.createQuery(hql); 
query.setParameter(“username”,name,Hibernate.STRING)
query.setParameter("password",password,Hibernate.STRING); 
  1. 采用拦截器对用户输入的参数进行转义校验。以下已spring mvc 为例。 首先我们需要在web.xml 中配置拦截器:
代码语言:javascript
复制
<filter>
        <description>XSS过滤</description>
        <filter-name>XssEscape</filter-name>
        <filter-class>com.jay.controller.XssFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>XssEscape</filter-name>
        <url-pattern>*.html</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

接着我们来看一下拦截器的代码

代码语言:javascript
复制
public class XssFilter implements Filter{ 
   
    @Override  
    public void init(FilterConfig filterConfig) throws ServletException {  
    }  

    @Override  
    public void doFilter(ServletRequest request, ServletResponse response,  
            FilterChain chain) throws IOException, ServletException {  
        chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);  
    }  

    @Override  
    public void destroy() {  
    }  
代码语言:javascript
复制
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { 
     

    public XssHttpServletRequestWrapper(HttpServletRequest request) {  
        super(request);  
    }  

    @Override  
    public String getHeader(String name) {  
        return StringEscapeUtils.escapeHtml4(super.getHeader(name));  
    }  

    @Override  
    public String getQueryString() {  
        return StringEscapeUtils.escapeHtml4(super.getQueryString());  
    }  

    @Override  
    public String getParameter(String name) {  
        return StringEscapeUtils.escapeHtml4(super.getParameter(name));  
    }  

    @Override  
    public String[] getParameterValues(String name) {  
        String[] values = super.getParameterValues(name);  
        if(values != null) {  
            int length = values.length;  
            String[] escapseValues = new String[length];  
            for(int i = 0; i < length; i++){  
                escapseValues[i] = StringEscapeUtils.escapeHtml4(values[i]);  
            }  
            return escapseValues;  
        }  
        return super.getParameterValues(name);  
    }  
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL注入简介
  • 怎样预防SQL注入
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档