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

简介: SQL注入是由于程序员对用户输入的参数没有做好校验,让不法分子钻了SQL的空子,
+关注继续查看

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注入的能力。

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);


采用拦截器对用户输入的参数进行转义校验。以下已spring mvc 为例。

首先我们需要在web.xml 中配置拦截器:

<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>


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

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() {  
    }
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);  
    }
相关文章
|
3月前
|
SQL JavaScript 安全
【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)
【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)
104 0
|
5月前
|
SQL JSON 安全
Spring Boot 如何防护 XSS + SQL 注入攻击 ?终于懂了!
Spring Boot 如何防护 XSS + SQL 注入攻击 ?终于懂了!
|
5月前
|
SQL 存储 JSON
Spring Boot 如果防护 XSS + SQL 注入攻击 ?一文带你搞定!
Spring Boot 如果防护 XSS + SQL 注入攻击 ?一文带你搞定!
321 0
|
7月前
|
存储 JavaScript 前端开发
XSS注入
XSS注入
122 0
XSS注入
|
7月前
|
JavaScript
js基础笔记学习235解决xss注入攻击
js基础笔记学习235解决xss注入攻击
50 0
js基础笔记学习235解决xss注入攻击
|
7月前
|
SQL 应用服务中间件 nginx
nginx禁止外网访问登录页面,SQL 注入、XSS 攻击配置
nginx禁止外网访问登录页面,SQL 注入、XSS 攻击配置
392 0
|
10月前
|
SQL Java 开发工具
七、在拦截器中进行XSS与SQL注入拦截
在拦截器中进行XSS与SQL注入拦截
259 0
七、在拦截器中进行XSS与SQL注入拦截
|
SQL 域名解析 网络协议
|
Web App开发 安全 搜索推荐
怎样利用XSS漏洞在其它网站注入链接?
怎样利用XSS漏洞在其它网站注入链接?
394 0
怎样利用XSS漏洞在其它网站注入链接?
|
SQL JavaScript 安全
详解程序员常用的3大Web安全漏洞防御解决方案:XSS、CSRF及SQL注入
随着互联网的普及,网络安全变得越来越重要,程序员需要掌握最基本的web安全防范,在项目研发过程中才能防患于未然,下面列举一些常见的安全漏洞和对应的防御措施。
2885 0
相关产品
云迁移中心
推荐文章
更多