`
how_it_works
  • 浏览: 5703 次
社区版块
存档分类
最新评论

SQL注入原理及预防

阅读更多

SQL注入原理及预防

 

说明 : 以下内容以mysql为例,其他RDBMS原理一样,但数据库原生函数及SQL语法可能有差异。

一、 注入原理

 我们以登录为例,用户登录时后台会执行SQL语句如下:

select * from auth_user where user_name = '${paramter1}' and password =  '${paramter2}'

 

这时如果我们前台传入到后台的参数是以下情况时:

 ${paramter1}=admin
 
 ${paramter2}=' or true  or '

 那么后台就会执行

 select * from auth_user where user_name='admin' password =' ' or true  or ' ' ;

 

原本不能查出记录(通过验证)的情况下,通过SQL的注入达到了黑客的目的。

以上为SQL注入原理,通过SQL注入可以达到,DB的安装目录、DB管理员密码查看等等目的,所以我们在写代码时要养成良好习惯。接下来我们来讲解SQL注入的防范及原理。

一 、防范原理

select * from auth_user where user_name = '${paramter1}' and password =  '${paramter2}'

 

 

承上SQL注入例子,如果我们对${paramter} 进行相关的验证就可以达到预防的作用。

以java为例:

 String stmtSQL = "select * from auth_user where user_name = ? and password =  ?";  
         getJdbcTemplate().execute(stmtSQL,new PreparedStatementCallback(){  
             public Object doInPreparedStatement(PreparedStatement ps)  throws SQLException  
             {  
                 //${paramter1}
                     ps.setString(1, "admin");
                 //${paramter2}  
                     ps.setString(2, " ' ' or true  or ' ' ");  
                     ps.execute();  
              //test code
                 return null;  
             }  
        });  
 

这段程序的原理是将SQL语句进行参数话

"insert into auth_user(username,password) values(?,?)"

 

将其中的"?"进行参数替换

  //${paramter1}
                     ps.setString(1, "admin");
                 //${paramter2}  
                     ps.setString(2, " ' ' or true  or ' ' ");  
                     ps.execute();  

 

替换的过程一定要注意将特殊的符号进行转义,如:

' = \'
" =\"

 

如上程序,最终执行的SQL为

select * from auth_user where password =' \' or true  or \' ' ;

 

结果与我们预期一样。

三、总结

SQL的注入是数据库的基本知识点,所以防范方法已有很多,但是原理其实很简单:

1  参数话SQL语句

2 参数检查,特殊字符进行处理(转义)

3
3
分享到:
评论

相关推荐

    SQL注入原理及程序开发预防

    SQL注入原理及程序开发预防,大家可以参考一下

    SQL注入攻击及其预防方法研究

    SQL注入攻击是黑客常用的网络攻击手段之一。文章分析了SQL注入攻击的原理和攻击步骤,针对性地提出了从程序编写和服务器设置两方面有效预防SQL注入攻击的方法。

    sql数据库的注入原理及防止入驻方案

    本文章详细介绍了sql注入的方法,原理以及预防的

    Web页面中SQL注入攻击的原理、过程以及预防对策.pdf

    Web页面中SQL注入攻击的原理、过程以及预防对策.pdf

    信息安全概论课程设计之Web入侵(SQL注入)

    改压缩包包含一个工程,使用VS2005打开,主要内容有SQL注入的原理,预防方法(2_3种)。可查看详细的源代码

    asp.net 预防SQL注入攻击之我见

    但是当知道了注入原理之后预防不就是很简单的事情了吗? 第一次听说SQL注入攻击的时候还是在2004年(好像得知的比较晚),那是还是在写asp呢。在一次写代码的时候,有同事问我,你的这段代码防注入攻击了吗?什么...

    Web安全深度剖析(张柄帅)

    5.1 SQL注入原理 64 5.2 注入漏洞分类 66 5.2.1 数字型注入 66 5.2.2 字符型注入 67 5.2.3 SQL注入分类 68 5.3 常见数据库注入 69 5.3.1 SQL Server 69 5.3.2 MySQL 75 5.3.3 Oracle 84 5.4 注入工具 89 5.4.1 ...

    Achilles

    能测试网站能否能防止SQL注入。 它的原理是使网站的javascript验证代码失效,比如使表单的验证代码失效,从而让不正确的表单绕过检查成功提交到服务器,使没有预防的服务器爆出致命错误。

    Java学习指南(8) MySQL数据库与JDBC框架

    * SQL的转义,数据库注入攻击的预防 * 数据库的动态访问:获取数据库和表的结构,根据表的结构自动生成POJO 三、课程体系 〖Java学习指南系列〗:包含入门与进阶语法,Swing桌面开发,安卓开发,JavaFX开发,网络...

Global site tag (gtag.js) - Google Analytics