[PPNL-Techteam] [drupal] secure login

Casper Gielen casper at gielen.name
Thu May 17 15:09:03 CEST 2012


On 05/17/12 10:58, Bèr Kessels wrote:
> Hallo,
> 
> 
> On 16-05-12 20:17, Casper Gielen wrote:
>> Nu zijn wij vast niet de enige met die probleem en ik vermoed dat er een standaard methode (module?)
>> is om die login-box te vervangen door een handige verwijzing naar onze https-site.
>> Adviezen?
> 
> Moeten we niet gewoon een eenvoudige redirect in de htaccess zetten
> zodat /alles/ over https gaat?
> 

Zie mijn antwoord aan Bob, ik vrees erg voor de performance.

> Merk op dat alléén inlog over https zinloos is: na ingelogd te zijn,
> moet alles (ook de assets) over https: de sessieinformatie wordt immers
> anders plain-text uitgewisseld. Nee, een MITM kan dan je /wachtwoord/
> niet uitlezen, maar wel je sessie, en daarmee net zo makkelijk inloggen.

Ik ga er van uit dat slechts een klein deel van de gebruikers zal inloggen.

> Dus is mijn advies: een simpele redirect/rewrite in de vhost die zorgt
> dat we altijd alles https hebben. Daarmee maken we nog een belangrijk
> statement ook[2].
> 
> RewriteEngine On
> RewriteCond %{HTTPS} off
> RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

http://www.thoughtcrime.org/software/sslstrip/
http://michael-coates.blogspot.com/2009/02/compromising-http-to-https-redirects.html

Misschien ben ik hier roomser dan de Paus. Op mijn sites laat ik op http alleen een
waarschuwingstekst zien en dwing ik gebruikers om zelf https:// in te tikken.
Misschien is dat wat extreem, maar als je het hebt over het maken van een statement...

Ik lees nu net dat er een HSTS protocol is dat dit probleem zou verhelpen maar eerlijk
gezegd snap ik het niet.

Voor zover ik weet is er geen veilige oplossing anders dan met de hand https:// intikken.
Dat is helaas te gebruikersonvriendelijk voor de meeste sites. De minst slechte oplossing,
voor zover ik weet, is een "klik hier om naar de login-pagina te gaan" die je daan naar
https:// stuurt, en pas daar de username/password veldjes laat zien.

> Als volledig-https geen optie is, kun je het blok eenvoudig verbergen
> met een zogenaamde "PHP-filter" in de blokken[3]. "only show when PHP
> evalutates TRUE"
> 
> <?php
>   return empty($_SERVER["HTTPS"]) ? FALSE : TRUE;
> ?>[4]
> 
> Bèr
> 
> [1] De modules die er zijn bewaren allemaal hun mappings, rules ofzo in
> de database; en komen pas aan de beurt na een bootstrap van Drupal. Een
> request naar plain gaat dan: "laad /hele/ Drupal in, verbind met
> database. Doe een boel standaard Drupal bootstrap-lookups in de DB, Doe
> daar een lookup voor de redirect. Stuur de redirect. Laad hele Drupal
> opnieuw in ......"
> 
> [2] https://www.eff.org/https-everywhere


> 
> [3] merk op dat PHP in je database een gruwelijk lelijk veiligheidslek
> is, ondanks dat Drupal dit out of the box levert is eigenlijk een no-go
> area. Maar "het werkt" :)

Het is een beetje kiezen tussen twee kwaden. Ik denk dat dit op zich de
betere optie is.
> 
> [4] Werkt niet op IIS: Daar moet het zijn: return $_SERVER["HTTPS"] ==
> "off" ? FALSE : TRUE;

Dan ga ik maar geen IIS gebruiken :P


-- 
Casper


More information about the Techteam mailing list