•SQL注入

SQL注入是通过操作输入来修改事先定义好的SQL语句,对用户输入的字符串进行过滤,转义,限制或处理不严谨,导致用户可以通过输入精心构造的字符串去非法获取到数据库中的数据,以达到执行代码对服务器进行攻击的方法。

现有一个数据库test中的表user,可以通过账号name,密码pass登录,查看id

登录代码

package JDBCtest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner; /*
* 用户登录
*/
public class Demo4 { public static void main(String[] args) throws Exception {
// 1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.创建连接
String url = "jdbc:mysql:///test";
String username = "root";
String password = "1234";
Connection connection = DriverManager.getConnection(url, username, password);
// 接收用户名密码
Scanner sc = new Scanner(System.in);
String name = sc.next();
String pass = sc.next();// 3.sql语句
String sql = "Select * from user where name='" + name + "' and pass ='" + pass + "'";
// System.out.println(sql);
// 4.获取sql对象statement
Statement statement = connection.createStatement();
// 5.执行sql语句
ResultSet rs = statement.executeQuery(sql);
// 6.登录
if (rs.next()) {
System.out.println("登录成功");
} else {
System.out.println("登录失败");
}
// 7.释放资源
statement.close();
connection.close();
}
}

通过表中账号密码登录成功

  

由于账号或密码错误登录失败

 

以上可以正确登录成功或失败

注意!

如果此时我这样输入 【lihua 'or'1'='1】,也成功登录了,但是数据库没根本没有这条数据

这是为什么呢?让我们从代码里找问题!

        String sql = "Select * from user where name='" + name + "' and pass ='" + pass + "'";

为了调用数据库,使用字符串拼接SQL语句

让我们打印一下输入 【lihua 'or'1'='1】的sql语句一探究竟

select语句中的where条件可以看做两组并列(注意and在前先执行,or后执行)

由于'1'='1'为TRUE,所以以上语句等价于Select * from user where true,肯定会登录成功!

同理输入【'or'1'='1'#  xxx】也能登陆成功

这是由于#在SQL中是注释符号,以上语句等价于Select * from user where name=''or'1'='1',于是就和上述情况一样了。


最新文章

  1. haploview出现"invalid affected status"的解决方法
  2. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Que
  3. SharePoint 2010 RBS 安装和配置遇到的一个问题
  4. Delphi 递归搜索.SVN文件夹并“处理”
  5. Json.Net学习.集合序列化.
  6. 2012 Asia JinHua Regional Contest
  7. JavaScript高级程序设计19.pdf
  8. java 基本类型和包装类的比较
  9. JSON支持什么对象/类型?
  10. spring+struts2+hibernate框架搭建(Maven工程)
  11. jdbc访问pipelinedb
  12. unity渲染路径
  13. JDBC+Servlet+JSP的学生案例增删改查
  14. js正则表达式中的
  15. 喵哈哈村的魔法考试 Round #11 (Div.2) 题解
  16. Spring与线程安全
  17. 文本统计器(Java)
  18. Android USB Host框架
  19. Asp.Net MVC Areas区域说明
  20. C#委托Code

热门文章

  1. 利用redis+AOP简单处理MQ冥等问题
  2. opencv笔记-GFTTDetector
  3. Dubbo源码剖析六之SPI扩展点的实现之Adaptive功能实现原理
  4. FreeHttp2.3升级说明
  5. (翻译) CAP 理论 FAQ
  6. Python面向对象之 - 继承
  7. 攻防世界MISC进阶之签到题
  8. HTTP攻击与防护-函数注入攻击
  9. Flash挂马实验
  10. RFC2889——拥塞控制测试