Wow, thank you! This makes a lot of sense, it sounds like I really do not 
need CSRF protection.. I'm just adding complexity there..

I think my key mess up here was getting my client side / server side code 
mixed up in my head. I am really enjoying using ClojureScript and Clojure 
side by side, but yeah it makes sense that I can't use ring's libraries 
inside a client side language. That's just something I'll have to keep in 
mind.

I'm guessing if I was going to make use of CSRF in the future, I would drop 
it into a meta tag on the server side, and then reference that meta tag 
with javascript (that's how Laravel does it). ...but I'll cross that bridge 
when I come to it.

Thanks!
Seth 

On Friday, December 23, 2016 at 10:36:46 AM UTC-5, James Reeves wrote:
>
> The "use" function is a deprecated shortcut for "require" and "refer". I 
> can see why it would be confusing, so I'll change the examples on the 
> ring-anti-forgery site.
>
> Packages can contain many namespaces, so in general you won't find package 
> names matching up precisely to the namespace or namespaces that they 
> provide.
>
> Regarding CSRF protection, you firstly only need it if you have user 
> authentication in your app. If that doesn't matter, you can turn it off.
>
> If you do have user authentication, then read on.
>
> It's difficult to produce a library that does everything automatically, 
> because it requires cooperation between server-side and client-side code. 
> Ring just handles the server-side, so it's up to you, or another library, 
> to handle the client-side.
>
> I'm not sure how to explain the general functionality any better than the 
> README of the project already does:
>
> Any request that isn't a HEAD or GET request will require an anti-forgery 
>> token, or an "access denied" response will be returned. The token is bound 
>> to the session, and accessible via the *anti-forgery-token* var.
>
>  
>
> By default the middleware looks for the anti-forgery token in the 
>> "__anti-forgery-token" form parameter, which can be added to your forms as 
>> a hidden field. 
>
>  
>
> The middleware also looks for the token in the "X-CSRF-Token" and 
>> "X-XSRF-Token" header fields, which are commonly used in AJAX requests. 
>
>
> In terms of what that specifically means for you, you need to do two 
> things:
>
>    1. Add the value of the *anti-forgery-token* somewhere your 
>    ClojureScript can find it.
>    
>    2. Add the value to the "X-CSRF-Token" header each time you send an 
>    AJAX request.
>
> There may be libraries that handle the client-side for you. Maybe someone 
> else can suggest one. The specifics really depend on how your app is put 
> together.
>
> - James
>
>
> On 23 December 2016 at 14:39, Seth Archambault <seth...@gmail.com 
> <javascript:>> wrote:
>
>> So when I use cljs-ajax to post to my APP I get an Invalid anti-forgery 
>> token error. 
>>
>> Despite there being dozens of posts about this issue, none of them have a 
>> solution that seems to work if you started your project using this:
>>
>> lein new reagent myapp
>>
>> The first post that comes up as a "solution" actually recommends 
>> disabling CSRF protection, which seems like just avoiding the problem 
>> rather than solving it, but they don't actually tell you how to do that 
>> either!
>>
>> After 4 hours of searching for any solution, I admit that the only fix 
>> that I found was this:
>>
>> (ns reformdems.middleware
>>   (:require [ring.middleware.defaults :refer [site-defaults 
>> wrap-defaults]]
>>             [ring.middleware.json :refer [wrap-json-params]]
>>             [prone.middleware :refer [wrap-exceptions]]
>>             [ring.middleware.reload :refer [wrap-reload]]))
>>
>> (defn wrap-middleware [handler]
>>   (-> handler
>>       (wrap-defaults (merge site-defaults {:security {:anti-forgery 
>> false} :params {:keywordize true}}))
>>       wrap-exceptions
>>       wrap-reload
>>       wrap-json-params))
>>
>>
>> By setting :security :anti-forgery to false, I no longer get the 
>> Anti-Forgery issue. But yeah, this isn't a real solution.
>>
>> What I'm looking to do is get one of the solutions involving 
>> "*anti-forgery-token*" 
>> or (anti-forgery-field) working.
>>
>> Unfortunately, these instructions here, don't work, and only produce hard 
>> to understand errors:
>> https://github.com/ring-clojure/ring-anti-forgery
>>
>> As a side note, it's really confusing when all the libraries use this 
>> language:
>>
>> (use 'ring.util.anti-forgery)
>> (anti-forgery-field)
>>
>>
>> Meanwhile "use" is not in any of the code generated using lein. I would 
>> expect this would be the proper way to use the libraries:
>>
>> (ns myapp.server
>>   (:require 
>>             [ring.util.anti-forgery) :refer [anti-forgery-field]]))
>>
>> Of course, I'm just guessing at that refer command, but my point is this 
>> inconsistency makes me feel like I'm looking at solutions designed for an 
>> older version of Clojure or something? 
>>
>> I'm also concerned that given a library [ring/ring-anti-forgery "1.0.1"] 
>> there is no way to intuitively know how to "require" that library in your 
>> code. In the above situation the word "util" gets added when requiring it..
>>
>>
>> *Anyways, my main question is this:*What is the modern way to do CSRF 
>> protection?
>>
>> Secondly, I'm concerned I'm doing something wrong - ring.middleware feels 
>> like a magical thing where you apply wrappers, and then stuff just 
>> magically works. I'm not a big fan of magic, I want to be able to see a 
>> pathway for finding a solution, not just google around and figure out a 
>> wrapper needs to be added.. Any recommendations on that front?
>>
>> Thanks!
>> Seth
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to