A1 - Injection 注入
介绍:
简单来说注入往往是程序缺少对输入进行安全性检查所引起的,攻击者把一些包含指令的数据发送给解释器,解释器会把收到的指令转换成指令执行。
常见的注入包括SQL注入、OS Shell、LDAP、Xpath、Hibernate等等,其中SQL注入尤为常见。这种攻击造成的后果往往很大,一般整个数据库的信息都能被读取或篡改,通过SQL注入攻击者甚至能获得更多的包括管理员的权限。
危害:
注入可能导致数据丢失或数据破坏、缺乏可审计性 或是拒绝服务。注入漏洞有时甚至能导致完全接管主机。
SQL注入防范:
1.使用参数化语句或者词法分析
$db = new mysqli("localhost", "user", "pass", "database");
$stmt = $mysqli -> prepare("SELECT priv FROM testUsers WHERE username=? AND password=?");
$stmt -> bind_param("ss", $user, $pass);
$stmt -> execute();
2.对输入的特殊字符进行转义处理
$get=mysql_real_escape_string('提交的参数');
?>
A2 - Broken authentication and Session Management 失效的身份认证和会话管理
介绍:
与认证和会话管理相关的应用程序往往得不到正确的实施,这就导致攻击者破坏密码、秘钥、会话令牌、或利用实施漏洞冒充其他用户身份
危害:
这种漏洞可能导致部分甚至全部账户遭受攻击。一旦攻击成功,攻击者可以执行合法用户的全部操作。因此特权账户胡造成更大的破坏。
案例:
1.Web应用程序支持URL重写,把会话ID写在URL里
修改订单的会话ID可用其他人的会话和信用卡付账
2.应用程序超时设置不当。
当使用公共计算机后为注销账户直接关闭浏览器后。攻击者能使用相同的浏览器通过身份认证
3.内部或者外部攻击者进入数据库后,密码没有进行加密,所有用户密码都会被攻击者获得
防范:
使用内置的会话管理功能
通过认证的问候:
使用单一的入口点
确保在一开始登录SSL保护的页面
A3 – Cross-Site Scripting (XSS) 跨站
介绍:
当应用程序发送给浏览器的页面中包含用户提交的数据,但没有经过适当验证或转义时,就会导致跨站脚本漏洞
危害:
攻击者能够在受害者浏览器中执行脚本,以劫持用户会话(窃取Cookie)、迫害网站、插入恶意内容(组建僵尸网络)、重定向用户、使用恶意软件劫持用户浏览器等。
简单来讲:就是可执行任意JavaScript能实现的功能
案例:
防范:
1.验证输入:控制搜索框、登录框等的输入长度
2.转义输入输出:
$get=mysql_real_escape_string('提交的参数');
?>
A4 – Insecure Direct Object References 不安全的直接对象引用
介绍:
指向一个已经授权的用户,通过更改访问时的一个参数,从而访问到原本其并没有得到授权的对象。
危害:
这种漏洞能够损害参数所引用的所有数据。除非名字空间很稀疏,否则攻击者很容易访问该类型的所有数据。
案例:
step1:攻击者发现他自己的参数是6065,即?id=6065
step2:他可以直接更改参数为6066,即?id=6066
step3:这样他就可以直接看到6066的账户信息
防范:
1.使用基于用户或会话的间接对象访问,这样能防止攻击者直接攻击未授权资源
2.访问检查:对任何来自不信任源所使用的所有直接对象引用都进行访问控制
3.避免在URl或网页中直接引用内部文件名或数据库关键字
4.可使用自定义的映射名称来取代直接对象名
5.锁定网站服务器上的所有目录和文件夹,设置访问权限
6.验证用户输入的URL请求,拒绝包含./或../的请求。
A5 – Security Misconfiguration 安全错误配置
介绍:
安全错误配置可以发生在一个应用程堆栈的任何层面,包括平台、Web服务器、应用服务器、数据库、架构和自定义代码。攻击者通过访问默认账户、未使用的网页、未安装补丁的漏洞、未被保护的文件和目录等,以获得对系统未授权的访问。
危害:
系统可能在未知情况下被完全攻破,用户数据可能随着时间推移而全部被盗或者篡改。甚至有时,会导致整个系统被破坏。
案例:
1.Web服务器或者Web应用后台默认密码未更改,攻击者可以通过默认密码进入系统
2.目录列表在Web服务器上未被禁用,攻击者可以列出目录获取目录结构甚至自定义代码
3.应用服务器允许堆栈跟踪返回给用户,这样就暴露了网站的潜在漏洞,攻击者热衷收集错误消息里提供的额外信息。
防范:
1.更改默认密码,敏感目录
2.及时获取Web应用程序的更新补丁
3.使用安全性可靠的Web应用框架
4.实施漏洞扫描和安全审计、提前预防安全隐患
5.使用Web应用提供的安全配置
A6 – Sensitive Data Exposure 敏感数据暴露
介绍:
许多Web应用没有正确保护敏感数据,如信用卡、身份验证凭据等。攻击者可能把这些数据卖给骗子进行诈骗犯罪等。
1.个人信息:姓名、身份证ID、电话号码、银行账户、驾驶证号码、社保卡号、护照号码等
2.网站登录的用户名、密码、SSL证书、会话ID、加密使用的密钥、
3.Web服务器的OS类型、版本信息、Web容器信息、数据库类型版本、使用的开源软件版本
危害:
数据泄露导致犯罪份子有可乘之机
案例:
防范:
对敏感数据必须进行加密存储、使用安全的加密算法
A7 – Missing Function Level Access Control 缺失的功能级别的访问控制
介绍:
又叫做限制URL访问失败。这个漏洞事实上也是与认证相关的,这个漏洞已经对URL的访问做了限制,但是却没有生效。
常见的错误是,我们在用户认证后只显示给用户认证过的页面和菜单选项,而实际上这些仅仅是表示层的访问控制而不能真正生效,攻击者能够很容易的伪造请求直接访问未授权的页面
危害:
攻击者能够很容易的把网址改成享有特权的页面,这样就可以使用匿名或者普通用户访问私人界面,从而提升未授权功能和相关数据信息
案例:
1.通过验证的非管理员用户可以访问管理界面
2.有些网页有action=参数,不同的操作需要不同的角色,如果没有对角色进行检查,这也是
防范:
1.检查管理权限的过程并确保能够容易进行升级和审计
2.对每个功能的访问,都需要明确的角色授权
3.检查每个功能分配的权限合理有效
A8 – Cross-Site Request Forgery (CSRF) 跨站请求伪造(CSRF)
介绍:
由于浏览器自动发送会话Cookie等认证凭证,导致攻击者能够创建恶意的Web页面来产生伪造请求,这些伪造请求很难和合法的请求区分开。
尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站
危害:
攻击者能够让受害用户修改任何允许修改的数据,并执行任何用户允许的操作。修改密码、登录注销等
案例:
123456:李白的用户ID
741741:杜甫的用户ID
941941:白居易的用户ID
李白正在某银行网站给白居易转账,则有以下URL
http://www.abc.com/zhuanzhang?=amount=500&fromAccount=123456&toAccount=941941
杜甫构造一个请求,把李白账户中的钱转到自己账户中(并且修改了金额为5000)
toAccount=741741" width="0" height="0">
杜甫在他控制的多个网站中嵌入这段代码,李白只要登录了银行网站,又恰巧访问了杜甫控制的网站,李白的5000块钱就会转给杜甫
防范:
1.给每个HTTP请求添加一个不可预测的令牌,并保证该令牌对每个合法用户来说是唯一的
将独有的令牌包含在隐藏字段中,通过HTTP请求发送,避免在URL中暴露出来
2.要求用户重新认证或判断他是一个真实的用户
A9 – Using Components with Known Vulnerabilities 使用已知漏洞的组件
介绍:
中间件如 IIS、Apache、Tomcat等Web容器;WordPress、discuz、Struts等开源框架
若是存在已知的漏洞但是未更新版本或者打补丁,就会被攻击者利用已知漏洞攻破系统
危害:
攻击者可利用已知版本漏洞轻松进入系统获取权限
案例:
防范:
识别正在用的组件版本,及时获取新版本和安装补丁
A10 – Unvalidated Redirects and Forwards 未验证的用户重定向和转发
介绍:
在Web应用中重定向是极为普遍的,并且重定向目的都是带有用户输入参数的目的URL,而如果这些重定向未被验证,那么攻击者就可以引导用户访问攻击者想让他们访问的站点
同样,转发也是极为普遍的,本质上转发是在同一个应用中对一个新页面发送请求,并且有时是用参数来定义目标页面的。同样,如果参数未被验证,那么攻击者就可以利用其绕过验证或是授权检查
危害:
攻击者可以通过重定向实施钓鱼攻击,木马攻击(挂马网站)、不公平的黑帽SEO,通过转发可以绕过访问控制
案例:
防范:
避免使用重定向和转发
使用session传值