10 个最常见的 Web 安全漏洞
OWASP 或开放 Web 安全项目是一个非营利性慈善组织,致力于提高软件和网络应用程序的安全性。
该组织根据来自各个安全组织的数据,发布了一份最大的网络安全漏洞列表。
网络安全漏洞的优先顺序取决于可利用性、可检测性和对软件的影响。
- 可利用性——需要什么才能利用安全漏洞?当攻击仅需要 Web 浏览器时可利用性最高,而高级编程和工具则最低。
- 可探测性 – 检测威胁有多容易?最高的是 URL、表单或错误消息上显示的信息,最低的是源代码。
- 撞击或损坏 –如果安全漏洞被暴露或被攻击,会造成多大的损失?最高的是整个系统崩溃,最低的是没有任何影响。
OWASP Top 10 的主要目的是让开发人员、设计师、管理人员、架构师和组织了解最重要的安全漏洞。
根据 OWASP Top 10,十大安全漏洞如下:
SQL注入
描述
注入是一种安全漏洞,允许攻击者更改后端 SQL 通过操作用户提供的数据来语句。
当用户输入作为命令或查询的一部分发送到解释器并诱骗解释器执行非预期的命令并访问未经授权的数据时,就会发生注入。
Web应用程序执行的SQL命令也可以公开后端数据库。
意义
- 攻击者可以将恶意内容注入到易受攻击的字段中。
- 可以从数据库中读取用户名、密码等敏感数据。
- 数据库数据可以被修改(插入/更新/删除)。
- 行政部 Opera可以在数据库上执行
易受攻击的对象
- 输入字段
- 与数据库交互的 URL。
例子:
- SQL注入 在登录页面上
在没有有效凭证的情况下登录应用程序。
有效的用户名可用,但密码不可用。
测试网址: http://demo.testfire.net/default.aspx
用户名:sjones
密码:1=1′ 或 pass123
SQL 查询创建并发送到解释器如下
从用户中选择*,其中用户名 = sjones 并且密码 = 1=1′ 或 pass123;
建议使用
- 将输入字段列入白名单
- 避免显示对攻击者有用的详细错误消息。
跨站点脚本
描述
跨站点脚本也简称为 XSS。
XSS 漏洞针对嵌入在页面中的脚本,这些脚本在客户端(即用户浏览器)而非服务器端执行。当应用程序获取不受信任的数据并在未经适当验证的情况下将其发送到 Web 浏览器时,可能会发生这些缺陷。
攻击者可以使用 XSS 在用户(即受害者浏览器)上执行恶意脚本。由于浏览器无法知道脚本是否可信,因此脚本将被执行,攻击者可以劫持会话 cookie、破坏网站或将用户重定向到不需要的恶意网站。
XSS 是一种允许攻击者在受害者的浏览器上执行脚本的攻击。
意义:
- 利用此安全漏洞,攻击者可以向应用程序注入脚本、窃取会话 cookie、破坏网站并在受害者的机器上运行恶意软件。
易受攻击的对象
- 输入字段
- 网址
例子
1. http://www.vulnerablesite.com/home?”<script>alert(“xss”)</script>
上述脚本在浏览器上运行时,如果网站存在 XSS 漏洞,则会显示一个消息框。
如果攻击者想要显示或存储会话 cookie,则可以进行更严重的攻击。
2. http://demo.testfire.net/search.aspx?txtSearch <iframe> http://google.com 宽度 = 500 高度 500>
上述脚本运行时,浏览器将加载一个指向 http://google.com.
在浏览器上运行恶意脚本会使攻击变得更加严重。
建议使用
- 白名单输入字段
- 输入输出编码
损坏的身份验证和会话管理
描述
网站通常为每个有效会话创建一个会话 cookie 和会话 ID,这些 cookie 包含用户名、密码等敏感数据。当会话因注销或浏览器突然关闭而结束时,这些 cookie 应该失效,即每个会话都应该有一个新的 cookie。
如果 Cookie 未失效,敏感数据将存在于系统中。例如,用户使用公共计算机(网吧),易受攻击网站的 Cookie 位于系统中,并暴露给攻击者。攻击者在一段时间后使用同一台公共计算机,敏感数据就会被泄露。
同样,使用公共计算机的用户不会注销,而是突然关闭浏览器。攻击者使用相同的系统,当浏览同一易受攻击的网站时,受害者的上一个会话将被打开。攻击者可以做任何他想做的事情,从窃取个人资料信息、信用卡信息等。
应进行检查以确定身份验证和会话管理的强度。应正确实施密钥、会话令牌、cookie,而不会泄露密码。
易受攻击的对象
- URL 上暴露的会话 ID 可能导致会话固定攻击。
- 注销和登录前后的会话 ID 相同。
- 会话超时未正确实现。
- 应用程序为每个新会话分配相同的会话 ID。
- 应用程序的经过验证的部分使用 SSL 保护,并且密码以散列或加密格式存储。
- 低权限用户可以重复使用该会话。
意义
- 利用此漏洞,攻击者可以劫持会话,获得对系统的未经授权的访问,从而允许泄露和修改未经授权的信息。
- 可以使用窃取的 cookie 或使用 XSS 的会话来劫持会话。
例子
- 航空公司预订应用程序支持 URL 重写,将会话 ID 放在 URL 中:http://Examples.com/sale/saleitems;jsessionid=2P0OC2oJM0DPXSNQPLME34SERTBG/dest=Maldives (出售前往马尔代夫的机票)网站经过身份验证的用户想让好友知道此次出售,于是发送了一封电子邮件。好友会收到会话 ID,并可利用该 ID 进行未经授权的修改或滥用已保存的信用卡信息。
- 应用程序存在XSS漏洞,攻击者可以利用该漏洞访问会话ID,并劫持会话。
- 应用程序超时设置不正确。用户使用公共计算机并关闭浏览器而不是注销,然后走开。攻击者一段时间后使用相同的浏览器,会话得到验证。
建议使用
- 所有身份验证和会话管理要求应根据 OWASP 应用程序安全验证标准进行定义。
- 切勿在 URL 或日志中暴露任何凭据。
- 还应尽力避免可用于窃取会话 ID 的 XSS 漏洞。
不安全的直接对象引用
描述
当开发人员以 URL 或 FORM 参数的形式公开对内部实现对象(如文件、目录或数据库密钥)的引用时,就会发生这种情况。攻击者可以使用此信息访问其他对象,并可以创建未来的攻击来访问未经授权的数据。
意义
- 利用此漏洞,攻击者可以访问未经授权的内部对象,修改数据或破坏应用程序。
易受攻击的对象
- 在 URL 中。
例子:
更改以下URL中的“userid”可以使攻击者查看其他用户的信息。
http://www.vulnerablesite.com/userid=123 修改为 http://www.vulnerablesite.com/userid=124
攻击者可以通过改变用户id值来查看他人的信息。
建议:
- 实施访问控制检查。
- 避免在 URL 中公开对象引用。
- 验证所有引用对象的授权。
跨站点请求伪造
描述
跨站请求伪造是来自跨站点的伪造请求。
CSRF 攻击是指恶意网站、电子邮件或程序导致用户浏览器在用户当前已经过身份验证的受信任站点上执行不必要的操作而发生的攻击。
CSRF 攻击会迫使已登录的受害者的浏览器向易受攻击的 Web 应用程序发送伪造的 HTTP 请求,其中包括受害者的会话 cookie 以及任何其他自动包含的身份验证信息。
当用户登录原网站后点击该URL,攻击者就会向受害者发送一个链接,从而窃取网站数据。
意义
- 利用此漏洞,攻击者可以更改用户配置文件信息、更改状态、以管理员的名义创建新用户等。
易受攻击的对象
- 用户个人资料页面
- 用户帐户表格
- 商业交易页面
例子
受害者使用有效凭证登录银行网站。他收到攻击者发来的邮件,上面写着“请点击此处为慈善事业捐款 1 美元。”
当受害者点击它时,就会创建一个有效请求,向特定帐户捐赠 1 美元。
http://www.vulnerablebank.com/transfer.do?account=cause&amount=1
攻击者捕获此请求并创建以下请求,并嵌入一个按钮“我支持事业”。
http://www.vulnerablebank.com/transfer.do?account=Attacker&amount=1000
由于会话已经过身份验证,且请求来自银行网站,服务器将向攻击者转入 1000 美元。
推荐
- 执行敏感操作时要求用户在场。
- 实施类似CA的机制PTCHA、重新认证和唯一请求令牌。
安全配置错误
描述
必须为应用程序、框架、应用服务器、Web 服务器、数据库服务器和平台定义和部署安全配置。如果这些配置正确,攻击者就可以未经授权访问敏感数据或功能。
有时,此类漏洞会导致整个系统被攻陷。保持软件更新也是很好的安全措施。
意义
- 利用此漏洞,攻击者可以枚举底层技术和应用服务器的版本信息、数据库信息,并获取有关应用程序的信息,以发起更多攻击。
易受攻击的对象
- 网址
- 表格栏位
- 输入字段
例子
- 应用服务器管理控制台会自动安装,不会删除。默认账户不会更改。攻击者可以使用默认密码登录并获得未经授权的访问权限。
- 您的服务器上未禁用目录列表。攻击者发现后,只需列出目录即可查找任何文件。
建议使用
- 强大的应用程序架构,提供组件之间良好的分离和安全性。
- 更改默认用户名和密码。
- 禁用目录列表并实施访问控制检查。
不安全的加密存储
描述
不安全的加密存储是一种常见的漏洞,当敏感数据没有被安全存储时就会存在这种漏洞。
用户凭证、个人资料信息、健康详情、信用卡信息等都属于网站上的敏感数据信息。
这些数据将存储在应用程序数据库中。如果未使用加密或哈希*等不当存储,这些数据将很容易受到攻击者的攻击。
(*散列是将字符串转换为固定长度的较短字符串或密钥。要解密字符串,必须提供用于形成密钥的算法)
意义
- 利用该漏洞,攻击者可以窃取、修改此类保护较弱的数据,以进行身份盗窃、信用卡欺诈或其他犯罪行为。
易受攻击的对象
- 应用程序数据库。
例子
在其中一个银行应用程序中,密码数据库使用未加盐的哈希值*来存储每个人的密码。SQL 注入漏洞允许攻击者检索密码文件。所有未加盐的哈希值都可以在短时间内被暴力破解,而加盐的密码则需要数千年的时间。
(*无盐哈希 - 盐是附加到原始数据的随机数据。盐在哈希之前附加到密码中)
建议使用
- 确保使用适当的强标准算法。不要创建自己的加密算法。仅使用经批准的公共算法,例如 AES、RSA 公钥加密和 SHA-256 等。
- 确保异地备份是加密的,但密钥是单独管理和备份的。
未能限制 URL 访问
描述
Web 应用程序在呈现受保护的链接和按钮之前会检查 URL 访问权限。每次访问这些页面时,应用程序都需要执行类似的访问控制检查。
在大多数应用程序中,特权页面、位置和资源不会呈现给特权用户。
攻击者通过智能猜测,可以访问特权页面,访问敏感页面,调用函数,查看机密信息。
意义
- 利用此漏洞,攻击者无需登录应用程序即可访问未经授权的URL并利用此漏洞。攻击者可以访问敏感页面,调用函数并查看机密信息。
易受攻击的对象:
- 网址
例子
- 攻击者注意到 URL 表示角色为“/user/getaccounts”。他将其修改为“/admin/getaccounts”。
- 攻击者可以将角色附加到 URL。
http://www.vulnerablsite.com 可以修改为 http://www.vulnerablesite.com/admin
建议使用
- 实施强有力的访问控制检查。
- 身份验证和授权策略应该基于角色。
- 限制访问不需要的 URL。
传输层保护不足
描述
处理用户(客户端)和服务器(应用程序)之间的信息交换。应用程序经常通过网络传输敏感信息,如身份验证详细信息、信用卡信息和会话令牌。
使用弱算法、使用过期或无效的证书或不使用 SSL 可能会导致通信暴露给不受信任的用户,这可能会危及 Web 应用程序或窃取敏感信息。
意义
- 利用此网络安全漏洞,攻击者可以嗅探合法用户的凭据并获得应用程序的访问权限。
- 可以窃取信用卡信息。
易受攻击的对象
- 通过网络发送的数据。
建议使用
- 启用安全 HTTP 并仅强制通过 HTTPS 进行凭证传输。
- 确保您的证书有效且未过期。
例子:
1. 不使用 SSL 的应用程序,攻击者只需监控网络流量并观察经过身份验证的受害者会话 cookie。攻击者可以窃取该 cookie 并执行中间人攻击。
未经验证的重定向和转发
描述
该网络应用程序使用一些方法将用户重定向并转发到其他页面以达到预期目的。
如果在重定向到其他页面时没有进行适当的验证,攻击者可以利用这一点,将受害者重定向到网络钓鱼或恶意软件网站,或使用转发访问未经授权的页面。
意义
- 攻击者可以向用户发送一个包含真实 URL 和编码的恶意 URL 的 URL。用户只需看到攻击者发送的 URL 的真实部分即可浏览它,并可能成为受害者。
例子
1.http://www.vulnerablesite.com/login.aspx?redirectURL=ownsite.com
修改为
http://www.vulnerablesite.com/login.aspx?redirectURL=evilsite.com
建议使用
- 只需避免在应用程序中使用重定向和转发即可。如果使用,请不要在计算目的地时使用用户参数。
- 如果无法避免目标参数,请确保提供的值有效且已获得用户的授权。