security - 反射 XSS(跨站点脚本)攻击是否会发生在提供非 HTML 响应的 REST API 上
问题描述
反射 XSS(跨站点脚本)攻击是否会发生在 REST API 上,该 API 接收 XML 请求有效负载,提供 XML 响应。请求或响应中没有 html 内容。
我已经阅读了很多关于 XSS 的文档,现在我认为这不适用于不提供 html 内容的 REST API,这种理解是否正确?然而,我们正在对收到的请求进行验证,以检查输入中是否有任何类型的标签 (<>),以及其他一些业务级别的验证。
关于我们服务的几点,
- 我们的 REST API 不接收或响应 HTML 数据。
- 我们没有直接从最终用户那里获得任何输入或请求(攻击者的可能性主要来自恶意最终用户)
- 我们不会将 XML 响应直接发送给 XSS 可能性最高的最终用户/HTML 呈现系统(浏览器)。
- 我们接受请求并将响应传递给我们的企业和受信任的(合作伙伴)内部的服务。
- 我们发送的 XML 响应仅用于读取嵌入在非 html 环境中的值(这些是读取我们响应的受信任服务)。
在这种情况下发生 XSS 的风险有多大?
(这个查询背后的原因是我们收到了一个 checkmarx 高严重性错误,其中表明我们很容易出现反射型 XSS,我认为这在我们的案例中可能是误报。我们正在使用 Spring Boot 应用程序。)
解决方案
这主要取决于反应content-type
。只要它类似于applicatiin/xml
or text/xml
(而不是text/html
or application/xhtml
),api 本身就不会受到 xss 的攻击,因为现代浏览器即使显示也不会运行脚本。
请注意,尽管它可能仍然容易受到 xml 注入的攻击,如果 Checkmarx 发现它是 xss,则可能存在某种可能的注入。确保用户无法在响应中创建 xml 标记或属性。这样做的方法与防止 xss 的方式非常相似。请注意,尽管在将用户输入写入 xml 时不需要对用户输入进行 html 编码,因为它不是 html,但您需要对值进行 xml 编码。
另请注意,验证输入很好,但通常情况下,注入攻击可以通过上下文感知输出编码来防止,即。将适当的编码类型应用于值、xml 属性等。很多时候,您无法在输入端完全实现这一点。(输入验证仍然有意义,您也应该这样做,但最好通过输出编码来防止注入。)
推荐阅读
- scala - Spark Dataframe - 将特定行推到数据框中的最后一个
- php - 按价格排序并排序订单号 opencart
- python - 通过 pandas to_sql 命令检查数据库插入结果 - Flask
- apache - Apache 强制 DNS 查找
- r - R闪亮的动态过滤
- php - 我收到“邮件程序错误:SMTP 连接()失败。” 使用 elasticemail 主机发送电子邮件时
- javascript - Javascript - 根据值查找最新对象
- javascript - 必需的道具和存在检查
- enterprise - 如何运营 Corda 企业
- java - 我应该抛出什么异常