SQL 注入

来源:互联网 发布:跟淘宝联盟类似的网站 编辑:程序博客网 时间:2024/06/06 18:40

  • 问题描述
  • 问题解决
    • MySQL 中的

问题描述

在使用 PreparedStatement 之后可以解决 SQL 注入的问题, 但是其实如果字符串是 \' OR 1 = 1 OR \'' OR 1 = 1 OR ' , setString 之后的结果还是相同的, 那么这是真正的解决吗? MySQL 中的「\」也是转义的意思吗?

问题解决

MySQL 中的「\」

Java 测试代码

@Testpublic void testLoginPreparedStat() throws Exception {    //原本的用户名和密码    String username = "DJ";    String password = "admin";    //如果使用SQL注入    username = "' OR 1 = 1 OR '";    password = "1";    //创建连接进行查询    Connection connection = JdbcUtil.getConnection();    String sql = "SELECT * FROM t_login_day06 WHERE username = ? AND password  ?";    PreparedStatement pst = connection.prepareStatement(sql);    pst.setString(1, username);    pst.setString(2, password);    System.out.println(pst);    ResultSet resultSet = pst.executeQuery();    if (resultSet.next()) {        System.out.println("恭喜登陆成功");    } else {        System.out.println("登陆失败");    }}

数据库内容

+----+-----------------+----------+| id | username        | password |+----+-----------------+----------+|  1 | DJ              | admin    ||  2 | ' OR 1 = 1 OR ' | 1        |+----+-----------------+----------+

代码执行输出

com.mysql.jdbc.JDBC4PreparedStatement@63d4e2ba: SELECT * FROM t_login_day06 WHERE username = '\' OR 1 = 1 OR \'' AND password = '1'恭喜登陆成功

根据输出结果可以得知「\」应该是转义的意思, 因为 SQL 语句中的 \' OR 1 = 1 OR \' 等价于数据库中的 ' OR 1 = 1 OR '

0 0
原创粉丝点击