博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
总结-SQL注入
阅读量:4965 次
发布时间:2019-06-12

本文共 1101 字,大约阅读时间需要 3 分钟。

SQL注入:输入用户名和密码的时候带有SQL语句的关键字,会导致SQL注入;

用户是一个专业程序员,输入用户名和密码的时候,这些信息中包含了SQL语句的关键字,并且这些关键字参与了编译过程,导致原SQL语句含义被扭曲;

SQL注入是存在的一种安全隐患

怎么解决SQL注入问题( 导致SQL的根本原因是什么 )?

原因是先进行字符串拼接再进行的编译导,正好将用户提供的含有SQL语句关键字的字符串编译进去,从而导致了SQL语句的原意,SQL注入;

解决办法:

(第一版) -- 先体统SQL语句架构,SQL语句框架进行预先编译,再给SQL语句框架进行赋值,这样即使用户提供的信息中含有SQL语句的关键字,但是这些关键字并不会参与编译,不起作用,解决SQL注入问题.

(第二版) -- java.sql.PreparedStatement (预编译的数据库操作对象)

PreparedStatement 的父接口 :Statement

执行原理 : 先提供SQL语句框架,再使用预编译的数据库操作对象进行SQL语句的预先编译,再给SQL语句框架传值,传值的时候用户输入的信息中即使有SQL语句的关键字也不会参与编译,不会扭曲远SQL语句的含义;

String sql = ‘select * from u_user where userName = ? and passWord = ?’;

框架SQL语句,只有一个架子没有具体的值,每一个 ? 都是一个占位符,第一个占位符的下标是1,第二个占位符的下标是2

PrepareStatement ps = xxx.preparestatement(sql);

将上面的SQL框架语句进行预先编译

Ps.setString(1,username); //给占位符赋值

Ps.setString(2,password); //给占位符赋值

总结 : Statement PreparedStatement对比

Statement存在SQL注入问题,PreparedStatement可以避免

PreparedStatement使用较多

当有些系统需要SQL注入的时候就选择statement

StatementPreparedStatement效率比较

Statement特点是编译一次执行一次,编译n次执行n

PreparedStatement特点是编译一次,执行n

PreparedStatement速度要优于statement

转载于:https://www.cnblogs.com/821067197qqcom/p/8778880.html

你可能感兴趣的文章
单片机复位电路
查看>>
php json_decode失败,返回null
查看>>
获取单选按钮选中的值
查看>>
oracle 分页
查看>>
助教学期总结
查看>>
绘制基本 图形之矩形与多边形
查看>>
3-day3-list-truple-map.py
查看>>
02: djangorestframework使用
查看>>
7zip 自解压安装程序
查看>>
Graph-tool简介 - wiki
查看>>
jenkins 离线安装插件 ,插件的下载地址
查看>>
Edit控件显示多行文字
查看>>
java 日期与时间类
查看>>
JS第二周
查看>>
杭电1217————不像最短路的"最短路"
查看>>
【iCore3双核心板】发布 iCore3 硬件手册!
查看>>
Leetcode Word Break
查看>>
css性质
查看>>
python数据结构
查看>>
正则指引-括号(3)反向引用
查看>>