javascript - 通过 <script> 标签加载到网页中的 JavaScript 文件的源可以被该页面中的其他 JavaScript 读取吗?

标签 javascript json security csrf csrf-protection

我正在研究 CSRF 预防,我有一个关于返回 JSON 的 GET URL 的问题,以及该 URL 返回的数据是否可以通过第三方网页访问。

例如,假设这个请求

GET HTTP 1.1 /rest/foo.js 
Host: myhost.com

返回动态生成的 JSON,如下所示,带有每个 session 的 CSRF token :

{user:"My name", userId:1234, CSRFToken: "EFB8765AC2134ACB23486"}

请注意,这是 不是 一个 JSONP 请求。现在,假设我在snekythirdparty.com 上有一个网页,内容如下:

<html>
  <head>
    <script language="javascript" src="http://myhost.com/rest/foo.js" />
  </head>
  ...
</html>

我的问题是:脚本,Flash小程序或其他第三方网站页面中的任何其他内容(例如这个)是否可以读取foo.js的源代码以获取CSRF token ?

最佳答案

您不必隐藏您的 CSRF token
CSRF 保护的所有目的只是为了确保对您站点的请求确实来自您的站点(或您可以授予他们授权的其他站点)。

所以我真的不明白你想在你的例子中实现什么:
如果您想阻止 foo.js 从另一台服务器调用,您必须强制人们在请求该文件时发送 CSRF token ,然后您在服务器中检查该 token 是否实际匹配 session key ,例如之前设置的验证该用户的 session key 确实最初来自您的网站。

如果 json {user:"My name", userId:1234, CRSFToken: "EFB8765AC2134ACB23486"} 静态地写在这个javascript中,那么你误解了CSRF保护的所有概念。

您必须根据一些用户唯一数据(可以是数据库中的数据,可以是 session ID 等)动态创建 token ,然后在您的站点周围传递 token 并阻止对您想要保护的页面的请求,如果此 token 无效/存在。

CSRF 保护可以在常规形式和 ajax 调用中完成 - 就像你选择的那样

Good Explanation

关于javascript - 通过 &lt;script&gt; 标签加载到网页中的 JavaScript 文件的源可以被该页面中的其他 JavaScript 读取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15518957/

相关文章:

javascript - 为 xmlhttprequest 对象提供属性

javascript - 用 Salt、密码和类型在 PHP 中解密?

arrays - PowerShell 中的 JSON 数组

javascript - npm install 没有返回可用于 pinkie-promise 的有效版本

javascript - 使用 innerHTML,安全问题是什么?

security - 记录包括密码在内的身份验证尝试

javascript - 列的 react 表组件onClick事件

javascript - 无法连接到 mongolab 数据库

javascript - 将 D3 与多维数组/对象一起使用

mysql - 在请求 URL 中公开表名和字段名