00309_SQL注入问题
Posted Lamfai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了00309_SQL注入问题相关的知识,希望对你有一定的参考价值。
1、注入问题
(1)假设有登录案例SQL语句如下:
SELECT * FROM 用户表 WHERE NAME = 用户输入的用户名 AND PASSWORD = 用户输的密码;
(2)此时,当用户输入正确的账号与密码后,查询到了信息则让用户登录;
(3)但是当用户输入的账号为XXX 密码为:XXX\' OR ‘a’=’a时,则真正执行的代码变为:
SELECT * FROM 用户表 WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’ OR ’a’=’a’;
(4)此时,上述查询语句时永远可以查询出结果的。那么用户就直接登录成功了,显然我们不希望看到这样的结果,这便是SQL注入问题。
2、案例演示
(1)创建表
CREATE TABLE users( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(100), PASSWORD VARCHAR(100) );
(2)插入数据
INSERT INTO users (username,PASSWORD) VALUES (\'a\',\'1\'),(\'b\',\'2\');
(3)查询表数据
SELECT * FROM users;
(4)登录查询
①正常查询
SELECT * FROM users WHERE username=\'a\' AND PASSWORD=\'1\'
②账号随意写,1=1为true
SELECT * FROM users WHERE username=\'dsfsdfd\' AND PASSWORD=\'wrethiyu\' OR 1=1
(5)代码演示
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.Statement; 5 import java.util.Scanner; 6 7 public class JDBCDemo2 { 8 public static void main(String[] args) throws Exception { 9 Class.forName("com.mysql.jdbc.Driver"); 10 String url = "jdbc:mysql://localhost:3306/mybase"; 11 String username = "root"; 12 String password = "root"; 13 Connection con = DriverManager.getConnection(url, username, password); 14 Statement stat = con.createStatement(); 15 16 Scanner sc = new Scanner(System.in); 17 String user = sc.nextLine(); 18 String pass = sc.nextLine(); 19 20 // 执行SQL语句,数据表,查询用户名和密码,如果存在,登录成功,不存在登录失败 21 // String sql = 22 // "SELECT * FROM users WHERE username=\'dsfsdfd\' AND PASSWORD=\'wrethiyu\' OR 1=1"; 23 String sql = "SELECT * FROM users WHERE username=\'" + user 24 + "\' AND PASSWORD=\'" + pass + "\'"; 25 System.out.println(sql); 26 ResultSet rs = stat.executeQuery(sql); 27 while (rs.next()) { 28 System.out.println(rs.getString("username") + " " 29 + rs.getString("password")); 30 } 31 32 rs.close(); 33 stat.close(); 34 con.close(); 35 } 36 }
运行结果:
以上是关于00309_SQL注入问题的主要内容,如果未能解决你的问题,请参考以下文章
安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段