我试图了解何时将环形防伪标记生成或插入到HTML页面中。我使用Compojure/ring/hiccup,但我认为我的问题真的是关于响铃。我本身没有任何问题:我只想知道什么时候以及如何“注入”防伪标记。什么时候插入了环形防伪标记?
从ring.util.anti-forgery
的anti-forgery-field
功能实现这样的:
(html (hidden-field "__anti-forgery-token" *anti-forgery-token*)
如果我在REPL调用这个函数,我得到:
REPL> (println (anti-forgery-field))
<input id="__anti-forgery-token" name="__anti-forgery-token" type="hidden" value="Unbound: #'ring.middleware.anti-forgery/*anti-forgery-token*" />
现在仍然在REPL,如果我试图让这个var我得到相同的“未绑定”变量:
> ring.middleware.anti-forgery/*anti-forgery-token*
=> #object[clojure.lang.Var$Unbound 0x1eae055 "Unbound: #'ring.middleware.anti-forgery/*anti-forgery-token*"]
什么我不明白的是“Unbound”值是什么,也不是什么时候(通过环?)转换成实际的令牌。我特别不明白连接到网站的几个用户是如何得到的,每个用户都有一个不同的令牌(每个会话)。
这个变量是否总是“未绑定”?什么时候/如何变得“受限制”(如果有)?
另外,如果我已经得到了环会话ID(比如“环会话= 310678be-9ef6-41a7-A12A-b2417de4a79f”),我怎么能看到,在Clojure的REPL(在服务器端),相应的防伪标记的值?
尝试https://github.com/ring-clojure读取源/ring-anti-forgery/blob/master/src/ring/middleware/anti_forgery.clj,它没有做任何特别的幻想。一旦你这样做了,如果你对这个机制有特定的问题,那么这可能是一个很好的问题。 – amalloy
@amalloy:好吧,我已经读过,我根本不明白。这可能不是因为我不仅不了解* ring *而且还有Clojure(这可以解释为什么使用源码不能帮助我,为什么我会问这个问题)。我认为一个问题的答案会帮助我理解这个机制:*“当两个用户登录我的网站并且我知道他们的环会话ID时,我怎么能从REPL读取两个不同的反伪造令牌?” *。这真的会帮助我理解底下发生了什么。 –