转!! PreparedStatement是如何防止SQL注入的
2024-08-28 11:05:18
SQL注入最简单也是最常见的例子就是用户登陆这一模块,如果用户对SQL有一定的了解,同时系统并没有做防止SQL注入处理,用户可以在输入的时候加上’两个冒号作为特殊字符,这样的话会让计算机认为他输入的是SQL语句的关键字从而改变你的SQL语句,造成不可估量的损失。
在JDBC中通常会使用PreparedStatement来代替Statement来处理sql语句,如
String sql = "select * from t_user where password = ?";
pt = conn.prepareStatement(sql);
pt.setString(1, num);
rs = pt.executeQuery();
使用PreparedStatement的好处是数据库会对sql语句进行预编译,下次执行相同的sql语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率,如果sql语句只执行一次,以后不再复用。
SQL注入 攻 击 只 对 Statement有效, 对 PreparedStatement 是无效的;
PreparedStatement可以在传入sql后,执行语句前,给参数赋值,避免了因普通的拼接sql字符串语句所带来的安全问题,而且准备sql和执行sql是在两个语句里面完成的,也提高了语句执行的效率 比如单引号会给你加一个转义,加个斜杠。上面的sql语句在数据库里执行就是这样
select * from t_user where password='ddd\' or \'1\'=\'1';
它会把恶意的注入语句预处理为参数
最新文章
- sublime text 3 配置php开发环境
- 网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
- okhttp封装
- node c#
- Java Web 高性能开发,第 3 部分: 网站优化实战
- CoolBlog开发笔记第5课:请求与响应
- [Swift]LeetCode39. 组合总和 | Combination Sum
- ELFHash算法解释
- ECharts教程
- Maven中阿里云私服配置
- vagrant的centos镜像,怎么用root用户登录?
- Newtonsoft.Json 的基本用法
- (原创)C# 压缩解压那些事儿
- win10安装virtualBox创建CentOS6.5虚拟机
- 牛客网-《剑指offer》-二进制中1的个数
- Quartz Trigger Priority 触发器优先级
- webpack流程图
- 【问题】解决在微信公众号里面网站无法访问:oops something went wrong:(
- C# 日志记录工具类--LogHelper.cs测试
- nmcli命令使用