社区
Java
帖子详情
项目中我们手动转义一下用户输入的%,其他的再交给PreparedStatement转义,会不会产生什么问题?
程宇寒
博客专家认证
2017-12-27 10:50:04
我们都知道在JDBC中,PreparedStatement可以防止sql注入,不知道大家有没有想过一个问题呢?当我们在界面上查询的时候,界面上如果用户输入了%百分号,会不会导致我们的sql语句在模糊like查询的时候出现问题呢?
这里我自己有个小疑问?为什么我们不能手动转义一下用户输入的%,其他的再交给PreparedStatement转义?大家谁写过类似的程序?欢迎大家一起讨论和交流!如果我们在项目中手动转义%百分号,会不会产生什么问题?请大家踊跃发言!大家思考下PreparedStatement底层对sql注入是怎么处理的?换句话说大家思考下PreparedStatement防止sql注入的原理是什么,是PreparedStatement底层对sql语句的单引号或者%分号等等自动做了转义处理吗?
http://blog.csdn.net/czh500/article/details/78908317
...全文
246
回复
打赏
收藏
项目中我们手动转义一下用户输入的%,其他的再交给PreparedStatement转义,会不会产生什么问题?
我们都知道在JDBC中,PreparedStatement可以防止sql注入,不知道大家有没有想过一个问题呢?当我们在界面上查询的时候,界面上如果用户输入了%百分号,会不会导致我们的sql语句在模糊like查询的时候出现问题呢? 这里我自己有个小疑问?为什么我们不能手动转义一下用户输入的%,其他的再交给PreparedStatement转义?大家谁写过类似的程序?欢迎大家一起讨论和交流!如果我们在项目中手动转义%百分号,会不会产生什么问题?请大家踊跃发言!大家思考下PreparedStateme
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
如何防止SQL注入.pdf
防止SQL注入主要依赖于以下几种方法: 1. 使用参数化查询(预编译语句) 参数化查询是防止SQL注入的最有效手段之一。通过使用预编译语句(例如,在Java
中
使用Pre
pa
red
Statement
),可以确保
用户
输入
被当作参数处理,而不是SQL语句的一部分。 2. 检验和清洗
用户
输入
对
用户
输入
进行验证,确保它符合预期的格式。例如,如果你期待一个整数,确保
输入
是一个整数。对于字符串,移除或
转义
可能
会
引起SQL注入的特殊字符。 3. 使用ORM框架 4. 限制数据库权限 5. 使用存储过程 6. 适当使用Web应用防火墙 7. 避免详细的错误信息
解决SQL语句
中
含有
中
文字符无法查询
问题
我在写JDBC的是时候,遇见了因为在SQL语句
中
含有
中
文无法运行的情况,于是我把这句话放到mysql客户端
中
测试,结果通过,我估计不是字符编码
问题
,是Pre
pa
red
Statement
这个接口做了一些我不知道的处理导致这个
问题
的发生。而且一般直接使用?问号代替动态查询要求,而在客户端
中
必须加上双引号,于是我测试了
一下
直接把这个SQL语句写上去运行,结果没
问题
,只是加上了两个
转义
字符。下面我把代码发上来
pa
ckage oop.hu.ytu.dao; import java.sql.Connection; import java.sql.Pre
pa
red
Statement
; imp
尹成Python27天入门到
项目
实战
python字符串与绘图复习变量None变量参与运算没有赋值的情况
不
会
改变绘制立方体绘制五角星时间计算强化实现贷款计算连续
输入
多个字符串加法与绘图实现显示线段长度数据函数使用快速查阅函数帮助字符串三种风格字符与...
Java数据库编程宝典2
目录 前言 第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式化 1.2 高级语言 1.2.1 结构化查询语言 1.2.2 数据定义语言 1.2.3 数据处理语言 1.2.4 数据查询语言 1.3 事务管理和事务控制命令 1.3.1 ACID测试 1.3.2 SQL
中
的事务管理 1.4 数据库安全和数据控制语言 1.4.1 管理数据库
用户
1.4.2
用户
权限 1.4.3
用户
组和角色 1.5 数据库体系结构 1.5.1 Java数据对象 1.5.2 两层模型 1.5.3 三层模型 1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1
项目
规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 3.1 SQL语言 3.2 SQL数据类型 3.3 数据定义语言 3.3.1 创建、取消、更改数据库和表 3.3.2 创建、更改和取消视图 3.4 数据处理语言 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 3.5 数据查询语言 3.5.1 SELECT语句 3.5.2 WHERE子句 3.5.3 SQL运算符 3.5.4 使用子查询 3.6 对查询结果排序 3.7 将查询结果进行汇总 3.7.1 集合函数 3.7.2 使用HAVING子句来筛选组 3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询 3.8 数据控制语言 3.8.1 管理
用户
3.8.2 授予和取消
用户
权限 3.9 创建和使用存储过程 3.9.1 在存储过程
中
使用
输入
参数 3.9.2 存储过程
中
使用输出参数 3.10 小结 第4章 JDBC入门 4.1 什么是JDBC 4.2 两层和三层模型 4.2.1 两层模型 4.2.2 三层模型 4.3 SQL的一致性 4.4 JDBC兼容性 4.5 JDBC如何工作 4.5.1 DriverManager 4.5.2 JDBC DataSource 4.5.3 DataSource对象和JNDI 4.5.4 部署和使用DataSource的基本实现 4.6 连接池 4.7 分布式事务处理 4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1
Statement
对象 4.8.2 Pre
pa
red
Statement
语句 4.8.3 Callable
Statement
4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 4.10 批更新 4.11 ResultSet 4.12 可滚动的ResultSet 4.12.1 创建可滚动的ResultSet 4.12.2 游标控制 4.12.3 将游标移动到指定行 4.12.4 获得游标位置
为什么我们不能
手动
转义
一下
用户
输入
的%,其他的再
交给
Pre
pa
red
Statement
转义
?
我们都知道在JDBC
中
,Pre
pa
red
Statement
可以防止sql注入,不知道大家有没有想过一个
问题
呢?当我们在界面上查询的时候,界面上如果
用户
输入
了%百分号,
会
不
会
导致我们的sql语句在模糊like查询的时候出现
问题
呢? 这里我自己有个小疑问?为什么我们不能
手动
转义
一下
用户
输入
的%,其他的再
交给
Pre
pa
red
Statement
转义
?大家可以写程序测试下?欢迎大家一起讨论和交流!
Java
50,530
社区成员
85,610
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章