10个最常见的Web安全漏洞
OWASP 或开放式 Web 应用程序安全项目是一个非营利性慈善组织,致力于提高软件和 Web 应用程序的安全性。
该组织根据多家安全组织的数据发布了 Web 应用程序安全漏洞列表。
Web 应用程序安全漏洞的优先级取决于其可利用性、可检测性和对软件的影响。
- 可利用性 – 利用安全漏洞需要什么?当攻击只需要 Web 浏览器时,可利用性最高;当攻击需要高级编程和工具时,可利用性最低。
- 可检测性 – 威胁有多容易被检测到?信息显示在 URL、表单或错误消息中时可检测性最高,显示在源代码中时可检测性最低。
- 影响或损害 – 如果安全漏洞暴露或受到攻击,会造成多大损害?系统完全崩溃时影响最大,什么都不做时影响最小。
OWASP Top 10 的主要目的是向开发人员、设计人员、经理、架构师和组织传达最重要的安全漏洞。
根据 OWASP Top 10,排名前 10 的安全漏洞是:
SQL 注入
描述
注入是一种安全漏洞,它允许攻击者通过操纵用户提供的输入数据来修改后端 SQL 语句。
当用户输入作为命令或查询的一部分发送给解释器,并且欺骗解释器执行非预期的命令并授予对未经授权数据的访问权限时,就会发生注入。
SQL 命令可以被 Web 应用程序执行,也可以暴露后端数据库。
影响
- 攻击者可以将恶意内容注入到易受攻击的字段中。
- 可以从数据库中读取敏感数据,例如用户名、密码等。
- 可以修改数据库数据(插入/更新/删除)。
- 可以在数据库上执行管理操作。
易受攻击的对象
- 输入字段
- 与数据库交互的 URL。
示例
- SQL 注入在登录页面
在没有有效凭证的情况下登录应用程序。
用户名可用,密码不可用。
测试 URL:http://demo.testfire.net/default.aspx
用户名: sjones
密码: 1=1′ or pass123
创建的 SQL 查询并发送到解释器如下:
SELECT * FROM Users WHERE User_Name = sjones AND Password = 1=1′ or pass123;
建议
- 白名单输入字段
- 避免显示对攻击者有用的详细错误消息。
跨站脚本
描述
跨站脚本也简称为 XSS。
XSS 漏洞针对嵌入在页面中的脚本,这些脚本在客户端(即用户浏览器)而不是服务器端执行。当应用程序接收到不受信任的数据并将其发送到 Web 浏览器而未经验证时,就会发生这些漏洞。
攻击者可以使用 XSS 在用户(在本例中为受害者浏览器)上执行恶意脚本。由于浏览器无法知道脚本是否受信任,因此脚本将被执行,攻击者可以劫持会话 cookie、篡改网站或将用户重定向到不受欢迎的恶意网站。
XSS 是一种允许攻击者在受害者浏览器上执行脚本的攻击。
影响
- 利用此安全漏洞,攻击者可以将脚本注入应用程序,窃取会话 cookie,篡改网站,并在受害者的计算机上运行恶意软件。
易受攻击的对象
- 输入字段
- URL
示例
1. http://www.vulnerablesite.com/home?”<script>alert(“xss”)</script>
如果网站易受 XSS 攻击,上述脚本在浏览器中运行时会显示一个消息框。
如果攻击者想要显示或存储会话 cookie,则可以进行更严重的攻击。
2. http://demo.testfire.net/search.aspx?txtSearch <iframe> <src = http://google.com width = 500 height 500></iframe>
当运行上述脚本时,浏览器将加载一个指向 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,可以用来进行未经授权的修改或滥用保存的信用卡详细信息。
- 应用程序易受 XSS 攻击,攻击者可以访问会话 ID 并将其用于劫持会话。
- 应用程序超时未正确设置。用户使用公共计算机,在注销前关闭浏览器并离开。攻击者稍后使用同一浏览器,会话已通过身份验证。
建议
- 所有身份验证和会话管理要求应根据 OWASP 应用程序安全验证标准进行定义。
- 切勿在 URL 或日志中暴露任何凭据。
- 还应尽最大努力避免 XSS 漏洞,该漏洞可用于窃取会话 ID。
不安全的直接对象引用
描述
当开发人员将对内部实现对象的引用(例如文件、目录或数据库键)暴露在 URL 或表单参数中时,就会发生这种情况。攻击者可以利用此信息访问其他对象,并创建未来的攻击以访问未经授权的数据。
影响
- 利用此漏洞,攻击者可以访问未经授权的内部对象,修改数据或破坏应用程序。
易受攻击的对象
- 在 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 美元。
建议
- 强制用户在执行敏感操作时在场。
- 实施 CAPTCHA、重新身份验证和唯一请求令牌等机制。
安全配置错误
描述
必须为应用程序、框架、应用程序服务器、Web 服务器、数据库服务器和平台定义和部署安全配置。如果这些配置正确,攻击者就可以未经授权地访问敏感数据或功能。
有时此类漏洞会导致完全的系统妥协。保持软件更新也是良好的安全实践。
影响
- 利用此漏洞,攻击者可以枚举底层技术和应用程序服务器版本信息、数据库信息,并获取有关应用程序的信息,以便发动更多攻击。
易受攻击的对象
- URL
- 表单字段
- 输入字段
示例
- 应用程序服务器管理员控制台自动安装且未移除。默认帐户未更改。攻击者可以使用默认密码登录,并获得未经授权的访问。
- 目录列表未在服务器上禁用。攻击者可以发现并简单地列出目录以查找任何文件。
建议
- 提供组件之间良好分离和安全性的强大应用程序架构。
- 更改默认用户名和密码。
- 禁用目录列表并实施访问控制检查。
不安全的加密存储
描述
不安全的加密存储是一种常见的漏洞,当敏感数据未安全存储时存在。
用户凭据、个人资料信息、健康详细信息、信用卡信息等属于网站上的敏感数据信息。
这些数据将存储在应用程序数据库中。当这些数据因未使用加密或哈希*而存储不当时,它将容易受到攻击者攻击。
(*哈希是将字符串字符转换为较短的固定长度字符串或密钥。要解密字符串,应提供用于形成密钥的算法)
影响
- 通过利用此漏洞,攻击者可以窃取、修改这些弱保护的数据,以进行身份盗窃、信用卡欺诈或其他犯罪。
易受攻击的对象
- 应用程序数据库。
示例
在一家银行应用程序中,密码数据库使用未加盐的哈希*来存储所有人的密码。SQL 注入漏洞允许攻击者检索密码文件。所有未加盐的哈希都可以瞬间被暴力破解,而加盐的密码则需要数千年。
(*未加盐的哈希 – 盐是附加到原始数据的随机数据。盐在哈希之前附加到密码)
建议
- 确保使用适当的强标准算法。不要创建自己的加密算法。仅使用批准的公共算法,例如 AES、RSA 公钥密码学和 SHA-256 等。
- 确保异地备份已加密,但密钥已单独管理和备份。
未能限制 URL 访问
描述
Web 应用程序在呈现受保护的链接和按钮之前会检查 URL 访问权限。应用程序需要在每次访问这些页面时执行类似的访问控制检查。
在大多数应用程序中,特权页面、位置和资源不会呈现给特权用户。
通过巧妙的猜测,攻击者可以访问特权页面。攻击者可以访问敏感页面,调用函数并查看机密信息。
影响
- 利用此漏洞,攻击者可以在不登录应用程序的情况下访问未经授权的 URL,并利用该漏洞。攻击者可以访问敏感页面,调用函数并查看机密信息。
易受攻击的对象
- URL
示例
- 攻击者注意到 URL 指示角色为“/user/getaccounts”。他修改为“/admin/getaccounts”。
- 攻击者可以在 URL 中附加角色。
http://www.vulnerablsite.com 可以修改为 http://www.vulnerablesite.com/admin
建议
- 实施强大的访问控制检查。
- 身份验证和授权策略应基于角色的。
- 限制对不需要的 URL 的访问。
传输层保护不足
描述
涉及用户(客户端)和服务器(应用程序)之间的信息交换。应用程序经常通过网络传输敏感信息,如身份验证详细信息、信用卡信息和会话令牌。
通过使用弱算法或使用过期的或无效的证书,或不使用 SSL,可能会允许通信暴露给不受信任的用户,这可能会危及 Web 应用程序和/或窃取敏感信息。
影响
- 利用此 Web 安全漏洞,攻击者可以嗅探合法用户的凭据并获得对应用程序的访问权限。
- 可以窃取信用卡信息。
易受攻击的对象
- 通过网络发送的数据。
建议
- 启用安全 HTTP 并强制仅通过 HTTPS 进行凭据传输。
- 确保您的证书有效且未过期。
示例
1. 应用程序未使用 SSL,攻击者将简单地监控网络流量并观察到已验证的受害者会话 cookie。攻击者可以窃取该 cookie 并执行中间人攻击。
未经验证的重定向和转发
描述
Web 应用程序使用一些方法将用户重定向和转发到其他页面以达到预期目的。
如果重定向到其他页面时没有适当的验证,攻击者可以利用这一点,将受害者重定向到网络钓鱼或恶意软件站点,或使用转发访问未经授权的页面。
影响
- 攻击者可以向用户发送一个 URL,该 URL 包含一个真实的 URL,后面附加了编码的恶意 URL。用户仅通过查看攻击者发送 URL 的真实部分就可以浏览它,并可能成为受害者。
示例
1.http://www.vulnerablesite.com/login.aspx?redirectURL=ownsite.com
修改为
http://www.vulnerablesite.com/login.aspx?redirectURL=evilsite.com
建议
- 简单地避免在应用程序中使用重定向和转发。如果使用,请勿在计算目标时使用用户参数。
- 如果无法避免目标参数,请确保提供的值有效且已获得用户授权。