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