SQL 注入

问题描述

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

问题解决

MySQL 中的「\」

Java 测试代码

@Test
public 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 '

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值