在jdbc中,preparedStatement是如何防止SQL注入的
2013-11-15 11:54
274 查看
对于JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement是无效的,这是因为PreparedStatement不允许在插入时改变查询的逻辑结构.
如果有一条SQL语句: "select * from 表 where 用户名 = '用户名'"
Statement的SQL语句是这样写的: "select * from 表 where 用户名 = '"+ 变量值 +"'"
PreparedStatement的SQL语句是这样写的: "select * from 表 where 用户名 = ?" 然后对应?赋值
这样我们就发现输入 "aa' or '1' = '1"
Statement是将这个和SQL语句做字符串连接到一起执行
PreparedStatement是将 "aa' or '1' = '1" 作为一个字符串赋值给?,做为"用户名"字段的对应值,显然这样SQL注入无从谈起了.
如果有一条SQL语句: "select * from 表 where 用户名 = '用户名'"
Statement的SQL语句是这样写的: "select * from 表 where 用户名 = '"+ 变量值 +"'"
PreparedStatement的SQL语句是这样写的: "select * from 表 where 用户名 = ?" 然后对应?赋值
这样我们就发现输入 "aa' or '1' = '1"
Statement是将这个和SQL语句做字符串连接到一起执行
PreparedStatement是将 "aa' or '1' = '1" 作为一个字符串赋值给?,做为"用户名"字段的对应值,显然这样SQL注入无从谈起了.
相关文章推荐
- JDBC如何有效防止SQL注入
- JDBC_演示如何防止SQL注入
- JDBC如何有效防止SQL注入
- MyBatis如何防止SQL注入
- 关于SQL注入和如何防止
- pdo如何防止 sql注入
- PHP如何防止SQL注入的问题
- 如何防止SQL注入
- java持久层框架mybatis如何防止sql注入
- mybatis是如何防止SQL注入的
- mybatis如何防止sql注入
- 如何防止SQL注入(还在学习当中)
- MyBatis如何防止SQL注入
- EF Core 2.0 执行原始查询如何防止SQL注入
- pdo是如何防止 sql注入的
- mybatis如何防止sql注入
- java持久层框架mybatis如何防止sql注入
- mybatis中#{}与${}的差别(如何防止sql注入)
- T-SQL篇如何防止SQL注入的解决方法
- php网站如何防止sql注入?