Agreed, let's take this off-list.  If anyone else wants in on the 
discussion, feel free to email myself, James, or Aaron.

Brendan

On Monday, May 19, 2014 9:07:24 AM UTC-4, abedra wrote:
>
>  
> On 05/18/2014 09:25 AM, James Reeves wrote:
>  
>  I don't want to seem like I'm "badgering" you. You have a lot of sound 
> ideas. But I don't think we should be trying to work around insecure 
> designs; we should be making it easier for people to design things securely.
>  
>  In terms of *specific* things wrong that I've yet to mention: the 
> middleware you have won't work for all session stores; only session stores 
> that create a new session if a key is not found. Ideally session stores 
> should reject session IDs that don't exist, rather than construct new ones.
>
>  - James
>  
>
> After reading this thread I would like to make a couple of quick points. I 
> think that ring-auth is a step in the right direction and has the right end 
> goals in mind. To cut past the tension a bit I think that what James is 
> trying to say is "let's try to make this less confusing and work within the 
> constraints of the current system". This really isn't a bad idea. In fact, 
> it is usually the way to succeed as an add-on to a library. I understand 
> all of the original points made by Brendan and agree with almost all of 
> them. That being said, I would encourage a little more work here to try and 
> blend just a bit more. I am happy to take this off list and start a more 
> productive discussion on how with a smaller group if there's interest.
>
> - Aaron
>
>  
>  
>
> On 18 May 2014 14:06, Brendan Younger <brendan...@gmail.com 
> <javascript:>>wrote:
>
>>
>>
>> On Saturday, May 17, 2014 9:03:01 PM UTC-4, James Reeves wrote: 
>>
>>>  On 18 May 2014 00:09, Brendan Younger <brendan...@gmail.com> wrote:
>>>
>>>> For anyone else following along at home, I'll just re-iterate the 
>>>> benefits of using ring-auth versus trying to write your routes *just 
>>>> right* to avoid the myriad security issues listed at OWASP. 
>>>>
>>>>  - If you initiate a session with a user over HTTP and later on that 
>>>> user logs in over HTTPS but you don't change the session id in the cookie, 
>>>> then everyone at the coffee shop has access to the authenticated session. 
>>>>  Ring-auth protects you from this.
>>>>  
>>>
>>>  This is true, but I don't think we should be aiming to protect people 
>>> from doing the wrong thing, so much as stop them from doing it in the first 
>>> place.
>>>
>>>  You seem to be aiming this middleware at people concerned about 
>>> security, but not so concerned as to follow best practice. I'm a little 
>>> baffled by this use-case.
>>>   
>>
>>  On the contrary, I'm protecting the user from oversights or bugs in the 
>> webapp.  Saying that there would be no security issues if only everyone 
>> wrote perfect software is a tautology.
>>   
>>
>>>    
>>>  
>>>>  - If you use a CSRF middleware, but at any time leak the session id 
>>>> cookie over HTTP, then your CSRF protection is broken.  Ring-auth protects 
>>>> you from this.
>>>>  
>>>
>>>  CSRF protection doesn't matter if your session is compromised. CSRF is 
>>> a mechanism for sending a HTTP POST with the user's session ID. If you 
>>> already have the session ID, there's very few reasons why you'd bother with 
>>> CSRF.
>>>   
>>    - If you ever send your CSRF token over HTTP, then the entire coffee 
>>>> shop can entice the user to "Click here now!" and send money to their 
>>>> off-shore account.  Ring-auth helps you avoid sending the CSRF token in 
>>>> the 
>>>> clear.
>>>>  
>>>
>>>  Hm? How? There doesn't appear to be anything in your code that looks 
>>> for the CSRF token embedded in the response body.
>>>  
>>
>>  Because the :csrf-token is only present in the :auth-session, you can 
>> be sure that if your code has access to the :csrf-token, then it's 
>> communicating over HTTPS with the user.  I could not use ring-anti-forgery 
>> here because there is no provision to place the token in anything except 
>> :session.
>>    
>>
>>>   - If you get a request over HTTP which should have gone over HTTPS 
>>>> and respond with an error, but don't immediately delete the session, then 
>>>> everyone at the coffee shop has seen the authenticated session id 
>>>> (assuming 
>>>> you forgot to set Secure).  Ring-auth protects you from this.
>>>>  
>>>
>>>  Again, I don't understand the use-case for this. Setting the secure 
>>> flag on the session cookie is the clearly the better option. I'm having 
>>> trouble seeing how you'd present this in your project's README.
>>>  
>>>
>>>>  - If a user closes their browser on a public computer but forgets to 
>>>> sign off, the next user can go back to the site, and hopefully the browser 
>>>> has cached the cookie giving them access to the first user's account. 
>>>>  Ring-auth will help prevent this as soon as the "Cache-Control" header is 
>>>> set.
>>>>  
>>>
>>>  A session idle-timeout isn't necessarily a bad idea, though again this 
>>> could be implemented as middleware on top of the existing session 
>>> middleware.
>>>
>>>  I'm not sure what bearing the Cache-Control header has in this case.
>>>  
>>
>>  The Cache-Control header instructs proxies and the like to not cache 
>> the Set-Cookie header.  See section 4.2.3 of 
>> ftp://www.ietf.org/rfc/rfc2109.txt.
>>    
>>
>>>   - Not to mention the helpful errors that try to help you develop 
>>>> secure routes with warnings when you're doing something obviously insecure.
>>>>  
>>>
>>>  This isn't a bad idea.
>>>  
>>>
>>>>  None of these things come out-of-the-box with Ring's wrap-session, 
>>>> even with {:secure true} set.
>>>>  
>>>
>>>  No, and I agree that there are definitely pieces of middleware that 
>>> could help, but I disagree on how ring-auth currently goes about it. 
>>>
>>>  Improving Ring's security is a laudable goal, but it's also something 
>>> you need to be very careful with. Rather than building on existing 
>>> infrastructure, such as the secure cookie flag or the existing wrap-session 
>>> middleware, you're building your own ad-hoc systems. This is not a good way 
>>> to build secure software.
>>>  
>>
>>  Yes, you've repeated yourself several times on this subject.  However, 
>> at some point you need to engage with the code that is actually present in 
>> ring-auth rather than repeating the abstract goal of building on existing 
>> infrastructure (which ring-auth mostly does).  All it does is replace the 
>> logic in wrap-session mainly because wrap-session doesn't have a way of 
>> regenerating session identifiers.
>>
>>  You keep repeating that best practices for Ring sessions are to set the 
>> secure flag, have unguessable session identifiers, don't use the same 
>> cookie for secure and insecure sessions, etc. except that none of these are 
>> the default in Ring and have to be thought through individually by 
>> developers.  Saying that it's their own fault if they somehow miss one of 
>> the things on the list is not helpful.
>>
>>  Ring-auth implements the OWASP suggested measures for securing sessions 
>> all in one place, makes choices about things like generating the session 
>> identifier where there is an obvious right choice from a security 
>> perspective, and tries to catch common bugs or misconfigurations where 
>> possible.  It's clear you have philosophical differences regarding how it's 
>> implemented, but unless you have some specific point about the security of 
>> ring-auth, I would ask you to stop badgering.
>>  
>>   You have a lot of sound ideas, but any library that purports to 
>>> improve security needs to be very carefully considered, and should be held 
>>> to a far higher standard.
>>>  
>>>  - James
>>>  
>>>    
>  -- 
> 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