请问SQL有什么比较方便的转义方式?

bizshow 2007-10-23 08:44:11
在执行SQL查询的时候,为了考虑安全性,所以用户提交的字段都必须经过关键字转义后才执行数据库查询
假设
sql = "select * from 表 where uName='select'"
由于select是关键字,需要过滤掉,若不过滤容易造成安全隐患
我的过滤方法是把s替换成html的转义符s
可是存入数据库当中的时候,则变成了select
这样在字段限制大小的情况下又会产生错误
请问有什么办法,可以将一些字符转义成sql不会去处理的,并且进行转义后储存?
...全文
249 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhiguo2008 2008-07-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ranzj 的回复:]
用 [] 才是王道.
[/Quote]


支持一下
zhiguo2008 2008-07-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhengyingcan 的回复:]
以下问题我理解不透,请高人指教
EXEC ('select 部门,姓名,性别'+@sql+',打卡日期,编号from 临时where 打卡日期between '2008-6-1' and '2008-06-20' group by 部门,姓名,性别,打卡日期,编号')
这句是无法运行的,因为between '2008-6-1' and '2008-06-20' 没有进行转义,改成如下格式就可以了
EXEC ('select 部门,姓名,性别'+@sql+',打卡日期,编号from 临时 where 打卡日期between ''2008-6-1'' and ''2008-06-20'' group by…
[/Quote]

加双引号在动态SQL中就是' (单引号)意思了。。
zhengyingcan 2008-07-06
  • 打赏
  • 举报
回复
怎么一直沒有人回我的帖子,回復一下子吧。對我來說很重要,高手請幫忙,非常感謝。
zhengyingcan 2008-07-04
  • 打赏
  • 举报
回复
总不可能日期两边也要加 [] 吧.
正宗老冉 2008-07-01
  • 打赏
  • 举报
回复
用 [] 才是王道.
zhengyingcan 2008-07-01
  • 打赏
  • 举报
回复
以下问题我理解不透,请高人指教
EXEC ('select 部门,姓名,性别'+@sql+',打卡日期,编号from 临时where 打卡日期between '2008-6-1' and '2008-06-20' group by 部门,姓名,性别,打卡日期,编号')
这句是无法运行的,因为between '2008-6-1' and '2008-06-20' 没有进行转义,改成如下格式就可以了
EXEC ('select 部门,姓名,性别'+@sql+',打卡日期,编号from 临时 where 打卡日期between ''2008-6-1'' and ''2008-06-20'' group by 部门,姓名,性别,打卡日期,编号')
加双引号就可以(between ''2008-6-1'' and ''2008-06-20'' ) ,这是为什么呢,我想不通,请高人指教.
tianhuo_soft 2008-07-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fcuandy 的回复:]
记住一点, 防sql 注入,只需对参数类型和 SQL需转义的字符做转义. 不需要替换关健字.

做好了转义, 传进来的关健字也只是 SQL 中的字串.
set @sql='select * from tb where name =''count'''
就像这个一样.

nbsi你可以搜一下,这就是我们几年前弄的注入工具.
[/Quote]

学习
谁是谁的谁 2008-07-01
  • 打赏
  • 举报
回复
路过,学习.
zhengyingcan 2008-07-01
  • 打赏
  • 举报
回复
mark
fcuandy 2007-10-23
  • 打赏
  • 举报
回复
记住一点, 防sql 注入,只需对参数类型和 SQL需转义的字符做转义. 不需要替换关健字.

做好了转义, 传进来的关健字也只是 SQL 中的字串.
set @sql='select * from tb where name =''count'''
就像这个一样.

nbsi你可以搜一下,这就是我们几年前弄的注入工具.
fcuandy 2007-10-23
  • 打赏
  • 举报
回复
可以用数字来表示的字段比如 int,float,decimal,double等等用个 clng过滤后传入sql语句中,或直接用isnumeric之类的函数检测.
datetime可以用isdate
可以用字符表示的字段,比如 char,varchar,等等,将 ' 替换为 ''(是两个单引号,不是一个双引号) 就行了.
没必要像你那样 将什么乱七八糟的都替换了.
dawugui 2007-10-23
  • 打赏
  • 举报
回复
如楼上:加[]或ESCAPE
如字段名count,在sql中用[count]
中国风 2007-10-23
  • 打赏
  • 举报
回复
SELECT *
FROM titles
WHERE notes LIKE 'aa%'''
ESCAPE ''''

用ESCAPE 或[]
通过慢sql分析的学习,了解什么是慢sql,以及慢SQL会引起那些性能问题。清楚慢sql日志的设置,然后再通过慢sql分析工具的学习,清楚慢sql分析的步骤和流程。慢sql分析工具:mysqldumpslow工具、explain工具、profile工具、Optimizer Trace工具。 提供课程中所使用的sql语句。 课程内容:第一章:课程简介1、课程介绍2、课程大纲 第二章:慢sql简介1、慢sql简介2、慢sql会引起的问题 第三章:慢日志的设置1、慢sql的分析流程2、慢日志参数理解3、慢日志参数设置:第1种方式:my.ini文件设置4、慢日志参数设置:第2种方式sql脚本设置5、慢日志参数设置-效果验证 第四章:如何发现慢sql1、如何发现慢sql:第1种方式:慢日志文件2、如何发现慢sql:第2种方式:mysql库的slow_log表 第五章:慢sql分析工具1、慢sql提取-mysqldumpslow工具-使用方法2、慢sql提取-mysqldumpslow工具-操作实战3、慢sql的执行计划分析-explain分析-执行计划结果说明4、慢sql的执行计划分析-explain分析-索引介绍+type类型举例5、慢sql的资源开销分析-profile分析-分析步骤6、慢sql的资源开销分析-profile分析-show profile执行阶段说明7、慢sql的资源开销分析-profile分析-完整列表说明+操作实战8、慢sql的跟踪分析-Optimizer Trace分析-分析步骤9、慢sql的跟踪分析-Optimizer Trace表的介绍10、索引失效场景举例 第六章:慢日志清理1、慢日志清理

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧