网站漏洞检测归类和解决方案模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网站漏洞检测归类和解决方案
本文由s8h4a2n6贡献
doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT, 或下载源文件到本机查看。
一、
典型网站漏洞分类
根据风险等级, 网站漏洞一般可分为高风险、中风险和低风险三种。其中高风险漏洞是必须封堵的。中、低风险漏洞中有一部分是必须封堵的。还有一部分中、低风险漏洞, 由于其封堵的代价可能远高于不封堵所造成的损失, 因而能够进行选择性封堵。能够采取工具亿思平台进行其网站的漏洞扫描, 具体地址为: 典型网站漏洞的分类及相应的封堵要求如下表所示:
风险等级
高风险 1、 SQL 注入漏洞 2、跨站漏洞
中、低风险 1、默认测试用例文件 2、管理后台登陆入口中、低风险 1、存在电子邮件地址
漏洞名称
3、 XPATH 注入漏 3、应用程序错误引起的 2、无效链接洞信息泄露
4、备份文件造成的源代码泄漏3、Web 应用默认目录
封堵要求
必须封堵
选择封堵
1
二、
典型网站漏洞影响及解决方案
1、 SQL 注入漏洞漏洞影响: 本漏洞属于 Web 应用安全中的常见漏洞, 属于 OW ASP TOP 10 ( ) 中的注入类漏洞。很多 WEB 应用中都存在 SQL 注入漏洞。SQL 注入是一种攻击者利用代码缺陷进行攻击的方式, 可在任何能够影响数据库查询的应用程序参数中利用。例如 url 本身的参数、 post 数据或 cookie 值。正常的 SQL 注入攻击很大程度上取决于攻击者使用从错误消息所获得信息。可是, 即使没有显示错误消息应用程序仍可能受 SQL 注入的影响。总体上讲, SQL 注入是对 web 应用而不是对 web 服务器或操作系统本身的攻击。正如其名称所示, SQL 注入是对查询添加非预期 SQL 命令从而以数据库管理员或开发人员非预期的方式操控数据库的行为。如果成功的话, 就能够获得、修改、注入或删除有漏洞web 应用所使用数据库服务器的数据。在某些环境下, 可利用 SQL 注入完全控制系统。
解决方案: 防护建议包括部署分层安全措施( 包括在接受用户输入时使用参数化的查询) 、确保应用程序仅使用预期的数据、加固数据库服务器防止不恰当的访问数据。建议使用以下措施防范SQL 注入漏洞:
2
对于开发======== 使用以下建议编写不受SQL 注入攻击影响
的 web 应用。参数化查询: SQL 注入源于攻击者控制查询数据以修改查询逻辑, 因此防范SQL 注入攻击的最佳方式就是将查询的逻辑与其数据分隔, 这能够防止执行从用户输入所注入的命令。这种方式的缺陷是可能对性能产生影响( 但影响很小) , 且必须以这种方式构建站点上的每个查询才能完全有效。只要无意中绕过了一个查询, 就足以导致应用受SQL 注入的影响。以下代码显示的是能够进行 SQL 注入的 SQL 语句示例。
sSql = "SELECT LocationName FROM Locations "; sSql = sSql + " WHERE LocationID = " + Request["LocationID"]; mandText = sSql;
下面的例子使用了参数化的查询, 不受 SQL 注入攻击的影响。
sSql = "SELECT * FROM Locations "; sSql = sSql + " WHERE LocationID = @LocationID"; mandText = sSql; oCmd.Parameters.Add("@LocationID", Request["LocationID"]);
应用程序没有包含用户输入向服务器发送 SQL 语句 , 而是使用 -@LocationID-参数替代该输入, 这样用户输入就无法成为 SQL 执行的命令。
3
这种方式能够有效的拒绝攻击者所注入的任何输入, 尽管仍会生成错误, 但仅为数据类型转换错误, 而不是黑客能够利用的错误。以下代码示例显示从 HTTP 查询字符串中获得产品 ID 并使用到SQL 查询中。请注意传送给 SqlCommand 的包含有 SELECT 的字
符串仅仅是个静态字符串, 不是从输入中截取的。另外还请注意使用SqlParameter 对象传送输入参数的方式, 该对象的名称( @pid) 匹配 SQL 查询中所使用的名称。
C#示例:
string
connString
=
WebConfigurationManager.ConnectionStrings["myConn"].ConnectionS tr ing; using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); SqlCommand cmd = new SqlCommand("SELECT Count(*) FROM Products WHERE ProdID=@pid", conn); SqlParameter prm = new SqlParameter("@pid", SqlDbType.VarChar, 50); prm.Value = Request.QueryString["pid"]; cmd.Parameters.Add(prm); int recCount = (int)cmd.ExecuteScalar(); } 4
示例:
Dim
connString
As
String
=