在执行SQL查询的时候,为了考虑安全性,所以用户提交的字段都必须经过关键字转义后才执行数据库查询
假设
sql = "select * from 表 where uName='select'"
由于select是关键字,需要过滤掉,若不过滤容易造成安全隐患
我的过滤方法是把s替换成html的转义符s
可是存入数据库当中的时候,则变成了select
这样在字段限制大小的情况下又会产生错误
请问有什么办法,可以将一些字符转义成sql不会去处理的,并且进行转义后储存?
假设
sql = "select * from 表 where uName='select'"
由于select是关键字,需要过滤掉,若不过滤容易造成安全隐患
我的过滤方法是把s替换成html的转义符s
可是存入数据库当中的时候,则变成了select
这样在字段限制大小的情况下又会产生错误
请问有什么办法,可以将一些字符转义成sql不会去处理的,并且进行转义后储存?
解决方案 »
- SQL UPDATA 问题 这次没分了 求个好心人解答
- 不知道是不是弱智的问题?二个字符串相加
- 求一UPDATE语句,求该记录之前(有序号指出是之前还是之后)的所有记录之和(我用ACCESS)
- 如何用存储过程实现以下功能?
- 为了备份和恢复数据库,如何用 sql 语句清除当前数据库的访问?
- 分发数据库distribution出现置疑
- 拼音查询
- 急求一个去字符串的问题
- SQL 语句中有 DATAPART() 函数吗?
- SQL Server 中定义Image类型的Size为16,它的大小可为多大?
- 我想通过一个给定的新闻ID, 获取这个新闻的上一篇,和下一篇 怎么做比较精确??
- 请教:查询表中每个类别的第一条记录的sql。内详
FROM titles
WHERE notes LIKE 'aa%'''
ESCAPE ''''用ESCAPE 或[]
如字段名count,在sql中用[count]
datetime可以用isdate
可以用字符表示的字段,比如 char,varchar,等等,将 ' 替换为 ''(是两个单引号,不是一个双引号) 就行了.
没必要像你那样 将什么乱七八糟的都替换了.
set @sql='select * from tb where name =''count'''
就像这个一样. nbsi你可以搜一下,这就是我们几年前弄的注入工具.
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'' ) ,这是为什么呢,我想不通,请高人指教.
加双引号在动态SQL中就是' (单引号)意思了。。