Well, actually, I overlooked that information in the prior posts. Sorry for the noise and thanks for the summary! Daniel.
Am 29.12.2015 um 14:10 schrieb Jay McCarthy: > I don't understand your question. The net-cookies package is very good > for arbitrary cookies and the id-cookie library I linked to is very > good for just authentication. The posts prior to your question contain > this information, so what are you asking? > > Jay > > On Sat, Dec 26, 2015 at 8:33 AM, Daniel Brunner <[email protected]> wrote: >> Btw, what's the "standard" way to handle cookies? I learned from the >> documentation one should use the net-cookies package? >> >> (I am writing a small http client script and need to handle the >> authentication cookies as well). >> >> Kind regards, >> Daniel >> >> Am 24.12.2015 um 15:50 schrieb Marc Kaufmann: >>> In short, do HTTPS with cookies and I should be fine (modulo bugs, weak >>> passwords, etc). >>> >>> Thanks, that does answer very well the question that I didn't ask. >>> >>> On Thu, Dec 24, 2015 at 8:28 AM, Jay McCarthy <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>> On Wed, Dec 23, 2015 at 10:38 PM, Marc Kaufmann >>> <[email protected] <mailto:[email protected]>> wrote: >>> > Hi all, >>> > >>> > I am hopefully going to implement a minor website for gathering >>> survey data for some research I am doing. Due to data privacy and so on, I >>> want to be extra careful about security. First, I didn't understand the >>> security concerns about URLS at >>> http://docs.racket-lang.org/web-server/faq.html, nor its solution >>> (see end of email for the full question which confuses me). >>> > >>> > Secondly, do I understand correctly that for a production-ready >>> website, I would use the Racket serve/servlet - or are there other/better >>> servers I would use? I've only used the serve/servlet on my local machine >>> and wouldn't understand the security concerns until I was hacked (and even >>> then...). >>> >>> There's just one serve and serve/servlet is the best way to start it, >>> because it has the most options and controls, which you will probably >>> want in a production system. >>> >>> > The question that left me more confused than reassured (primarily >>> because I don't understand what HTTP traffic in the clear is - as opposed >>> to HTTPS?): >>> >>> Yes, if I am between you and your destination, then I can see >>> everything you send and receive on HTTP (and change it). In contrast, >>> if you use HTTPS, then I just know what server you are talking to, but >>> I don't know what URLs you are looking at or what data you are sending >>> and receiving. So, most issues related to URLs don't really apply to >>> HTTPS. >>> >>> > "10.7. What special considerations are there for security with the >>> Web Server? >>> > >>> > The biggest problem is that a naive usage of continuations will allow >>> continuations to subvert authentication mechanisms. Typically, all that is >>> necessary to execute a continuation is its URL. Thus, URLs must be as >>> protected as the information in the continuation. >>> > >>> > Consider if you link to a public site from a private continuation >>> URL: the Referrer field in the new HTTP request will contain the private >>> URL. Furthermore, if your HTTP traffic is in the clear, then these URLs can >>> be easily poached. >>> > >>> > One solution to this is to use a special cookie as an authenticator. >>> This way, if a URL escapes, it will not be able to be used, unless the >>> cookie is present. For advice about how to do this well, see Dos and Don’ts >>> of Client Authentication on the Web from the MIT Cookie Eaters. >>> > >>> > Note: It may be considered a great feature that URLs can be shared >>> this way, because delegation is easily built into an application via URLs." >>> >>> You haven't really asked a question, but let me try to give you an >>> example. >>> >>> Suppose your main function is something like >>> >>> (define (main req) >>> (define maybe-has-the-password-req >>> (send/suspend (lambda (url) "Give me your password"))) >>> (if (really-has-password? maybe-has-the-password-req) >>> (secure-site maybe-has-the-password-req) >>> (main maybe-has-the-password-req))) >>> >>> Once they type in the password, they get the secure site >>> >>> (define (secure-site req) >>> (send/suspend/dispatch >>> (lambda (embed-url) >>> (list "Would you like launch missiles today?" (embed-url (lambda >>> (req) (launch-missiles!) (secure-site req))))))) >>> >>> So, the URL they start at would be like >>> >>> 1. http://missiles.dod.mil >>> >>> After they type in the password it would be >>> >>> 2. http://missiles.dod.mil/?k=kljdaflkfjaflkdj >>> >>> And once they click launch missiles it would be >>> >>> 3. http://missiles.dod.mil/?k=qeriudfnafurf >>> >>> Either of the URLs, 2 or 3, when you click on them, you will >>> immediately go to the secure site whether you typed in the password or >>> not in your browser, because the authentication was in the past of the >>> computation. >>> >>> So, if you did HTTPS just for the transition from 1->2 (as some Web >>> sites do) but then use HTTP after that, then the URL could be snooped >>> at middle-men could be your users. >>> >>> Similarly, if we changed the secure site to be... >>> >>> (define (secure-site req) >>> (send/suspend/dispatch >>> (lambda (embed-url) >>> (list "Would you like launch missiles today?" (embed-url (lambda >>> (req) (launch-missiles!) (secure-site req))) >>> (a ([href "http://downforeveryoneorjustme.com/us.gov"] >>> "Check to see if you should launch"))))) >>> >>> Then when you click on the link, the HTTP(S) request to >>> downforeveryoneorjustme.com <http://downforeveryoneorjustme.com> >>> will look like >>> >>> GET /us.gov <http://us.gov> HTTP/1.1 >>> Referrer: http://missiles.dod.mil/?k=kljdaflkfjaflkdj >>> >>> Thus, the admins there could launch the missiles by looking at their >>> logs and clicking on the link. >>> >>> This referrer is always sent unless a link is from an HTTPS site to an >>> HTTP site. >>> >>> So, basically, the summary is to not do this. Instead, make it so that >>> once you type in the password, you set an authentication cookie and >>> when you get to any page that requires authentication, check that the >>> cookie is already there. The Racket Web server comes with a library >>> for doing this: >>> >>> >>> http://docs.racket-lang.org/web-server/http.html?q=web-server%2Fhttp%2Fid-cookie#%28mod-path._web-server%2Fhttp%2Fid-cookie%29 >>> >>> Jay >>> >>> -- >>> Jay McCarthy >>> Associate Professor >>> PLT @ CS @ UMass Lowell >>> http://jeapostrophe.github.io >>> >>> "Wherefore, be not weary in well-doing, >>> for ye are laying the foundation of a great work. >>> And out of small things proceedeth that which is great." >>> - D&C 64:33 >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Racket Users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected] >>> <mailto:[email protected]>. >>> For more options, visit https://groups.google.com/d/optout. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Racket Users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. > > > -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

