乐趣区

关于前端:啥是-CSRF

在应用 web server 渲染 html 模板的时候, 忽然看到 server 悄咪咪地塞了一个 csrf_meta_tag() 到 html 文件里. 这是啥?

好端端的 html 文件多了个这:

<meta charset="UTF-8" content="ICVWOGAaO0cHCiNKT2oUYidcNDAqLiA-fKbBUT_-WLj-92p7bnzJDBNI" csrf-param="_csrf_token" method-param="_method" name="csrf-token">

而且 server 还把两头这一段明码一样的货色藏在了服务端. 它到底想做什么?

认真查了查生成的 html 和 js 文件, 发现在 js 文件中获取到了这个 csrf-token 的值:

let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute('content')

而后, 在 client 尝试申请 server 的时候, 就须要用到它, 例如, 建设新的 socket 连贯:

let liveSocket = new LiveSocket('/live', Socket, { params: { _csrf_token: csrfToken}, hooks: Hooks })

假相终于浮出水面, csrf 的作用就是让 server 能够验证从 client 发来的申请是否来自于 以后用户正在浏览的页面.

有人说, 那我关上页面后把 csrf token 复制走不就行了. 是能够, 但你首先要关上页面.

退出移动版