关于ASP防注入漏洞中的replace函数

ASP防注入漏洞中用了replace函数,语法是语法Replace(expression,find,replacewith[,start[,count[,compare]... ASP防注入漏洞中用了replace函数,语法是语法
Replace(expression, find, replacewith[, start[, count[, compare]]])
但是对于以下这句,我不是很理解,请高手指点:
SQLFixup = Replace(TextIn, "script", "script", 1, -1, 0)
这句是什么意思呢?为什么替换前是"script",替换后还是"script"?compare参数为0是执行二进制比较,为1是执行文字比较,具体来说,放在上面这条语句里是怎样产生作用的呢?
zjcn5205 说的很对,测试结果是弹出警告框,字符根本没过滤掉,那网上很多防注入代码都有这样的这样的语句:

SQLFixup = Replace(TextIn,"<","<", 1, -1, 1)
SQLFixup = Replace(TextIn,">",">", 1, -1, 1)
SQLFixup = Replace(TextIn, "script", "script", 1, -1, 0)
SQLFixup = Replace(TextIn, "SCRIPT", "SCRIPT", 1, -1, 0)
SQLFixup = Replace(TextIn, "Script", "Script", 1, -1, 0)
SQLFixup = Replace(TextIn, "script", "Script", 1, -1, 1)
SQLFixup = Replace(TextIn, "object", "object", 1, -1, 0)
SQLFixup = Replace(TextIn, "OBJECT", "OBJECT", 1, -1, 0)
SQLFixup = Replace(TextIn, "Object", "Object", 1, -1, 0)
SQLFixup = Replace(TextIn, "object", "Object", 1, -1, 1)

如果要防注入,应该怎么写呀??
展开
 我来答
zjcn5205
2006-12-31 · TA获得超过321个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:427万
展开全部
这个替换完全没有意义。以下是测试代码:
<html><body>
这里是测试文字<br/>
<%
Dim TextIn
Dim SQLFixup
On error resume next
TextIn="<script language=javascript>alert('hello!');</script>"
SQLFixup = Replace(TextIn, "script", "script", 1, -1, 0)
if err then
response.write "有错误发生:"& err.description &"<br/>"
err.clear
end if
response.write "TextIn="&TextIn&"<br/>"&vbCrlf
response.write "SQLFixup="&SQLFixup
%></body></html>

运行结果是弹出两个警告框。

网上资料参差不齐,不要尽信所谓高手教程,自己动手试试才能真正学到东西。

2006年12月31日补充:
防止SQL注入的本质就是让用户输入的东西不影响SQL语句的正常执行。
有两个思路:一个是过滤掉可能影响SQL执行的语句,这应该是网站流传资料比较多的一个思路;
另一个就是,只选择出需要的安全字符;

两个思路不一而足,各有有缺点。但在一些常见的SQL注入,如登陆,中采用正则表达式实现第二种思路是非常便捷和高效的:
如:
过滤用户名中的非法字符
Function dealUserName(userName_)
Dim RegExpObj
Dim i,n
Dim userName,tempStr,resultStr

userName=Trim(userName_)
Set RegExpObj=new RegExp
RegExpObj.Global = True
RegExpObj.Pattern="^[a-zA-Z0-9_]+$" '只允许字母、数字和下划线
'RegExpObj.Pattern="^\w+$" '效果同上

resultStr=userName
n=Len(userName)
for i=1 to n
tempStr=Mid(userName,i,1)
if not RegExpObj.test(tempStr) then resultStr=Replace(resultStr,tempStr,"")
next

Set RegExpObj=nothing
dealUserName=resultStr
End Function

上述函数过滤掉用户名中的除字母、数字和下划线之外的所有字符,这样便不会影响到SQL查询语句的正常执行了。
正则表达式的功能相当强大,使用相当灵活。防SQL注入关键还在于结合自己的实际情况来综合考虑。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式