网站漏洞检测归类和解决方案

上传人:kms****20 文档编号:41011522 上传时间:2018-05-28 格式:DOC 页数:15 大小:49KB
返回 下载 相关 举报
网站漏洞检测归类和解决方案_第1页
第1页 / 共15页
网站漏洞检测归类和解决方案_第2页
第2页 / 共15页
网站漏洞检测归类和解决方案_第3页
第3页 / 共15页
网站漏洞检测归类和解决方案_第4页
第4页 / 共15页
网站漏洞检测归类和解决方案_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《网站漏洞检测归类和解决方案》由会员分享,可在线阅读,更多相关《网站漏洞检测归类和解决方案(15页珍藏版)》请在金锄头文库上搜索。

1、网站漏洞检测归类和解决方案网站漏洞检测归类和解决方案doc 文档可能在 WAP 端浏览体验不佳。建议您优先选择 TXT,或下载源文件到本机查看。一、典型网站漏洞分类根据风险等级,网站漏洞通常可分为高风险、中风险和低风险三种。其中高 风险漏洞是必须封堵的。中、低风险漏洞中有一部分是必须封堵的。还有一部分 中、低风险漏洞,由于其封堵的代价可能远高于不封堵所造成的损失,因而可以 进行选择性封堵。可以采取工具亿思平台进行其网站的漏洞扫描, 具体地址为:http:/ 典型网站漏洞的分类及相应的封堵要求如下表所示:风险等级高风险 1、 SQL 注入漏洞 2、 跨站漏洞中、低风险 1、 默认测试用例文件 2

2、、 管理后台登陆入口中、低风险 1、 存在电子邮件地 址漏洞名称3、 XPATH 注入漏 3、 应用程序错误引起的 2、 无效链接 洞 信息泄露 4、 备份文件造成的源代 码泄漏 3、 Web 应用默认目 录封堵要求必须封堵选择封堵1二、典型网站漏洞影响及解决方案1、 SQL 注入漏洞 漏洞影响: 本漏洞属于 Web 应用安全中的常见漏洞,属于 OWASP TOP 10 (2007) 中的注入类漏洞。 很多 WEB 应用中都存在 SQL 注入漏洞。SQL 注入是一种攻击者利用代码 缺陷进行攻击的方式,可在任何能够影响数据库查询的应用程序参数中利用。例 如 url 本身的参数、post 数据或

3、cookie 值。 正常的 SQL 注入攻击很大程度上取决于攻击者使用从错误消息所获得信 息。但是,即使没有显示错误消息应用程序仍可能受 SQL 注入的影响。 总体上讲,SQL 注入是对 web 应用而不是对 web 服务器或操作系统本身 的攻击。正如其名称所示,SQL 注入是对查询添加非预期 SQL 命令从而以数据 库管理员或开发人员非预期的方式操控数据库的行为。如果成功的话,就可以获 得、修改、注入或删除有漏洞 web 应用所使用数据库服务器的数据。在某些环 境下,可利用 SQL 注入完全控制系统。解决方案: 防护建议包括部署分层安全措施(包括在接受用户输入时使用参数化的查 询) 、确保应

4、用程序仅使用预期的数据、加固数据库服务器防止不恰当的访问数 据。 建议使用以下措施防范 SQL 注入漏洞:2对于开发 = 使用以下建议编写不受 SQL 注入攻击影响的 web 应用。 参数化查询: SQL 注入源于攻击者控制查询数据以修改查询逻辑, 因此防范 SQL 注入攻击的最佳方式就是将查询的逻辑与其数据分隔, 这可以防止执行从用户输 入所注入的命令。这种方式的缺陷是可能对性能产生影响(但影响很小) ,且必 须以这种方式构建站点上的每个查询才能完全有效。只要无意中绕过了一个查 询,就足以导致应用受 SQL 注入的影响。以下代码显示的是可以进行 SQL 注入 的 SQL 语句示例。sSql

5、= “SELECT LocationName FROM Locations “; sSql = sSql + “ WHERE LocationID = “ + Request“LocationID“; oCmd.CommandText = sSql;下面的例子使用了参数化的查询,不受 SQL 注入攻击的影响。sSql = “SELECT * FROM Locations “; sSql = sSql + “ WHERE LocationID = LocationID“; oCmd.CommandText = sSql; oCmd.Parameters.Add(“LocationID“, Req

6、uest“LocationID“);应 用 程 序 没 有 包 含 用 户 输 入 向 服 务 器 发 送 SQL 语 句 , 而 是 使 用 -LocationID-参数替代该输入,这样用户输入就无法成为 SQL 执行的命令。3这种方式可以有效的拒绝攻击者所注入的任何输入,尽管仍会生成错误,但仅为 数据类型转换错误,而不是黑客可以利用的错误。以下代码示例显示从 HTTP 查询字符串中获得产品 ID 并使用到 SQL 查询 中。 请注意传送给 SqlCommand 的包含有 SELECT 的字符串仅仅是个静态字符 串,不是从输入中截取的。此外还请注意使用 SqlParameter 对象传送输入

7、参数 的方式,该对象的名称(pid)匹配 SQL 查询中所使用的名称。C#示例:stringconnString=WebConfigurationManager.ConnectionStrings“myConn“.ConnectionStr ing; using (SqlConnection conn = new SqlConnection(connString) conn.Open(); SqlCommand cmd = new SqlCommand(“SELECT Count(*) FROM Products WHERE ProdID=pid“, conn); SqlParameter p

8、rm = new SqlParameter(“pid“, SqlDbType.VarChar, 50); prm.Value = Request.QueryString“pid“; cmd.Parameters.Add(prm); int recCount = (int)cmd.ExecuteScalar(); 4VB.NET 示例:DimconnStringAsString=WebConfigurationManager.ConnectionStrings(“myConn“).ConnectionStr ingUsing conn As New SqlConnection(connStrin

9、g) conn.Open() Dim cmd As SqlCommand = New SqlCommand(“SELECT Count(*) FROM Products WHERE ProdID=pid“, conn) Dim prm As SqlParameter = New SqlParameter(“pid“,SqlDbType.VarChar, 50) prm.Value = Request.QueryString(“pid“) cmd.Parameters.Add(prm) Dim recCount As Integer = cmd.ExecuteScalar() End Using

10、验证输入:可通过正确验证用户输入的类型和格式防范大多数 SQL 注入攻击, 最佳方式是通过白名单, 定义方法为对于相关的字段只接受特定的帐号号码或帐 号类型,或对于其他仅接受英文字母表的整数或字母。很多开发人员都试图使用 黑名单字符或转义的方式验证输入。总体上讲,这种方式通过在恶意数据前添加 转义字符来拒绝已知的恶意数据,如单引号,这样之后的项就可以用作文字值。5这种方式没有白名单有效,因为不可能事先知道所有形式的恶意数据。对于安全操作 =使用以下建议帮助防范对 web 应用的 SQL 注入攻击。限制应用程序权限:限制用户凭据,仅使用应用运行所必需权限的。任何成功的 SQL 注入攻击都会运行在

11、用户凭据的环境中,尽管限制权限无法完全防范 SQL 注入攻击,但可以大大增加其难度。强系统管理员口令策略: 通常攻击者需要管理员帐号的功能才能使用特定的 SQL 命令,如果系统管理员口令较弱的话就比较容易暴力猜测,增加成功 SQL 注入 攻击的可能性。另一个选项就是根本不使用系统管理员口令,而是为特定目的创 建特定的帐号。一致的错误消息方案:确保在出现数据库错误时向用户提供尽可能少的信息。不 要泄漏整个错误消息,要同时在 web 和应用服务器上处理错误消息。当 web 服 务器遇到处理错误时,应使用通用的 web 页面响应,或将用户重新定向到标准 的位置。绝不要泄漏调试信息或其他可能对攻击者有

12、用的细节。有关如何在 IIS 中关闭详细错误消息的说明请见:6http:/ /windows2000/en/server/iis/htm/core/iierrcst.htm使用以下句法在 Apache 服务器上取缔错误消息:Syntax: ErrorDocument Example: ErrorDocument 500 /webserver_errors/server_error500.txtWebSphere 之类的应用服务器通常默认安装启用了错误消息或调试设置。有关 如何取缔这些错误消息的信息,请参考应用服务器文档。存储过程:如果不使用的话,请删除 master.Xp_cmdshell、x

13、p_startmail、 xp_sendmail、sp_makewebtask 之类的 SQL 存储过程。SQL 注入漏洞根本上还是取决于 web 应用程序的代码。尽管不是修复,但 可以通过向 IDS 中添加结合了正则表达式的规则作为紧急措施检测 SQL 注入攻 击。尽管这无法修复所有可能的 SQL 注入漏洞,但便于实施,并且要求攻击者 必须要改进其方法才能实现成功的攻击。可如下使用正则表达式。删除 SQL 元字符的正则表达式: /(%27)|()|(-)|(%23)|(#)/ix7可如下将上述正则表达式添加到 Snort 规则: alert tcp $EXTERNAL_NET any - $

14、HTTP_SERVERS $HTTP_PORTS (msg:“SQL Injection-Paranoid“;flow:to_server,established;uricontent:“.pl“;pcre:“/(%27)|()|(- -)|(%23)|(#)/i“; classtype:Web-application-attack; sid:9099; rev:5;)传统 SQL 注入攻击的正则表达式: /w*(%27)|()(%6F)|o|(%4F)(%72)|r|(%52)/ix删除有 UNION 关键字的 SQL 注入攻击的正则表达式: /(%27)|()union/ix (%27)|

15、()可为其他的 SQL 查询(如 select、insert、update、delete、drop 等)编 写类似的正则表达式。在 MS SQL 服务器上检测 SQL 注入攻击的正则表达式: /exec(s|+)+(s|x)pw+/ix对于质量保证 =8解决 SQL 注入缺陷最终要求基于代码的修复, “对于开发”和“对于安全操 作”部分所述的步骤提供了修复这些漏洞所必要的信息。以下步骤概述了如何对 应用程序手动测试 SQL 注入。如何对应用程序手动测试 SQL 注入:1. 在浏览器中打开希望测试 SQL 注入漏洞的 web 应用。2. 将鼠标光标悬停在 Web 站点的链接上并注意底部的状态栏,可以看到链接所 指 向 的 URL 。 找 到 其 中 带 有 参 数 的 URL , 如http:/ URL,请点击链接然后查看地址栏,直到 找到带有参数的 URL。3. 找到带有参数的 URL 后,点击链接进入网页,在地址栏中可以看到状态栏中 的 URL。4. 有两种测试 SQL 注入脚本的方法, 请使用全部两种方式依次测试每个参数值。方法 1. 在地址栏中点击光标,高亮显示参数值,如高亮显示 name=value 中的 value 并9用单引号()替换,这时应类似于 name=。方法 2. 在地址栏中点击光标,在 value 中间输入单引号() ,这时应

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号