当前位置: 首页 > 图文教程 > 网络编程 > ASP > 在ASP中过滤用户输入 提高安全性

ASP
asp实现取得数组中的最大值的代码
asp 将日期格式化为需要的格式
asp 下产生任意位数随机密码的代码
asp下返回以千分位显示数字格式化的数值
asp重定向页面的方法总结
asp下去除数组中重复的项的方法
asp下实现 重新排序数字数组的代码
asp 验证输入网址是否有效并可以访问 与正则验证输入网址
asp验证Ip格式的函数
asp实现生成由数字,大写字母,小写字母指定位数的随机数
asp 格式化sql中的like字符串
asp 实现显示所有的服务器变量值的函数
asp 取得用户真实IP,对代理地址仍然有效的函数
asp 通用数据库连接过程函数
asp 字符串截取函数
asp下实现格式化文件大小以MB显示的函数
asp 下用正则表达式检测邮箱格式的函数
asp 实现检测字符串是否为纯字母和数字组合的函数
asp代码实现检测组件是否安装的函数
asp通过JMAIL实现通用发送函数

在ASP中过滤用户输入 提高安全性


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 210 ::
收藏到网摘: n/a

 

安全对于所有应用程序来说都是十分重要的。一个简单应用程序里的某个失误都会造成对数据库或者其他企业资源未经授权的访问,因此安全尤其重要。一种常用的攻击方法是将命令嵌入到用户的回应里,而从用户输入里过滤掉这些非法的字符就能够防止这种攻击。

 
允许用户输入非法的字符会增加用户导致问题的机会。例如,很多应用程序都能够接受用户在SQL命令里增加的WHERE子句。恶意用户会通过向其输入的信息里增加额外命令的方法,来执行数据库服务器上的代码。例如,他们不是输入“Smith”,将其作为检索字符串,而是输入“Smith'; EXEC master..xp_cmdshell 'dir *.exe”。

下面这段代码是设计用来处理从服务器返回的多个Recordset的。用户的输入会包含一个额外的、未预料的的执行命令。当NextRecordset方法被调用的时候,潜藏的恶意代码就会被执行。

这一攻击可以通过过滤掉用户输入信息中的非法字符(在注释段里)来避免。这样做了之后,用户的输入仍然被允许处理,但是清除掉了所有的非法字符。

Dim rst As Recordset
Dim rst2 As Recordset
Dim strUserInput As String

strUserInput = "Smith';EXEC master..xp_cmdshell 'dir *.exe"

'Filter input for invalid characters
strUserInput = Replace(strUserInput, "<", vbNullString)
strUserInput = Replace(strUserInput, ">", vbNullString)
strUserInput = Replace(strUserInput, """", vbNullString)
strUserInput = Replace(strUserInput, "'", vbNullString)
strUserInput = Replace(strUserInput, "%", vbNullString)
strUserInput = Replace(strUserInput, ";", vbNullString)
strUserInput = Replace(strUserInput, "(", vbNullString)
strUserInput = Replace(strUserInput, ")", vbNullString)
strUserInput = Replace(strUserInput, "&", vbNullString)
strUserInput = Replace(strUserInput, "+", vbNullString)
strUserInput = Replace(strUserInput, "-", vbNullString)

Set rst = New Recordset
rst.ActiveConnection = "PROVIDER=SQLOLEDB;DATA SOURCE=SQLServer;" & _
                       "Initial Catalog=pubs;Integrated Security=SSPI"
rst.Open "Select * from authors where au_lname = '" & strUserInput & _
         "'", , adOpenStatic
'Do something with recordset 1

Set rst2 = rst.NextRecordset()
'Do something with recordset 2

在用户的输入中嵌入命令也是攻击ASP Web应用程序的一种常见手法,也叫做跨网站脚本攻击。过滤输入的内容并使用Server.HTMLEncode和Server.URLEncode这两个方法会有助于防止你ASP应用程序里这类问题的发生。