`

【转】Java防止SQL注入

阅读更多
SQL 注入简介:
        SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法

用户钻了SQL的空子,下面我们先来看下什么是SQL注入:

        比如在一个登陆界面,要求用户输入用户名和密码:

        用户名:     ' or 1=1 --  

        密     码:  

        点登陆,如若没有做特殊处理,而只是一条带条件的查询语句如:

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

        那么这个非法用户就很得意的登陆进去了.(当然现在的有些语言的数据库API已经处理了这些问题)

        这是为什么呢?我们来看看这条语句,将用户输入的数据替换后得到这样一条语句:

        select * from users where username='' or 1=1 --' and password=''

        为了更明白些,可以将其复制到SQL分析器中,将会发现,这条语句会将数据库的数据全部读出来,为什么呢?




        很简单,看到条件后面 username='' or 1=1 用户名等于 '' 或 1=1 那么这个条件一定会成功,然后后面加两个-,这意味着

什么?没错,注释,它将后面的语句注释,让他们不起作用,这样就可以顺利的把数据库中的数据读取出来了。

        这还是比较温柔的,如果是执行
        select * from users where username='' ;DROP Database    (DB Name) --' and password=''

        .......其他的您可以自己想象。。。

那么我们怎么来处理这种情况呢?下面我以java为列给大家两种简单的方法:

        第一种采用预编译语句集,它内置了处理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();


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

public static String TransactSQLInjection(String str) {
             return str.replaceAll(".*([';]+|(--)+).*", " ");
          // 我认为 应该是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);


转载地址:http://my.oschina.net/liangtee/blog/82159

  • 大小: 6.2 KB
分享到:
评论

相关推荐

    Java防止SQL注入的几个途径

    Java防SQL注入,最简单的办法是杜绝SQL拼接,经验和技巧之谈,不错推荐。

    java防止SQL注入

    java防止SQL注入对一个系统十分的重要,系统没有安全保障,那再好的系统也是扯淡。在平时系统开发中一定注意安全漏洞。

    java防sql注入攻击过滤器

    java防sql注入攻击过滤器 filter

    防止sql注入解决方案

    防止sql注入引起的网络安全的解决措施采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可:

    防止sql注入demo

    java版防止sql注入的filter 如果好用,别忘记了来评论一下,受益于更多的人

    sql注入Java过滤器

    配置在web.xml中,可以防止SQL注入,可以自己定义一些需要过滤的特殊字符

    java防止sql注入.pdf

    java防止sql注入.pdf

    java过滤器防sql注入

    外网可能会被攻击,简单的处理可以避免! 外网可能会被攻击,简单的处理可以避免! 外网可能会被攻击,简单的处理可以避免! 外网可能会被攻击,简单的处理可以避免!...外网可能会被攻击,简单的处理可以避免!...

    防止sql注入的java代码

    该文档整理了防止sql注入的java代码,希望对你能有所帮助!

    jsp 防止sql注入的方法

    网站开发中最重要的就是安全问题,本资源是本人应用中总结出来的防止sql注入的方法

    JAVA中防止SQL注入攻击类的源代码

    JAVA中防止SQL注入攻击类的源代码(包含网页版和程序代码两部分)

    防止sql注入的url过滤器【java filter】

    防止sql注入的url过滤器,简单配置即可!

    java web Xss及sql注入过滤器.zip

    java web 过滤器防止Xss、sql注入,基于spring boot 2.0框架开发。

    java sql注入l

    -- 防止SQL注入的过滤器 --> 72 <filter> 73 <filter-name>antiSqlInjection</filter-name> 74 <filter-class>com.tarena.dingdang.filter.AntiSqlInjectionfilter</filter-class> 75 </filter> 76 ...

    SQL过滤,防止被注入,造成财产损失代码,java实现

    SQL过滤,防止被注入,造成财产损失代码,java实现。SQL过滤,防止被注入,造成财产损失代码,java实现。SQL过滤,防止被注入,造成财产损失代码,java实现。SQL过滤,防止被注入,造成财产损失代码,java实现。SQL...

    预加载防止sql注入

    使用preparement预加载防止sql注入

    如何防止SQL注入.pdf

    防止SQL注入主要依赖于以下几种方法: 1. 使用参数化查询(预编译语句) 参数化查询是防止SQL注入的最有效手段之一。通过使用预编译语句(例如,在Java中使用PreparedStatement),可以确保用户输入被当作参数处理...

    寻找sql注入的网站的方法(必看)

    方法一:利用google高级搜索,比如搜索url如.asp?... 您可能感兴趣的文章:Java面试题解析之判断以及防止SQL注入SQL注入原理与解决方法代码示例通过ibatis解决sql注入问题Win2003服务器防SQL注入神器–D盾_IIS防火墙

    java 过滤器filter防sql注入的实现代码

    下面小编就为大家带来一篇java 过滤器filter防sql注入的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics