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

来源:百度知道 编辑:UC知道 时间:2024/05/21 09:48:50
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(Te

这个替换完全没有意义。以下是测试代码:
<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<