2017-04-07 6 views
3

私はリング偽造トークンがHTMLページに生成または挿入される時期を理解しようとしています。私はCompojure/ring/hiccupを使用していますが、私はそれが本当にリングについての質問です。私はそれほど問題はありません。私はちょうどアンチウィーリーズトークンが「注入された」時代とその方法を知りたいのです。リング偽造トークンはいつ挿入されますか?

ring.util.anti-forgeryからanti-forgery-field関数は次のように実装されています。私はこれを取得しようとした場合、REPLでまだ

REPL> (println (anti-forgery-field)) 
<input id="__anti-forgery-token" name="__anti-forgery-token" type="hidden" value="Unbound: #&apos;ring.middleware.anti-forgery/*anti-forgery-token*" /> 

:私は私が得るREPLでこの関数を呼び出した場合

(html (hidden-field "__anti-forgery-token" *anti-forgery-token*) 

var私は同じ "結合されていない"変数を得る:

> ring.middleware.anti-forgery/*anti-forgery-token* 
=> #object[clojure.lang.Var$Unbound 0x1eae055 "Unbound: #'ring.middleware.anti-forgery/*anti-forgery-token*"] 

私その "結合されていない"値が実際のトークンに変換されたとき(リングによって変換されたとき)も、理解されないのでしょうか?そして、私は特に、Webサイトに接続しているいくつかのユーザーが、セッション毎に異なるトークンを取得する方法を理解していません。

この変数は常に「バインドされていませんか」ですか?いつどのように「束縛される」のでしょうか?また

、私はリングセッションIDを持っている場合(たとえば"リングセッション= 310678be-9ef6-41a7-A12A-b2417de4a79f")私は、サーバー側で(ClojureのREPLで、見ることができますどのように、 )、対応する偽造防止トークンの値?

+0

はhttps://github.com/ring-clojureでソースを読んで試してみてください/ring-anti-forgery/blob/master/src/ring/middleware/anti_forgery.clj、これは何か特に派手ではありません。これをやったら、そのメカニズムについて具体的な質問があれば、おそらく質問するのがよいでしょう。 – amalloy

+0

@amalloy:まあ私はすでにそれを読んでいたので、私はそれを手に入れませんでした。そして、これは私がリング*だけでなくClojure(ソースを使ってなぜ私を助けなかったのか、なぜ私がこの質問に尋ねたのかを説明する)を理解していないためではありません。 *「REPLから、2人のユーザが私のウェブサイトにログインして、自分のリングセッションIDを知っている場合、どのように2つの異なる偽造トークンを読むことができますか? *。これは実際にボンネットの下で何が起こっているのかを理解するのに役立ちます。 –

答えて

3

個別リクエストのコンテキスト(動的環境、現在のスタック)にのみバインドされます。それをスレッドローカル変数/バインディングと考えてください。 REPLからアプリケーションの状態を見ている間は、リクエストのコンテキストにいません。

これは、各ユーザーごとに異なる値にする必要があるため、この方法である必要があります。このような動的環境の制御を許可しない環境で作業していた場合は、明示的な参照呼び出しによって同様の動作をシミュレートします。右のセッション値が現在ここで、要求時にミドルウェアで確立されたとの結合

https://github.com/weavejester/ring-anti-forgery/blob/master/src/ring/middleware/anti_forgery.clj#L67

(binding [*anti-forgery-token* (session-token request)] 
    ;; ... 
) 
+0

おっと、それは全く新しいものです。あなたの説明をありがとう:それは今はあまり神秘的ではないと感じ、私はなぜこれをREPLから「束縛されていない」と見ているのか理解しています。 –

関連する問題