2015-05-11 47 views
6

Ben componentjure 1.1.18 ve diğer eski lib'lerde çalışan eski bir kod kopyaladım, ancak en son sürümleri kullanarak çalışamıyorum.En son sürüm ring/componentjure ile zil önleme/CSRF belirtecini nasıl kullanabilirim?

İşte benim minimal example code Hatta başlık seti ile, bir http POST gönderirken son halkası ve compojure kitaplıkları ile, bir hata alıyorum olduğunu göstermek için the minimal example here kopyalanan.

lein ring server sonra yapmak, bunu başlatmak için

böyle bir şey sonuçlanan

curl -X GET --cookie-jar cookies "http://localhost:3000/":

{"csrf-token":"7JnNbzx8BNG/kAeH4bz1jDdGc7zPC4TddDyiyPGX3jmpVilhyXJ7AOjfJgeQllGthFeVS/rgG4GpkUaF"} 

Ama bu

curl -X POST -v --cookie cookies -F "[email protected]" --header "X-CSRF-Token: 7JnNbzx8BNG/kAeH4bz1jDdGc7zPC4TddDyiyPGX3jmpVilhyXJ7AOjfJgeQllGthFeVS/rgG4GpkUaF" http://localhost:3000/send 

yaptığımda <h1>Invalid anti-forgery token</h1>

Am olsun Yanlış bir şey yapıyorum ?

was intended to answer this question ödünç aldığım kod.

(defroutes app-routes 
    (GET "/" [] (generate-string {:csrf-token 
           *anti-forgery-token*})) 
    (POST "/send" [email] "ok") 
    (resources "/") 
    (not-found "Not Found")) 

(def app 
    (-> app-routes 
    (wrap-defaults site-defaults))) 

Böylece iki sahtekarlığa karşı belirteçleri oluşturulur ve:

+0

Karanlıkta çekilmiş ancak ters eğik çizgileri kullanarak eğik çizgilerden (belirteç içinde) kaçmak herhangi bir fark yaratır mı? – lispHK01

+0

Teşekkürler! James Reeves/weavejester, besteci ve [halka-sahteciliğe karşı korumanın kalıcılığı bana yeni 'wrap-varsayılanlar' ve 'ring-default'lar paketinde' site varsayılanları 'olduğunu söyledi (https://github.com)/Ring-clojure/ring-anti-forgery/issue/10) Kullanımdan kaldırılan componentjure 'handler 'isim alanının yerine otomatik olarak HTTP' POST' et al. Yani kodum iki kez belirteç üretir ve ben yanlış olana karşı doğrularım. Bir düzeltme üzerinde çalışıyorum ... – sventechie

cevap

3

sorun ring-defaults (compojure içinde compojure.handler ad yerine> = 1.2), otomatik olarak kullanım geleneksek biçiminde halka anti-forgery kullandığı oldu GET isteği geçersiz olanı sağladı. wrap-anti-forgery satırını kaldırmak sorunu çözdü.

+0

Sonuçtan memnunsanız, kendi sorunuzu cevaplandı olarak işaretleyebilirsiniz. –