安全警告(Security)
这些安全警告表明你的 API 可能存在潜在的安全风险。
安全配置错误
安全配置错误可能由许多问题引起,包括:
- 过度宽松的跨域资源共享 (CORS)
- 不安全的默认配置
- 不完整或临时配置
- 打开云存储
- 配置错误的 HTTP header
- 不必要的 HTTP 方法
- 包含敏感信息的详细错误消息
CORS 配置错误
跨源资源共享 (CORS) 是一种浏览器机制,可以控制对位于给定域之外的资源的访问。它扩展并增加了同源策略 ( SOP ) 的灵活性。但是,如果网站的 CORS 策略没有正确配置和实施,它也可能会导致跨域攻击。CORS 无法防止跨域攻击,例如跨站点请求伪造 ( CSRF )。
具有凭据的白名单空源值
问题描述 | 可能的修复 |
---|
Access-Control-Allow-Credentials 被设置为true 并且Access-Control-Allow-Origin 被设置为null 。使用此配置,攻击者可以从受害者的用户代理加载的恶意页面向易受攻击的网站发送 AJAX 查询。即使具有未经身份验证的敏感内容的网站(例如,Intranet 网站)不允许经过身份验证的 AJAX 请求,这种错误配置仍然可以让攻击者访问它。 | 如果 Web 资源包含敏感信息,则需要在Access-Control-Allow-Origin header 中指定来源。在此 header 中指定需要此资源的可信网站,并支持最安全的协议。 |
列入白名单的 null 原始值
问题描述 | 可能的修复 |
---|
如果来源被列入白名单,攻击者可以使用各种技巧来生成带有 header 中null 值的跨域请求。这将满足白名单,导致跨域访问。null Origin | 如果 Web 资源包含敏感信息,则需要在Access-Control-Allow-Origin header 中指定来源。你应该仅在该 header 中指定需要此资源的受信任网站,并支持最安全的协议。 |
允许使用通配符值的所有来源
问题描述 | 可能的修复 |
---|
Access-Control-Allow-Origin 设置为通配符值 ( * )。这意味着资源可以被任何来源访问。 | 确保敏感数据不会以未经身份验证的方式提供(例如,通过使用 IP 地址白名单)。要使 Web 浏览器能够以更严格的方式执行同源策略 (SOP),请将Access-Control-Allow-Origin HTTP header 配置为一组受限的域,或者完全删除所有 CORS header。 |
未加密的通信
一些网站通过 HTTP 接受连接,然后重定向到 HTTPS。在这些情况下,访问者在被重定向之前可能会先与网站的非加密版本(例如www.example.com
或)进行通信。 这为中间操纵者攻击 example.com
创造了机会。可以利用重定向将访问者引导至恶意站点,而不是原始站点的安全版本。
问题描述 | 可能的修复 |
---|
HTTPStrict-Transport-Security header 丢失或配置不正确。此 header 通知浏览器使用 HTTPS 访问站点,并且将来使用 HTTP 访问它的任何尝试都将自动转换为 HTTPS。 | 添加 Strict-Transport-Security header 以便浏览器记住使用 HTTPS 访问站点,并max-age 在 header 中定义属性。 |
缓存中毒
缓存中毒攻击 利用 Cache-Control
行为来向用户提供有害的响应。如果恶意构造的响应被缓存,无论是通过多个用户使用的网络缓存还是在单个用户的浏览器缓存中,损害都会被放大。
问题描述 | 可能的修复 |
---|
标Cache-Control 头丢失或配置不正确,这意味着浏览器和代理可以缓存内容。这可能是 CSS、JavaScript 或图像文件等静态资产的预期行为,但你需要检查资产以确保不会缓存敏感内容。 | 对于安全内容,请确保Cache-Control header 设置为no-cache 、no-store 和must-revalidate 。如果需要缓存资产,请考虑设置指令public 、max-age 和immutable 。 |
跨站请求伪造
Cookie 不会针对典型的跨站点子请求发送(例如,将图像或框架加载到第三方站点)。但是,当用户导航到原始站点时(换句话说,当他们点击链接时),cookies 就会被发送。
SameSite
具有不正确属性的敏感 cookie
问题描述 | 可能的修复 |
---|
SameSite 设置为 的 cookieNone 未使用该Secure 属性。这意味着攻击者可以通过在客户端模拟 XSS 攻击来访问 cookie。 | 要防止 cookie 被SameSite=None XSS 攻击访问,请使用该Secure 属性。 |
损坏的用户身份验证
如果身份验证机制实施不当,攻击者可能会破坏身份验证令牌或利用实施缺陷暂时或永久地采用其他用户的身份。当系统识别用户的能力受到损害时,API 的整体安全性就会受到损害。
通过不安全协议暴露身份验证数据
问题描述 | 可能的修复 |
---|
身份验证凭据可能会通过不安全的协议泄露。攻击者可以拦截请求并访问这些凭据。 | 使用该HTTPS 协议对网络上传输的流量进行加密。 |
无认证
问题描述 | 可能的修复 |
---|
没有使用身份验证方案来验证用户的身份。攻击者可以滥用 API 来利用系统。 | 使用身份验证策略(如 OAuth、OpenID Connect、API 密钥或 HTTP)来验证用户的身份。 |
过多的数据暴露
有时,开发人员会在不考虑其敏感性的情况下公开所有对象属性。由于他们期待 API 的通用实现,因此他们依赖客户端在显示数据之前执行数据过滤。
信息公开
有时,API 可能会无意中泄露敏感信息,例如产生未处理异常的文件的位置。此信息可用于对 Web 应用程序发起更多攻击。
不良行为者可能会向 API 提供无效输入,以获取有关用于为 API 提供支持的底层系统的更多信息。如果无效输入没有得到正确处理,API 将返回错误的堆栈跟踪。堆栈跟踪包括错误来源、服务中使用的包、服务器的目录路径以及有关用于构建 API 的技术的信息。
堆栈跟踪泄漏
问题描述 | 可能的修复 |
---|
堆栈跟踪在响应正文中公开。这可能会揭示应用程序的结构及其依赖的任何内部组件。它还可能会泄露应用程序使用的服务器端文件名和 SQL 代码等信息,这意味着攻击者可以微调以后的注入攻击。 | 向用户发送显示较少信息的更通用的错误消息。要么完全抑制堆栈跟踪,要么专门将其记录到服务器。 |
响应体(response body)中的敏感数据暴露
问题描述 | 可能的修复 |
---|
响应正文看起来包含敏感信息。攻击者可以使用此信息窃取其他用户的身份或进行欺诈性金融交易。这也违反了支付卡行业 (PCI) 安全标准和大多数组织合规性政策。 | 从响应中删除敏感信息。 |
私有 IP 暴露
问题描述 | 可能的修复 |
---|
HTTP 响应体(response body)中有私有 IP 地址(如10.x.x.x , 172.x.x.x , )。192.168.x.x 攻击者可以使用此信息来瞄准内部系统。 | 从 HTTP 响应正文中删除私有 IP 地址。对于注释,请使用 JSP、ASP 或 PHP 注释,而不是 HTML 或 JavaScript 注释,客户端浏览器可以看到这些注释。 |
URL 中的信息暴露
如果信息在 URL 中公开,攻击者可以使用它来访问敏感信息,如用户名、密码和 API 令牌。
URL 查询参数 key 中的信息暴露
问题描述 | 可能的修复 |
---|
此请求的 URL 中似乎包含敏感信息。攻击者可以利用此敏感信息。 | 避免在 URL 中使用敏感信息(如 API 密钥、访问令牌、身份验证凭据、用户名和密码),因为它们可以在 Web 服务器日志中捕获。使用正文和标题获取此信息。 |
URL 中的敏感数据暴露
问题描述 | 可能的修复 |
---|
此请求的 URL 中似乎包含敏感信息。攻击者可以利用此敏感信息。 | 避免在 URL 中使用敏感信息(如 API 密钥、访问令牌、身份验证凭据、用户名和密码),因为它们可以在 Web 服务器日志中捕获。使用正文和标题获取此信息。 |
当不受信任的数据作为命令或查询的一部分发送到解释器时,可能会出现 SQL、NoSQL 和 命令注入等注入缺陷。 攻击者的恶意数据可以诱使解释器执行意外命令或在未经适当授权的情况下访问数据。
SQL 注入
SQL 注入是一种常见的攻击媒介,它使用恶意 SQL 代码进行数据库操作,以访问不打算显示的信息。此信息可能包括敏感信息,如公司数据、用户列表或私人客户详细信息。
问题描述 | 可能的修复 |
---|
SQL 错误堆栈跟踪在响应正文中公开。这意味着攻击者可能会干扰应用程序对其数据库进行的查询。攻击者还可以查看他们通常无法检索的数据。 | 通过在查询中使用参数化查询(也称为准备语句)而不是字符串连接,可以防止 SQL 注入。 |
跨站脚本
跨站点脚本 ( XSS ) 攻击是一种注入,其中将恶意脚本注入受信任的网站。当攻击者使用 Web 应用程序向其他用户发送恶意代码(通常是浏览器端脚本)时,就会发生 XSS 攻击。
HttpOnly
没有标志的敏感 cookie
该HttpOnly
标志包含在 Set-Cookie HTTP 响应 header 中。在生成 cookie 时使用该HttpOnly
标志有助于降低客户端脚本访问受保护 cookie 的风险。
问题描述 | 可能的修复 |
---|
设置的 cookie 没有HttpOnly 标志,这意味着 cookie 可以通过 JavaScript 访问。如果攻击者在此页面上运行恶意脚本,则他们可以访问 cookie 并将其发送到另一个站点。如果这是会话 cookie,则可能会发生会话劫持。 | HttpOnly 为所有 cookie 设置标志。 |
没有安全标志的敏感 cookie
浏览器不会通过未加密的 HTTP 请求发送带有 Secure
属性集 的 cookie 。
通过设置该Secure
属性,浏览器将阻止通过未加密的通道传输 cookie。
问题描述 | 可能的修复 |
---|
设置了一个没有Secure 标志的 cookie。这意味着攻击者可以使用未加密的连接访问 cookie。 | 如果 cookie 中有敏感信息或 cookie 是会话令牌,请确保使用加密通道传递它并Secure 设置标志。 |
点击劫持
点击劫持 是指攻击者使用透明层诱使用户选择另一个页面上的按钮或链接,而用户本想选择顶级页面。点击劫持也称为“UI 补救攻击”。这使攻击者能够劫持对一个页面的点击,并将它们路由到另一个应用程序、域或两者拥有的另一个页面。
CSP 政策中的错误框架祖先指令
问题描述 | 可能的修复 |
---|
HTTP Content-Security-Policy (CSP)frame-ancestors 指令设置为* . 这意味着所有网站都可以在 iframe 中加载其他网站。这可能会使网站容易受到点击劫持。 | 指定特定来源以将可信来源列入白名单,而不是允许 Content-Security-Policy . |
MIME 嗅探
问题描述 | 可能的修复 |
---|
标X-Content-Type-Options 头配置不正确。这意味着攻击者可以上传伪装成 Web 服务器接受的不同文件类型(例如 JPEG 或 zip 文件)的 HTML 文件。浏览器将上传的文件渲染成 HTML 文件,攻击者就可以进行 XSS 攻击。 | 要在 Internet Explorer 和 Chrome 中关闭 MIME 嗅探,请使用X-Content-Type-Options: nosniff HTTP header。这需要浏览器使用服务器发送的 MIME 类型。由于浏览器将不再分析该文件,网站所有者必须确保他们发送的是正确的 MIME 信息。 |