




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、web开发常见的几个漏洞解决方法2013-04-17 作者:伍华聪收藏 平时工作,多数是开发Web项目,由于一般是开发内部使用的业务系统,所以对于安全性一般不是看的很重,基本上由于是内网系统,一般也很少会受到攻击,但有时候一些系统平台,需要外网也要使用,这种情况下,各方面的安全性就要求比较高了,所以往往会交付给一些专门做安全测试的第三方机构进行测试,然后根据反馈的漏洞进行修复,如果你平常对于一些安全漏洞不够了解,那么反馈的结果往往是很残酷的,迫使你必须在很多细节上进行修复完善。本文主要根据本人项目的一些第三方安全测试结果,以及本人针对这些漏洞问题的修复方案,介绍在这方面的一些经验,希望对大家有
2、帮助。基本上,参加的安全测试(渗透测试)的网站,可能或多或少存在下面几个漏洞:SQL注入漏洞、跨站脚本攻击漏洞、登陆后台管理页面、IIS短文件/文件夹漏洞、系统敏感信息泄露。1、测试的步骤及内容这些安全性测试,据了解一般是先收集数据,然后进行相关的渗透测试工作,获取到网站或者系统的一些敏感数据,从而可能达到控制或者破坏系统的目的。第一步是信息收集,收集如IP地址、DNS记录、软件版本信息、IP段等信息。可以采用方法有:1)基本网络信息获取;2)Ping目标网络得到IP地址和TTL等信息;3)Tcptraceroute和Traceroute 的结果;4)Whois结果;5)Netcraft获取目
3、标可能存在的域名、Web及服务器信息;6)Curl获取目标Web基本信息;7)Nmap对网站进行端口扫描并判断操作系统类型;8)Google、Yahoo、Baidu等搜索引擎获取目标信息;9)FWtester 、Hping3 等工具进行防火墙规则探测;10)其他。第二步是进行渗透测试,根据前面获取到的数据,进一步获取网站敏感数据。此阶段如果成功的话,可能获得普通权限。采用方法会有有下面几种1)常规漏洞扫描和采用商用软件进行检查;2)结合使用ISS与Nessus等商用或免费的扫描工具进行漏洞扫描;3)采用SolarWinds对网络设备等进行搜索发现;4)采用Nikto、Webinspect等软件
4、对Web常见漏洞进行扫描;5)采用如AppDetectiv之类的商用软件对数据库进行扫描分析;6)对Web和数据库应用进行分析;7)采用WebProxy、SPIKEProxy、Webscarab、ParosProxy、Absinthe等工具进行分析;8)用Ethereal抓包协助分析;9)用Webscan、Fuzzer进行SQL注入和XSS漏洞初步分析;10)手工检测SQL注入和XSS漏洞;11)采用类似OScanner的工具对数据库进行分析;12)基于通用设备、数据库、操作系统和应用的攻击;采用各种公开及私有的缓冲区溢出程序代码,也采用诸如MetasploitFramework 之类的利用程
5、序集合。13)基于应用的攻击。基于Web、数据库或特定的B/S或C/S结构的网络应用程序存在的弱点进行攻击。14)口令猜解技术。进行口令猜解可以采用 X-Scan、Brutus、Hydra、溯雪等工具。第三步就是尝试由普通权限提升为管理员权限,获得对系统的完全控制权。在时间许可的情况下,必要时从第一阶段重新进行。采用方法1)口令嗅探与键盘记录。嗅探、键盘记录、木马等软件,功能简单,但要求不被防病毒软件发觉,因此通常需要自行开发或修改。2)口令破解。有许多著名的口令破解软件,如 L0phtCrack、John the Ripper、Cain 等以上一些是他们测试的步骤,不过我们不一定要关注这些过
6、程性的东西,我们可能对他们反馈的结果更关注,因为可能会爆发很多安全漏洞等着我们去修复的。2、SQL注入漏洞的出现和修复1)SQL注入定义:SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。SQL注入有时候,在地址参数输入,或者控件输入都有可能进行。如在链接后加
7、入号,页面报错,并暴露出网站的物理路径在很多时候,很常见,当然如果关闭了Web.Config的CustomErrors的时候,可能就不会看到。另外,Sql注入是很常见的一个攻击,因此,如果对页面参数的转换或者没有经过处理,直接把数据丢给Sql语句去执行,那么可能就会暴露敏感的信息给对方了。如下面两个页面可能就会被添加注入攻击。HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestD . type=U and status0)0 得到第一个用户建立表的名称,并与整数进行比较,显然abc.asp工作异常,但在异常中却可以发现表
8、的名称。假设发现的表名是xyz,则HTTP:/xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestDB.dbo.sysobjects& . tatus0 and name not in(xyz)0 可以得到第二个用户建立的表的名称,同理就可得到所有用建立的表的名称。为了屏蔽危险Sql语句的执行,可能需要对进行严格的转换,例如如果是整形的,就严格把它转换为整数,然后在操作,这样可以避免一些潜在的危险,另外对构造的sql语句必须进行Sql注入语句的过滤,如我的框架(Winform开发框架、Web开发框架等)里面就内置了对这些有害的语句和
9、符号进行清除工作,由于是在基类进行了过滤,因此基本上子类都不用关心也可以避免了这些常规的攻击了。 / / 验证是否存在注入代码(条件语句) / / public bool HasInjectionData(string inputData) if (string.IsNullOrEmpty(inputData) return false; /里面定义恶意字符集合 /验证inputData是否包含恶意集合 if (Regex.IsMatch(inputData.ToLower(), GetRegexString() return true; else return false; / / 获取正则
10、表达式 / / private static string GetRegexString() /构造SQL的注入关键字符 string strBadChar = /selects, /froms, inserts, deletes, updates, drops, truncates, execs, count(, declares, asc(, mid(, char(, net user, xp_cmdshell, /adds, exec master.dbo.xp_cmdshell, net localgroup administrators ; /构造正则表达式 string str_R
11、egex = .*(; for (int i = 0; i strBadChar.Length - 1; i+) str_Regex += strBadChari + |; str_Regex += strBadCharstrBadChar.Length - 1 + ).*; return str_Regex; 上面的语句用于判别常规的Sql攻击字符,我在数据库操作的基类里面,只需要判别即可,如下面的一个根据条件语句查找数据库记录的函数。 / / 根据条件查询数据库,并返回对象集合 / /查询的条件 /自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序 /参数列表
12、 /指定对象的集合 public virtual ListFind(string condition, string orderBy, IDbDataParameter paramList) if (HasInjectionData(condition) LogTextHelper.Error(string.Format(检测出SQL注入的恶意数据, 0, condition); throw new Exception(检测出SQL注入的恶意数据); . 以上只是防止Sql攻击的一个方面,还有就是坚持使用参数化的方式进行赋值,这样很大程度上减少可能受到SQL注入攻击。 Database db
13、= CreateDatabase(); DbCommand command = db.GetSqlStringCommand(sql); command.Parameters.AddRange(param);3、跨站脚本攻击漏洞出现和修复跨站脚本攻击,又称XSS代码攻击,也是一种常见的脚本注入攻击。例如在下面的界面上,很多输入框是可以随意输入内容的,特别是一些文本编辑框里面,可以输入例如alert(这是一个页面弹出警告);这样的内容,如果在一些首页出现很多这样内容,而又不经过处理,那么页面就不断的弹框,更有甚者,在里面执行一个无限循环的脚本函数,直到页面耗尽资源为止,类似这样的攻击都是很常见的
14、,所以我们如果是在外网或者很有危险的网络上发布程序,一般都需要对这些问题进行修复。XSS代码攻击还可能会窃取或操纵客户会话和 Cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。建议措施清理用户输入,并过滤出 JavaScript 代码。我们建议您过滤下列字符:1 (尖括号)2 (引号)3 (单引号)4 %(百分比符号)5 ;(分号)6 ()(括号)7 &(& 符号)8 +(加号)为了避免上述的XSS代码攻击,解决办法是可以使用HttpUitility的HtmlEncode或者最好使用微软发布的AntiXSSLibrary进行处理,这个更安全。微软
15、反跨站脚本库(AntiXSSLibrary)是一种编码库,旨在帮助保护开发人员保护他们的基于Web的应用不被XSS攻击。编码方法使用场景示例HtmlEncode(String)不受信任的HTML代码。Click Here 不受信任的输入HtmlAttributeEncode(String)不受信任的HTML属性JavaScriptEncode(String)不受信任的输入在JavaScript中使用Untrusted inputUrlEncode(String)不受信任的URLCVisualBasicScriptEncode(String)不受信任的输入在VBScript中使用Untruste
16、d inputXmlEncode(String)不受信任的输入用于XML输出Untrusted inputXmlAttributeEncode(String)不 受信任的输入用作XML属性Some Text protected void Page_Load(object sender, EventArgs e) this.lblName.Text = Encoder.HtmlEncode(alert(OK);); 例如上面的内容,赋值给一个Lable控件,不会出现弹框的操作。但是,我们虽然显示的时候设置了转义,输入如果要限制它们怎么办呢,也是使用AntiXSSLibrary里面的HtmlSan
17、itizationLibrary类库Sanitizer.GetSafeHtmlFragment即可。 protected void btnPost_Click(object sender, EventArgs e) this.lblName.Text = Sanitizer.GetSafeHtmlFragment(txtName.Text); 这样对于特殊脚本的内容,会自动剔除过滤,而不会记录了,从而达到我们想要的目的。4、IIS短文件/文件夹漏洞出现和修复通过猜解,可能会得出一些重要的网页文件地址,如可能在/Pages/Security/下存在UserList.aspx和MenuList.a
18、spx文件。建议措施1)禁止url中使用“”或它的Unicode编码。2)关闭windows的8.3格式功能。修复可以参考下面的做法,或者找相关运维部门进行处理即可。5、系统敏感信息泄露出现和修复如果页面继承一般的page,而没有进行Session判断,那么可能会被攻击者获取到页面地址,进而获取到例如用户名等重要数据的。一般避免这种方式是对于一些需要登录才能访问到的页面,一定要进行Session判断,可能很容易给漏掉了。如我在Web框架里面,就是继承一个BasePage,BasePage 统一对页面进行一个登录判断。 public partial class UserList : BasePa
19、ge protected void Page_Load(object sender, EventArgs e) . / / BasePage 集成自权限基础抽象类FPage,其他页面则集成自BasePage / public class BasePage : FPage / / 默认构造函数 / public BasePage() this.IsFunctionControl = true;/默认页面启动权限认证 / / 检查用户是否登录 / private void CheckLogin() if (string.IsNullOrEmpty(Permission.Identity) string url = string.Format(0/Pages/CommonPage/Login.aspx?userRequest=1, Request.ApplicationPath.TrimEnd(/), HttpUtility.UrlEncode(Request.Url.ToString(); Response.Redirect(url); / / 覆盖HasFunction方法以使权限类判断是否具有某功能点的权限 / / / protected override bool HasFunction(string functi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年常州信息职业技术学院单招综合素质考试题库完整
- 切削加工过程中的材料去除机理考核试卷
- 信息化对物流形式的转型作用及试题及答案
- 2024年CPMM考试预测试题及答案
- 乳饮料的电解质平衡与运动饮料开发考核试卷
- 强化信息化物流师实务应用能力的探讨试题及答案
- 高级技师面试试题及答案
- 物流管理中的信息系统试题及答案
- 先行一步的2024国际物流师试题及答案
- 教师资格中职课程框架试题及答案
- 新概念二册课文电子版
- 数控加工国家级技能大师工作室的申报报告
- 化工生产物料和能量平衡课件
- DBJ50∕T-029-2019 地质灾害防治工程设计标准
- 五年级《红楼梦》读后感500字6篇
- 前期物业介入主要工作计划表
- (WORD版可修改)JGJ59-2023建筑施工安全检查标准
- 人教版初一七年级下册数学课时练《5.3.2 命题、定理、证明》试题试卷
- 少儿绘画之《跳跃的海豚》
- (高职)国际贸易理论与实务ppt课件(完整版)
- 跨境电商B2B实务全套ppt课件完整版教学教程-最新
评论
0/150
提交评论