OWASP TOP 10
TOP1-注入
当不受信任的数据作为命令或查询的一部分发送到解释器时,会发生注入漏洞,例如SQL,NoSQL,OS,LDAP注入(轻量目录访问协议),xpath(XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言),HQL注入等。
危害如下:
注入可以导致数据丢失或被破坏,缺乏可审计性或拒绝服务。注入漏洞有时甚至可导致完全接管主机。
如何防范:
1.使用安全的API,避免使用解释器
2.对输入的特殊的字符进行ESCAPE转义处理。例如:LIKE ‘%xxx%’ ESCAPE ‘xxx’
使用ESCAPE关键字定义了转义字符“xxx”,告诉DBMS将搜索字符串“%xxx%”中的第二个百分符(%)作为实际值,而不是通配符
3.使用白名单来规范化的输入验证方法
TOP2-失效的身份认证和会话管理(破损认证)
与认证和会话管理相关的应用程序功能往往得不到正确实施,导致了攻击者可以破坏密码,密钥,会话令牌或实施漏洞冒充其他用户身份。
危害如下:
这些漏洞可能导致部分甚至全部账户遭受攻击,一旦攻击成功,攻击者就能执行合法的任何操作
如何防范:
1.使用内置的会话管理功能
2.通过认证的问候
3.使用单一的入口点
4.确保在一开始登录SSL保护的网页
TOP3-XSS(跨站脚本攻击)
跨站脚本是经常出现在web应用中的安全漏洞,其允许恶意web用户将代码植入到提供给其他用户使用的页面中,这些代码包括HTML代码和客户端脚本。黑客界公识是xss是新型的“缓冲区溢出攻击”
危害如下:
攻击者在受害者浏览器中执行脚本以劫持用户会话,插入恶意内容,重定向用户,使用恶意软件劫持用户浏览器等。
种类:
存储型,反射型,DOM型
如何防范:
1.验证输入
2.编码输出(用来确保输入的字符被视为数据,而不是作为html被浏览器所解析)
TOP4-不安全的对象直接引用
一个已经授权的用户通过更改访问时的一个参数,从而访问到原本其并没有得到授权的对象。
危害如下:
这种漏洞可以损坏参数所引用的所有数据
如何防范:
1.使用基于用户或会话的间接对象访问,这样可防止攻击者直接攻击为授权资源
2.访问检查:对任何来自不受信源所使用的所有对象进行访问控制检查
3.避免在url或网页中直接引用内部文件名或数据库关键字
4.验证用户输入和url请求,拒绝包含./ …/的请求
TOP5-跨站请求伪造(CSRF)
跨站请求伪造,攻击者通过用户的浏览器注入额外的网络请求,破坏网络会话的完整性。浏览器的安全策略是允许当前界面发送到任何地址,因此也意味着如果用户浏览了自己无法控制的资源时,攻击者可以通过控制页面的内容来控制浏览器,发送其精心构造的请求,这些精心构造的请求很难和合法的请求区分开。
危害如下:
攻击者可以让受害者用户修改任何允许修改的数据,执行任何用户允许的操作,例如修改密码,登录注销等。
如何防范:
1.给每个HTTP请求添加一个不可预测的令牌,并保证该令牌对每个用户会话来说是唯一的。
最好的办法就是将独有的令牌包含在隐藏字段中,通过HTTP请求发送,避免在URL中暴露出来。
2.要求用户重新认证或判断他们是一个真实的用户。
TOP6-安全配置错误
安全配置错误可以发生在一个应用程序堆栈的任何层面,包括平台,web服务器,应用服务器,数据库,架构和自定义的代码。攻击者通过访问默认账户,未使用的网页,未安装的补丁的漏洞,未被保护的文件和目录等,以获得对系统为授权的访问。
危害如下:
系统可能在未知的情况下被完全攻破,用户数据可能随着时间被全部盗走或篡改。甚至导致整个系统被完全破坏
如何防范:
1.自动化安装部署
2.及时了解并部署每个环节的软件更新和补丁信息
3.实施漏洞扫描和安全审计
TOP7-限制URL访问失败(缺少功能级访问控制)
这个漏洞也是与认证相关的,这种漏洞具体是指在系统已经对URL的访问做了限制的情况下,但这种限制并没有生效。常见的例子是系统没有对用户进行角色的检查,以及用户通过修改URL的action并指向未被授权页面就能访问该页面同样是个漏洞
危害如下:
攻击者很容易就能把网址改成享有特权的网页,这样就可以使用匿名或普通用户访问未授保护的私人页面,从而提升未授权功能和相关数据信息
如何防范:
1.检查管理权限的过程并确保能够容易进行升级和审计
2.默认缺省情况下,应该拒绝所有访问的执行权限。对于每个功能得访问,需要明确的角色授权
3.检查每个功能分配的权限合理有效
TOP8-未验证的重定向和转发
在Web应用中重定向是极为普通的,并且通常重定向所引发的目的是带有用户输入参数的目的URL,而如果这些重定向未被验证,那么攻击者就可以引导用户访问他们想要用户访问的站点。
同样,转发也是极为普遍的,本质上转发是在同一个应用中对一个新页面发送请求,并且有时是用参数来定义目标页面的。同样,如果参数未被验证,那么攻击者就可以利用其来绕过认证或是授权检查
危害如下:
攻击者通过重定向可以试图安装恶意软件或诱使受害人泄露密码等铭感信息,通过转发可以绕过访问限制
如何防范:
1.避免使用重定向和转发
2.如果使用了,不要在确定目标时涉及到用户参数
3.如果无法避免使用用户参数,则应确保目标参数值对于当前用户是有效的并已授权
如果是需要登录的,可以从session当中获取登录信息,然后判断
TOP9-应用已知漏洞的组件
组件(例如库,框架和其他软件模块)以与应用程序相同的权限运行。如果利用易受攻击的组件,这种攻击可能会导致严重的数据丢失或服务器接管。使用具有已知漏洞的组件的应用程序和API可能会破坏应用程序防御并实现各种攻击和破坏。
如何防范:
1.识别正在使用的组件和版本,包括所有的依赖
2.更新组件或引用的库文件到最新
3.建立安全策略来管理组件的使用
TOP10-敏感信息暴露
由于代码编写不严谨或应用固有的功能,造成网站服务器信息被非法获取,属于一种低危漏洞。
如何防范:
在编写代码的时候注意将隐私信息部分代码不对外开放。