I think we should do something like this. 

I think we should have auth.settings.force_ssl_login 
and  auth.settings.force_ssl_login.
We could add secure=True option to existing requires validators.

This should not be enforced from localhost.


On Thursday, 20 September 2012 09:07:14 UTC-5, Yarin wrote:
>
> A proposal for improving SSL support in web2py 
>
> For authenticated web applications, there are two "grades" of SSL 
> implementions: Forcing SSL on login, vs forcing SSL on the entire 
> authenticated session.
>
> In the first case, HTTPS is forced on login/registration, but reverts back 
> to HTTP upon authentication. This protects against passwords from being 
> sent unencrypted, but won't prevent session hijacking as the session cookie 
> can still be compromised on subsequent HTTP requests. (See 
> Firesheep<http://codebutler.com/firesheep>for details). Nonetheless, many 
> sites choose this approach for performance 
> reasons, as SSL-delivered content is not cached by browsers as efficiently 
> (discussed on 37signals 
> blog<http://37signals.com/svn/posts/1431-mixed-content-warning-how-i-loathe-thee>
> ).
>
> In the second case, the entire authenticated session is secured by forcing 
> all traffic to go over HTTPS while a user is logged in *and* by securing 
> the session cookie so that it will only be sent by the browser over HTTPS.
>
> (Also discussed in web2py users group - Auth over 
> SSL<https://groups.google.com/d/msg/web2py/7qoHMs-4Va8/jRFOqYHri4gJ>
> )
>
> web2py should make it easier to deal with these scenarios. I just 
> implemented a case-1 type solution and it took quite a bit of work.
>
> Moreover, web2py currently provides two SSL-control functions, which, 
> taken on their own, can lead to problems for the uninitiated:
>
>    - session.secure() will ensure that the session cookie is only 
>    transmitted over HTTPS, but doesn't force HTTPS, so that for any 
> subsequent 
>    session calls made over HTTP will simply not have access to the auth 
>    session, but this is not obvious (Correct me if I'm wrong)
>    - request.requires_https() (undocumented?) is a misnomer, because if 
>    forces HTTPS but then assumes a case-2 scenario and secures the 
>    session cookie
>
>
> *Proposals:*
>
>    - SSL auth settings
>       - auth.settings.force_ssl_login - Forces HTTPS for 
>       login/registration
>       - auth.settings.force_ssl_session - Forces HTTPS throughout an 
>       authenticated session, and secure the session cookie (If True, 
> force_ssl_login 
>       not necessary)
>    - Other more granular controls
>       - @requires_https() - decorator for controller functions that 
>       forces HTTPS for that function only
>       - 'secure=True' option on forms ensures submission over HTTPS
>    
>
>
>

-- 



Reply via email to