JDBC学习之路(三)防止SQL注入,PreparedStatement探索
来源:互联网 发布:终南山 知乎 编辑:程序博客网 时间:2024/06/06 02:00
现在登录注册或者其他很多地方遇到用户输入的内容可以直接拿到数据库内部去进行执行SQL语句,这个是一项很危险的运动,因为你不知道用户会输入什么,如果用户对SQL语句很熟悉,他就可以在输入的时候加上''两个冒号作为特殊字符,这样的话会让计算机认为他输入的是SQL语句的关键字从而改变你的SQL语句,照成不可估量的损失,下面介绍防止此类事情发生的代码
package com.bird.jdbc;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;/** * @use1 preparedStatement可以做一些预处理工作,将特殊字符去除,保证查询安全 * @use2 比起Statement速度更快 * @use3 单次测试不好说,但是多次运行还是PreparedStatement运行块的 * @author bird * */public class SQLInsert {//使用PreStatement防止SQL注入攻击public static void read(String num) throws Exception{Connection conn = null;PreparedStatement pt = null;ResultSet rs = null;try{conn = JdbcUtil.getConnecttion();//建立连接String sql = "select * from niao where password = ?";//问号代替numpt = conn.prepareStatement(sql);//创建语句pt.setString(1, num);rs = pt.executeQuery();//执行语句while(rs.next()){//得到数据System.out.println(rs.getObject("username")+"\t"+rs.getObject("password")+"\t"+rs.getObject("keywords")+"\t"+rs.getObject("userkeywords1")+"\t"+rs.getObject("time1")+"\t"+rs.getObject("userkeywords2")+"\t"+rs.getObject("time2")+"\t");}}finally{JdbcUtil.free(rs, pt, conn);}}public static void main(String [] args) throws Exception{read("123");
//read("' or 2 or'");这句话包含了两个单引号,会让计算机认为是SQL关键字很危险}}
1.PreparedStatement是继承自Statement, 可以说Statement能做的事情他都能做。
2.PreparedStatement可以对你输入的SQL语句进行预处理,删除那些特殊字符和危险
字符,非常有好处,给开发者帮助
3.PreparedStatement对SQL执行进行了优化,对于多次大量的SQL查询,效率要比Statement快的很多,建议能用它就用他
- JDBC学习之路(三)防止SQL注入,PreparedStatement探索
- jdbc防止sql注入-PreparedStatement
- jdbc防止sql注入-PreparedStatement
- JDBC:使用PreparedStatement防止SQL注入
- JDBC PreparedStatement 防止sql注入原理
- JDBC:使用PreparedStatement防止SQL注入
- 防止sql注入之PreparedStatement篇
- PreparedStatement 防止sql注入
- JDBC之SQL注入,PreparedStatement和Statement
- JDBC(PreparedStatement,sql注入)
- 在jdbc中,preparedStatement是如何防止SQL注入的
- JDBC(四)SQL 注入与 PreparedStatement
- 使用PreparedStatement防止SQL注入
- 验证preparedStatement防止SQL注入
- 使用PreparedStatement防止SQL注入
- 使用PreparedStatement防止SQL注入
- 使用PreparedStatement防止SQL注入
- 使用PreparedStatement防止SQL注入
- UPDATE: Send Concurrent HTTPRequest
- linux学习-fcntl
- 第二章:编译原理
- 关于使用vector迭代器出现的问题
- 如何删除win7多余的系统启动项
- JDBC学习之路(三)防止SQL注入,PreparedStatement探索
- 挂载ntfs文件系统
- NotePad++ - 安装和配置C/C++开发插件
- 【原】java学习笔记 【三】 eclipse导出带图片jar 生成exe
- poj 1067
- Linux 内核中的 GCC 特性(转)
- SQLServer2008 快捷键集合
- 如何成为一名合格的硬件工程师
- 败者树 K-路归并排序