如何解决java.sql.Statement无法处理特殊字符以及容易被黑问题

原创 2017年07月30日 14:22:04

知识点:展示java.sql.Statement 有两个缺陷,解决方法

第一个:展示Statement的缺陷1(测试数据:1003 换行 a’s) –即若用户输入sql中的特殊字符则程序会挂)

public void dem04() throws Exception{
        Connection con = ConnUtils.getConnection();
        Statement st = con.createStatement();
        // 假设书名含有特殊符号 '  Statement将无法处理~ 
        String name = "a's";
        String sql_insert = "insert into book(name,price,birth) values('"+name+"','105.3','1883-5-6 13:11:11');";
        System.out.println(sql_insert);
        int n = st.executeUpdate(sql_insert);
        con.close();
    }

结果失败 含有特殊符号的书名添加失败~
这里写图片描述
我们输入的SQL语句
这里写图片描述

第二个:展示Statement的缺陷2(测试数据:aa’ or ‘1’=’1) –即若用户输入sql中的特殊字符则程序会黑进)

public void dem05() throws Exception{
        Connection con = ConnUtils.getConnection();
        Statement st = con.createStatement();
        // 假设书名含有特殊符号 '  Statement将无法处理~ 
        String name = "aa' or '1'='1";
        String sql = "select count(*) from stud where sname='"+name+"'";
        System.out.println("实际的SQL语句:"+sql);
        ResultSet rs = st.executeQuery(sql);
        rs.next();
        int a = rs.getInt(1);
        if(a==0){
            System.out.println("登陆失败!!");
        }else{
            System.out.println("登录成功!!");
        }
        con.close();
    }

结果 数据库不存在的用户登录进去了。
这里写图片描述

如何解决? 用java.sql.PreparedStatement;
使用方法如下

// 当用户数入的参数时,一定要通过预处理(PreparedStatement)防黑和防止特殊字符
    @Test
    public void demo6() throws Exception{
        Connection con = ConnUtils.getConnection();
//      String sql_insert = "insert into book(name,price,birth) values('"+name+"','105.3','1883-5-6 13:11:11');";
        String sql = "insert into book(name,price,birth) values(?,?,?);";
        PreparedStatement pst = con.prepareStatement(sql);
        //含有特殊字符的书名
        String name = "a's";
        String price = "37.5";
        String birth = "1783-5-6 13:31:11";
        //设置三个? (参数)
        pst.setString(1, name);
        pst.setString(2, price);
        pst.setString(3, birth);
        // 执行的时候不需要再给参数。
        pst.execute();
        con.close();
    }

数据库内部添加特殊字符书名成功
这里写图片描述

防黑缺陷解决

@Test //同时展示Statement的缺陷2(测试数据:aa' or '1'='1) --即若用户输入sql中的特殊字符则程序会黑进)
    public void demo7() throws Exception{
        Connection con = ConnUtils.getConnection();
        String sql = "select count(*) from stud where sname=?";
//      Statement st = con.createStatement();
        PreparedStatement pst = con.prepareStatement(sql);
        // 假设书名含有特殊符号 '  Statement将无法处理~ 
        String name = "aa' or '1'='1";
        pst.setString(1, name);
        //执行时不要再给参数了,否则就调用调用 statement的方法了
        ResultSet rs = pst.executeQuery();
        rs.next();
        int a = rs.getInt(1);
        if(a==0){
            System.out.println("登陆失败!!");
        }else{
            System.out.println("登录成功!!");
        }
        con.close();
    }

这里写图片描述

版权声明:本文为博主原创文章,大家一起学习进步。

php对特殊字符的处理操作的总结

php有一些自带的很好的可以对一些特殊的字符进行转义。 magic_quotes_gpc是php.ini里的一个配置项,如果开启ON,它主要是对所有的 GET、POST 和 COOKIE 数据自动运...
  • u012979009
  • u012979009
  • 2015年09月01日 14:41
  • 4931

JSON特殊字符的处理

JSon 数据中的String 传递数据时,需要处理好特殊字符. JSon数据中有特殊字符: 1:引号 ,如果是使用单引号,来括值的话,那String 中  '  单引号为特殊字符 2:正斜...
  • zuoan2008
  • zuoan2008
  • 2015年07月20日 14:07
  • 3538

C#: json字符串中的特殊字符处理

#region 实现js eval功能, 如:200+200+200-200+210 * 210 public static decimal EvalExpression(string...
  • encienqi
  • encienqi
  • 2015年02月28日 22:03
  • 1972

C#特殊字符处理

private static Regex RegNumber = new Regex("^[0-9]+$"); private static Regex RegNumberSign = new R...
  • make1828
  • make1828
  • 2014年11月04日 17:26
  • 6118

对于请求的URL中有特殊字符的处理

在报表系统开发中,我没有使用Form作为提交参数给报表系统的方式,采用的是URL直接传递的方式传递参数给JSP,原因是 1、报表宿主的页面中可能不止一个Form,如果用户不慎重使用document....
  • DR_LF
  • DR_LF
  • 2015年04月11日 22:46
  • 2111

SQL关于特殊字符处理

1、sql特殊字符带来的问题 在sql语句中,有些特殊字符,是sql保留的。比如 ' [ ]  等。我们可以先看看它们的用法。 当需要查询某数据时,加入条件语句,或着当你需要insert记录时...
  • qq_23833037
  • qq_23833037
  • 2016年11月12日 00:35
  • 2218

关于varchar与nvarchar的“N”,特殊字符没法存储怎么办

如果你每次建数据表的时候固执的使用varchar,那么你可能会遇到以下的问题:   现在saleUserName的字段类型为varchar(50) update TableName set saleU...
  • hougelou
  • hougelou
  • 2017年04月24日 18:43
  • 321

lua中过滤表情以及特殊字符

今天开发时发现,备注输入框中可以输入表情符号,然而再次展示时,却成了问号?或者直接在请求接口的时候显示数据格式不正确! 首先,这个肯定是不行的,你如果让用户输入了,并且保存成功后,但是显示的却是?,这...
  • allenjay11
  • allenjay11
  • 2016年11月17日 22:32
  • 2884

XML中特殊字符的处理方式

项目中需要解析XML,发现前台
  • u011262156
  • u011262156
  • 2014年11月24日 13:42
  • 2546

在extjs的textfield中输入带有特殊字符的字符串,比如/opt/apache-storm-0.9.4/bin/storm ui &但是&符号却无法传递到后台

在ext中 {                                                                    xtype:'textfield',   ...
  • u010989078
  • u010989078
  • 2015年09月01日 08:45
  • 1041
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何解决java.sql.Statement无法处理特殊字符以及容易被黑问题
举报原因:
原因补充:

(最多只允许输入30个字)