javascript - 文件下载的 CSRF 保护

标签 javascript download csrf-protection

在我们的应用程序中,用户可以通过按上下文菜单按钮来下载文件。目前,我们通过创建一个 iframe 并将其附加到 dom 来实现此功能,并使用指向服务器上文件位置的 src 属性。

我们最近向应用程序添加了 CSRF 保护,您可以猜到文件下载问题引起了问题。通过提供 csrf token 作为查询参数可以轻松解决此问题,但最终违背了保护方法的目的并将 token 暴露给监听器。

有没有办法使用具有可配置Http headers<的请求来触发文件下载(即按“下载文件”按钮后触发 native 另存为...对话框)/

请注意,即使数据本身不会暴露给攻击者的站点,我们也希望避免恶意页面向服务器发送多个如此繁重的请求,因此需要 CSRF 保护。

最后请记住,我们必须与 Internet Explorer 10 保持兼容,这可能会限制我们的选项(例如 anchor 元素中的 download 属性在该版本中不起作用)。

最佳答案

单独解决您的问题要求...

1) "Is there a way to trigger a file download using a request with configurable Http Headers?"

2) "want to avoid having multiple such heavy requests"

听起来您需要 DDOS 对策,而不是 CSRF 对策来满足此要求。上一点中的 CSRF 对策确保下载请求有效,但 CSRF 不关心重复多个有效请求。例如,如果攻击者实现了重复单击下载按钮的 AutoIt 脚本,您也会遇到同样的问题。

有多个层面来实现对策:

3) "must remain compatible with up to Internet Explorer 10"

上述建议在某些版本的 IE 中受到限制:

注意:实现细节被省略,因为它依赖于您的服务器端堆栈。

关于javascript - 文件下载的 CSRF 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582920/

相关文章:

javascript - 如何从给定的函数名中找到函数定义的 js 文件名?

javascript - 防止滚动 - JQuery

javascript - 我们如何同步不同页面上的两个 Canvas 元素

javascript - JS中多余的行会影响效率吗

Node.js:如何通过我的服务器将远程文件流式传输给用户?

javascript - 有什么方法可以在 Express 的 POST 请求中获取 csrf token 吗?

php - 在一个 HTTP 请求中下载多个文件

http - 带有 WGET 的 NodeJS 文件下载器?

csrf - JSON API 和 CSRF

angularjs - 基于 token 的身份验证中的 CSRF