美文网首页
防止sql注入

防止sql注入

作者: 你若撒野_今生我把酒奉陪 | 来源:发表于2018-12-05 11:48 被阅读0次

什么是sql注入:

    原文地址:https://blog.csdn.net/u014590757/article/details/79637015


防止sql注入:

1,第一种采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可:

        String sql= "select * from users where username=? and password=?;

        PreparedStatement preState = conn.prepareStatement(sql);

        preState.setString(1, userName);

        preState.setString(2, password);

        ResultSet rs = preState.executeQuery();

        ...

    2,第二种是采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入

        public static String TransactSQLInjection(String str)

        {

              return str.replaceAll(".*([';]+|(--)+).*", " ");

        }

        userName=TransactSQLInjection(userName);

        password=TransactSQLInjection(password);

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

        Statement sta = conn.createStatement();

        ResultSet rs = sta.executeQuery(sql);

3,使用Hibernate框架的SQL注入防范Hibernate是目前使用最多的ORM框架,在JavaWeb开发中,很多时候不直接使用JDBC,而使用Hibernate来提高开发效率。在Hibernate中,仍然不应该通过拼接HQL的方式,而应使用参数化的方式来防范SQL注入。有两种方式, 一种仍然是使用JDBC一样的占位符“?”,但更好的方式是使用Hibernate的命名参数,例如检测用户名和密码是否正确,使用Hibernate可以写成:

    String queryStr = “from user where username=:username ”+”password=:password”;

    List result = session.createQuery(queryStr).setString("username",

            username).setString("password", password).list();

    4,字符串过滤

        比较通用的一个方法:(||之间的参数可以根据自己程序的需要添加)

        public static boolean sql_inj(String str){

            String inj_str = "'|and|exec|insert|select|delete|update|           

            count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";

            String inj_stra[] = split(inj_str,"|");

            for (int i=0 ; i < inj_stra.length ; i++ ){

            if (str.indexOf(inj_stra[i])>=0){

            return true;

            }           

        }         

            return false;         

    }

    5,JSP页面判断代码

        使用javascript在客户端进行不安全字符屏蔽

        功能介绍:检查是否含有”‘”,”\\”,”/”

        参数说明:要检查的字符串

        返回值:0:是1:不是

        函数名是

        function check(a){

            return 1;       

            fibdn = new Array (”‘” ,”\\”,”/”);       

            i=fibdn.length; 

            j=a.length;   

            for (ii=0; ii<i; ii++)

            { for (jj=0; jj<j; jj++)

            { temp1=a.charAt(jj);

            temp2=fibdn[ii];

            if (tem'; p1==temp2)

            { return 0; }

            }

           }

            return 1;

            }

    在编写MyBatis的映射语句时,尽量采用#{xxx}这样的格式。若不得不使用${xxx}这样的参数,要手工地做好过滤工作,来防止SQL注入攻击。

    #{}:相当于JDBC中的PreparedStatement

    ${}:是输出变量的值

    简单说,#{}是经过预编译的,是安全的;${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。

相关文章

  • idea搭建 mybatis框架

    {}方式能够很大程度防止sql注入,${}方式无法防止Sql注入。 SELECT deptno,dname,loc...

  • php面试题

    防止SQL注入简单回答:防止——利用即有的应用、功能,将(恶意)SQL命令发送到到后台数据库引擎。 防止SQL注入...

  • sql注入风险

    SQL注入攻防入门详解 如何从根本上防止 SQL 注入 教您使用参数化SQL语句 参数化查询为什么能够防止SQL注...

  • Mybatis如何防止SQL注入

    Mybatis如何防止SQL注入 什么是SQL注入 sql注入是一种代码注入技术,将恶意的sql插入到被执行的字段...

  • JDBC进阶 & BeanUtils组件简介

    预编译sql处理(防止sql注入) Statement : 执行SQL命令CallableStatement : ...

  • php面试题

    防止SQL注入 简单回答:防止——利用即有的应用、功能,将(恶意)SQL命令发送到到后台数据库引擎。 防止SQL注...

  • 防止sql注入

    1、php.ini配置中magic_quotes_gpc 将用户输入的单引号' 会自动转义成 ' 2、addsla...

  • 防止SQL注入

    防止SQL注入的方式: 1.开启配置文件中的magic_quotes_gpc和magic_quotes_runti...

  • 防止sql注入

    以php语言为例,概述编码过程中的sql注入过程,注入可能涉及 存储过程 、sql语句、关键字等方式,本篇只介绍s...

  • 防止sql注入

    什么是sql注入: 原文地址:https://blog.csdn.net/u014590757/article...

网友评论

      本文标题:防止sql注入

      本文链接:https://www.haomeiwen.com/subject/jzuicqtx.html