I just pushed something to address this.

It adds a keyword argument to send/formlet to control the method and
defaults it to POST.

Jay

On Sun, Feb 19, 2012 at 7:42 AM, Norman Gray <nor...@astro.gla.ac.uk> wrote:
>
> Greetings.
>
> Web-server formlets currently send their form input back to the server via an 
> HTTP GET request.  They should probably generate a form which uses HTTP POST 
> instead.
>
> There are two problems with using GET for this.
>
> 1. If there's any sensitive information in the form, such as a password, then 
> it's very obviously exposed in the URL and stored in logs, which wouldn't be 
> the case if the form contents are in the HTTP request body instead.  The 
> latter would provide at least a little bit of obscurity, rather than serious 
> security.  This is of course not a great way to do authentication (to say the 
> least), but if one trusts the network or one is talking to localhost, then 
> it's good enough for some applications.  The problem isn't just confined to 
> passwords, obviously.
>
> 2. HTTP defines GET to be side-effect free, and cacheable.  Therefore if 
> there's an intermediary server between the client and the server, and it sees 
> a GET request being made, it is (a) permitted to send a cached version if the 
> URL is one it has seen before, and (b) permitted to make the GET request to 
> the origin server multiple times (for example if there is or appears to be a 
> failure), and send only one response to the client.  Either of these might 
> mess up the form-mediated client-server interaction, and there's nothing 
> anyone can do about it.  This is probably more of a theoretical problem than 
> a common practical one.  POST is not defined to be side-effect free, and is 
> not automatically cacheable.
>
> Of course (again), the point of continuation-based forms is that they're 
> functional, just like GET, but many people implement services using GET forms 
> which are intended to have side-effects.
>
> Simply defining (and using) a send/formlets/post which is identical to 
> send/formlets but with a [method "POST"] added, seems to work fine, because 
> formlet-process uses request-bindings/raw, which handles both GET and POST 
> requests.  Therefore, I think that should probably be the default.
>
> Best wishes,
>
> Norman
>
>
> --
> Norman Gray  :  http://nxg.me.uk
> SUPA School of Physics and Astronomy, University of Glasgow, UK
>
>
> _________________________
>  Racket Developers list:
>  http://lists.racket-lang.org/dev



-- 
Jay McCarthy <j...@cs.byu.edu>
Assistant Professor / Brigham Young University
http://faculty.cs.byu.edu/~jay

"The glory of God is Intelligence" - D&C 93

_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to