MYSQL 中 SQL注入攻击

本文介绍了SQL注入的概念及其工作原理,并通过实例展示了攻击者如何利用不安全的SQL拼接执行恶意查询。此外,还提供了一种解决方案——使用参数化查询来避免SQL注入的风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL注入攻击

     1. 概念:用户输入时,提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的

         SQL Injection,即SQL注入。

     2. 原因:sql通过拼接来完成,造成非法sql,因此服务器上的数据库运行非法的 SQL 语句。

     举例哈:

strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');" 

     用户输入:

userName = "1' OR '1'='1";   与    passWord = "1' OR '1'='1";
此时的sql会成为下面这样:

strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"

也就是实际上运行的SQL命令会变成下面这样的

strSQL = "SELECT * FROM users;"

   此时就无需验证就会执行最下面的sql。

   3. 解决方案之一:

    1). 使用参数化查询:Java 中的 PreparedStatement 是预先编译的 SQL 语句,可以传入适当参数并且多次执行。由于没有拼接的过程,因此可以防止 SQL 注入的发生。

PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE userid=? AND password=?");
stmt.setString(1, userid);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值