【问题标题】:Can JavaScript safely fetch data from untrusted domains?JavaScript 可以安全地从不受信任的域中获取数据吗?
【发布时间】:2020-02-25 22:27:31
【问题描述】:

我的网页需要以客户端启动的方式从可能(有时**)不受信任/受攻击者控制的域中获取数据。

JavaScript 是否允许 [安全地] 从可能不受信任或攻击者控制的域中获取数据*?

如果有,这是什么功能?


澄清/附录/“inb4”s / P.S.:

*数据获取协议/格式[尚未]定义;甚至没有 HTTP GET 与 POST。 我没有偏好数据格式,可以根据需要/适当的,包容性甚至可以选择+实现+,甚至是明文/分隔格式。 不需要使用 JSON

**技术上,域(可能是任意的/用户定义的!)有时必须通过 HTTP 加载;这种威胁模型与从敌对服务器获取数据是同构的,尤其是在漫游非 VPN 网络连接的情况下。 (而且,是的,之后对所述不受信任数据的安全处理超出了这个问题的范围)

XY Problem“X”:这里的驱动项目是一个网络浏览器主页/应用程序,它将从可能是用户的来源加载内容(从偏好和琐碎的小部件到直接的内容)受控制并且可能(由用户选择)驻留在非 ICANN 域(例如本地域、OpenNIC 域等)上并且可以服务于各种目的,从“金丝雀”(MITM 存在和单纯的网络配置检查)到完全的位置特定数据。由于上述一系列原因[域未预定义],TLS 连接可能可用也可能不可用;即使在这种情况下,也有必须/应该/将要加载的内容。

不是#29022794 的重复。我没有使用 JQuery 的要求,这个问题只询问 $.getJSON() 是否可以安全地用于不受信任的 URL(其中,a.它似乎不是;b.甚至如果是,这个问题将询问 [JQuery 正在调用的] 底层函数,而不是询问如何使用 JQuery 本身)。

【问题讨论】:

  • 也许您可以设置一个您当然会信任的服务器。然后,您的服务器可以根据您的标准验证不受信任方的有效负载是“好”还是“坏”……。
  • 每当我读到以“Javascript 可以安全...”开头的问题时,我就已经知道答案了。

标签: javascript network-security


【解决方案1】:

间接是的:XMLHttpRequest 似乎在不受信任的域上调用是安全的。

理由:

OWASP's page on AJAX vulnerabilities:

  • 没有提及 [这种] 恶意制作的服务器响应对客户端构成的威胁;列出的唯一客户端风险是一种或另一种注入

另见this similar question on Security Stack Exchange

  • OP 的问题(将 XMLHttpRequest 以 JSON 形式解析到攻击者控制的服务器是否安全)必然假定接收此类是安全的。
  • 两位用户多次评论该问题,讨论解析所述响应的含义,并且从未质疑此基本假设,仅评论与 OWASP 讨论的类似 XSS 注入攻击。
    • ThoriumBR(>5 岁成员,2019 年信息安全堆栈交换用户 99.8th-percentile)
    • Ry(>8 岁成员,Stack Overflow 版主)

虽然很难“证明”负面影响,尤其是在安全问题方面,但事实上存在大量在线内容讨论解析潜在恶意响应所涉及的风险(XSS注入预防),处理此类(CORS)服务器的风险等;显然,即使没有关于此的讨论废止,这意味着它可能不是风险之一。

【讨论】:

    【解决方案2】:

    没有。由于CORS 安全保护,您无法在浏览器中执行此操作。如果你发现了,那是一个错误,浏览器会修复它。

    但是,您可以在服务器端使用 fetch API 进行操作

    【讨论】:

    • (我用客户端javascript而不是服务器端node.jsI'm not particularly considering Node, either标记了这个问题,所以我不确定你为什么会提到它@ 987654324@;) 但是,更重要的是:这个项目希望/理想情况下可用于“哑” HTTP 服务器以及简单的本地文件。
    • CORS 上的那个页面看起来很相关,虽然初步看起来 You cannot do it in a browser due to CORS 与情况相反:“跨域资源共享 (CORS) 是一种机制它使用额外的 HTTP 标头告诉浏览器让 Web 应用程序在一个来源运行,访问来自不同来源的选定资源……这些是 Web 内容已经可以发出的相同类型的跨站点请求”(Mozilla)
    • 但是,更具体地说,“CORS”只是围绕跨域请求的 HTTP 标头安全程序;我要问的是执行这样的 JavaScript 客户端函数;具体来说,他们是否允许域 A 上的页面从域 B 获取 数据(在网站管理员 B 的同意下),而不授予网站管理员 B 在页面 A 上的代码执行权限。跨度>
    • @JamesTheAwesomeDude - 您是否希望其他相关域授予您 CORS 津贴?
    • @PM77-1 “其他涉及的域”,它将通过一个待定义的 HTTP 方法提供一个待定义的数据结构,当然能够实现任何- 定义必要的 HTTP 标头。
    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2020-02-11
    • 1970-01-01
    • 2011-02-28
    • 2013-02-27
    相关资源
    最近更新 更多