sql注入的问题,对文本型号的是否只需将单引号替换为双引号?对sql注入有深入了解的进来

zbh326 2007-07-05 09:46:41
asp页面防止sql注入,如果在页面里用拼接sql语句的方式查询数据库:
一般对传出的数字型的参数,只要判断参数为数字就可以很好的防止sql注入了;
但对于传入的字符型的参数,在拼接到sql语句的时候,我的理解是这样的:只需要将参数的单引号替换成双引号就可以了,无需替换其他的字符。因为如果是字符型的,想注入的话必须要输入单引号来拼凑成可以执行的sql语句。

我对sql注入研究不深,不知道对字符型的仅仅替换单引号是不是完全可以防止注入,希望对sql注入有深入研究的兄弟说说你的看法,如果有否定意见,最好能举例说明。不胜感激
...全文
1204 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
小王的呐喊 2011-06-30
  • 打赏
  • 举报
回复
至于那么麻烦么,数字型的直接判断是不是数字就行了,字符串形式的,只过滤单引号就行了 肯定不会被注入了
另外考虑一下<>这样的,如果别人的信息中含有这样的字符,别人打开网站的时候,可能会iframe到木马网页,
sanpizi 2007-07-10
  • 打赏
  • 举报
回复
我昏!!!!!!!!!!!!


下载个Neeao_SqlIn.Asp不就得了,你费这事干嘛??

其实啥子过滤方法都没一楼说的好,

最好就是不要用拼接sql的方式操作数据库,可以用
1.prepared paremeters
2.用ADO Recordset
3.存储过程
  • 打赏
  • 举报
回复
feihooone() ( ) 信誉:100 Blog 加为好友 2007-7-10 9:52:57 得分: 0



可以将半角替换为全角 这样比较好 当字符处理



--------------------------------------
半角和全角是两个完全不同概念!你凭什么替用户决定他的输入呢?
feihooone 2007-07-10
  • 打赏
  • 举报
回复
可以将半角替换为全角 这样比较好 当字符处理
  • 打赏
  • 举报
回复
hy_lihuan(罗嗦 我想早恋,可是已经晚了) ( ) 信誉:100 Blog 加为好友 2007-7-8 16:10:34 得分: 0



为什么要花这么多时间去考虑这方面的问题呢?明明可以完全避免的阿;
我记得"把一个单引号替换为两个单引号就可以了",那注释呢?一般要破坏表结构的话都要注释掉后面的内容的阿
---------------------------------------------------


不能截断字符串那注释符只会作为字符串的普通一部分,这么简单的道理还想不通,还真把微软当傻子了?
libao1983 2007-07-09
  • 打赏
  • 举报
回复
字段名以及表名的设置的确也是一门学问呢。
而且数据库用户的权限不能过大,不允许操作系统表。
数据库及时备份。
建议尽量用存储过程。
参数过滤时很难把握,有些明明不是过滤的内容,也会被过滤的面目全非。
不推荐使用conn.execute()来执行
  • 打赏
  • 举报
回复
实在令人作呕的种种"所谓经验"
尤其是楼上以及"cuit(GIS学习中) ( ) 信誉:100 Blog 加为好友"这个
chouchy 2007-07-08
  • 打赏
  • 举报
回复
供参考:

<%

'过滤非法字符,防止SQL注入

function validSQL()
validSQL=true
dim invalid:invalid=split("'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare","|")
dim collection

If request.queryString<>"" then set collection=request.queryString
if request.form<>"" then set collection=request.form

if collection<>"" then
for each arg in collection
for i=0 to ubound(invalid)
if instr(collection(arg),invalid(i))>0 then
validSQL=false
exit for
end if
next
if validSQL=false then
show_error("输入中包含非法字符,请重新输入!")
exit for
end if
next
end if
end function

'通用提示过程
sub show_error(err)
if isEmpty(err) then
err="系统未知错误"
end if
%>
<script language="javascript">
var errMsg="<%=err%>";
alert( errMsg);
history.go(-1);
</script>
<%
Response.Write err
Response.End
end sub
%>
hy_lihuan 2007-07-08
  • 打赏
  • 举报
回复
为什么要花这么多时间去考虑这方面的问题呢?明明可以完全避免的阿;
我记得"把一个单引号替换为两个单引号就可以了",那注释呢?一般要破坏表结构的话都要注释掉后面的内容的阿
joejoe1991 2007-07-08
  • 打赏
  • 举报
回复
楼上的 光是列名起的难猜是不行滴。 用join自连接查询的方式 只要知道这个表中的一个列名
就可以拿到表中所有的数据。 不过也有条件限制。 就是支持可以union
所以说 表名也要起的偏僻一点。。

字符型的只要将单引号replace一下应该就不用担心了
gnimgnot 2007-07-07
  • 打赏
  • 举报
回复


与其挖空了心思过滤

不如把字段名起得难以猜透

表单名也不要和字段名相同

如果能出现or 1=1 的问题

那就是你逻辑的问题了

做开发有时候要换位思考
dh20156 2007-07-07
  • 打赏
  • 举报
回复
参考:
http://community.csdn.net/Expert/topic/5439/5439383.xml?temp=.433819
  • 打赏
  • 举报
回复
更"牛"的来了。。。唉
szjhxu 2007-07-06
  • 打赏
  • 举报
回复
禁止使用单引号。
  • 打赏
  • 举报
回复
hookee() ( ) 信誉:100 Blog 加为好友 2007-07-05 10:03:24 得分: 0


如果拼接的字段是数字类型xxx.asp?id=123
假设注入 id=1234%20or%201=1;delete%20from%20tbl;
那么拼接后
select * from tbl where id=1234 or 1=1;delete from tbl;

最好就是不要用拼接sql的方式操作数据库,可以用
1.prepared paremeters
2.用ADO Recordset
3.存储过程
---------------------------------------------
请专心看lz的帖---------"一般对传出的数字型的参数,只要判断参数为数字就可以很好的防止sql注入了"
已经告诉你数值型不用考虑了


to 楼主:
把一个单引号替换为两个单引号就可以了,不用替换成什么双引号的.
hookee 2007-07-05
  • 打赏
  • 举报
回复
如果拼接的字段是数字类型xxx.asp?id=123
假设注入 id=1234%20or%201=1;delete%20from%20tbl;
那么拼接后
select * from tbl where id=1234 or 1=1;delete from tbl;

最好就是不要用拼接sql的方式操作数据库,可以用
1.prepared paremeters
2.用ADO Recordset
3.存储过程

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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