Säkert lösenordsskydd på hemsidan

Trädvy Permalänk
Medlem
Registrerad
Apr 2007

Säkert lösenordsskydd på hemsidan

Jag hade tänkt göra en hemsida med lösenordsskydd.

Här är 2 st länkar där det beskrivs hur man kan använda lösenordsskydd med PHP;
http://www.webdesignskolan.se/php/login_basic/login_basic.html
http://susnet.se/homWebPHP2.html

Men hur säkert är egentligen detta?

Jag kom på att man kanske ska ha ett SSL-certifikat för att kryptera den data som skickas (i detta fallet användarnamn och lösenord).

Men jag vill inte lägga några pengar på det så jag hittade denna sidan;
https://lajm.eu/emil/gratis-ssl-certifikat.html

Där det står om ett gratis certifikat som finns här;
https://www.startssl.com/

Är det möjligt att använda detta certifikat på ett webbhotell som endast stödjer PHP och SSI?

Det verkar ju heller inte som det certifikatet stödjer IE.

Är annars detta ett bra och säkert alternativ (Encrypted Password script);
http://www.dynamicdrive.com/dynamicindex9/password.htm

Fractal Design Define R4 | be quiet! SilentWings 2 140mm (x3) | be quiet! Dark Power Pro10, 650W | ASUS Z87-DELUXE ATX | Intel Core i7 4770K 3.5 GHz | Noctua NH-U12S | Corsair 32GB CL10 1866MHz VENGEANCE LP | ASUS GeForce GTX 670 2048MB DirectCUII | Samsung SSD Pro Basic 840-Series 256GB

Trädvy Permalänk
Medlem
Plats
Sandviken
Registrerad
Mar 2005

scriptet du länkar till på DD är inte mycket att hänga i julgranen.
Du kan alltid hasha användarnamn och lösenord med ett salt som servern skickar med då sidan genereras.
Exempel:
Alice besöker sidan login.php
Servern genererar sidan, samt spar undan ett random värde, salt, som associeras till Alices nuvarande session och som skickas till Alice.
Alice matar in hennes användarnamn och lösenord och på sidan så används javascript för att t.ex. SHA eller MD5 hasha strängen "användarnamn" samt "salt+lösenord" exempelvis.
Nu skickar Alice webläsare tillbaka denna information och servern får räkna ut och jämföra samma saker, plocka ut lösenordet från användaren "användarnamn" räkna ut hashen för "salt+lösen" och jämför med det Alice skickade.

Det återstår dock en hel del svårigheter, vad gör man om javascript är avaktiverat?
Hur säkrar man sig mer mot en MITM attack (Man in the middle)... men det får du läsa på mer om

Besök gärna: www.wedlund.eu
Tips på vps:

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jan 2007

Hur säkert ska detta vara?
Du bör klara dig med ett enkelt PHP-script, och ska du inte hantera pengar behöver du knappast SSL.

Trädvy Permalänk
Medlem
Registrerad
Apr 2007

Jag tänkte ha privata bilder på sidan (födelsedagsfest m.m.) och lämna ut användarnamn o lösenord till de som jag vill ska kunna titta på bilderna.

Så det behöver ju inte vara så säkert som om man hanterar pengar. Det skulle ju inte vara så farligt om bara någon enstaka hackar sig in där. Den skulle nog ändå inte få någon nytta av bilderna, tror jag inte iaf.

Tror du ett enkelt php-script som det på susnet räcker då?

Skiljer det förresten något i säkerhet på webdesignskolans och susnets script?

Är det säkrare lösenordsskydd med .htaccess?

Det borde väl vara säkrare med endast ett användarnamn och lösenord som alla har istället för att de får varsitt?

Fractal Design Define R4 | be quiet! SilentWings 2 140mm (x3) | be quiet! Dark Power Pro10, 650W | ASUS Z87-DELUXE ATX | Intel Core i7 4770K 3.5 GHz | Noctua NH-U12S | Corsair 32GB CL10 1866MHz VENGEANCE LP | ASUS GeForce GTX 670 2048MB DirectCUII | Samsung SSD Pro Basic 840-Series 256GB

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jan 2007

Så länge du har ett PHP-skript som är säkert från t.ex. MySQL-injections eller liknande så bör det inte vara några problem. Såvida du inte sätter något trivialt lösenord, dvs.

Det skulle till och med kunna räcka med .htaccess/.htpasswd-skydd. Angående hur många olika användare du ska ha så tror jag nog att fler är bättre; om du då upptäcker att något lösenord kommit ut så kan du helt enkelt ta bort det.

Trädvy Permalänk
Medlem
Plats
Localhost
Registrerad
Mar 2002

Som You säger så behöver du inte göra det superduper säkert för detta ändamål. Jag gjorde ett simpelt loginscript för just samma ändamål som dig för ett tag sen. Och den enda säkerhet jag har är att jag kör md5 på namnet och lösenordet i min session-cookie och i databasen så kör jag med md5 på enbart lösenordet. Säkrare än så lär du inte behöva göra det.

Trädvy Permalänk
Medlem
Registrerad
Apr 2007

Det blir nog ett PHP-skript.

Hur gör man för att köra med md5?

Fractal Design Define R4 | be quiet! SilentWings 2 140mm (x3) | be quiet! Dark Power Pro10, 650W | ASUS Z87-DELUXE ATX | Intel Core i7 4770K 3.5 GHz | Noctua NH-U12S | Corsair 32GB CL10 1866MHz VENGEANCE LP | ASUS GeForce GTX 670 2048MB DirectCUII | Samsung SSD Pro Basic 840-Series 256GB

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jan 2007
Citat:

Ursprungligen inskrivet av Panaz
Det blir nog ett PHP-skript.

Hur gör man för att köra med md5?

$hash = md5($pass . $salt);

Du måste inte ha ett salt, och om du har det måste du spara det med användarnamnet.
Spara aldrig själva lösenordet i databasen, spara bara MD5-hashen.

Trädvy Permalänk
Medlem
Registrerad
Apr 2007

Jag är inte så bra på det här. Skulle vilja ha hjälp med hela koden.

Denna koden ligger överst på min hemsida med namnet "skyddad.php";

<?php
include 'validate.php';

if (! checkValidate($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
header('WWW-Authenticate: Basic realm="Min hemsidas lösenordsskyddade sidor"');
header('HTTP/1.0 401 Authorizied');
echo "Du måste ange korrekt användarnamn och lösenord!";
exit;
}

?>

Denna koden ligger i ett eget dokument med namnet "validate.php";

<?php

function checkValidate($user, $pass) {
//byt ut mot de användarnamn och lösenord du vill ha

$users = array('user1' => 'pass1',
'user2' => 'pass2');

if (isset($users[$user]) && ($users[$user] == $pass)) {
return true;
}
else {
return false;
}
}
?>

Jag har testat detta och det fungerar ju bra men vet inte hur jag ska skriva in hash-koden.

Läste att SHA1 ska vara säkrare än MD5.

Vilket är databasen. Är det de sidor som syns på nätet, i detta fallet skyddad.php?

Ska man hitta på hash strängen själv? Bara skriva t.ex. sdf768g6fh57dh78dgh?

Hittade denna koden på en sida, är det kanske något liknande som man ska skriva?

<form action="login.php" method="post"
onsubmit="this.md5sum.value = md5(this.password.value); this.password.value=''; return true;">
<input type="text" name="username" /> Användarnamn
<input type="text" name="password" /> Lösen
<input type="hidden" name="md5sum" />
</form>

Hittade även detta;

<?php
$str = 'apple';

if (md5($str) === '1f3870be274f6c49b3e31a0c6728957f') {
echo "Would you like a green or red apple?";
exit;
}
?>

Skulle vara tacksam för mer hjälp!

Fractal Design Define R4 | be quiet! SilentWings 2 140mm (x3) | be quiet! Dark Power Pro10, 650W | ASUS Z87-DELUXE ATX | Intel Core i7 4770K 3.5 GHz | Noctua NH-U12S | Corsair 32GB CL10 1866MHz VENGEANCE LP | ASUS GeForce GTX 670 2048MB DirectCUII | Samsung SSD Pro Basic 840-Series 256GB

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Apr 2003
Citat:

Ursprungligen inskrivet av Panaz

Vilket är databasen. Är det de sidor som syns på nätet, i detta fallet skyddad.php?

Det scriptet på susnet använder ingen databas utan en array med användarnamn och lösenord.

Trädvy Permalänk
Medlem
Registrerad
Apr 2007
Citat:

Ursprungligen inskrivet av hamre
Det scriptet på susnet använder ingen databas utan en array med användarnamn och lösenord.

Går det inte att hasha användarnamnet och lösenordet om man inte har en databas?

Fractal Design Define R4 | be quiet! SilentWings 2 140mm (x3) | be quiet! Dark Power Pro10, 650W | ASUS Z87-DELUXE ATX | Intel Core i7 4770K 3.5 GHz | Noctua NH-U12S | Corsair 32GB CL10 1866MHz VENGEANCE LP | ASUS GeForce GTX 670 2048MB DirectCUII | Samsung SSD Pro Basic 840-Series 256GB

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jan 2007
Citat:

Ursprungligen inskrivet av Panaz
Går det inte att hasha användarnamnet och lösenordet om man inte har en databas?

Jodå. Ta t.ex. den här PHP-koden:

<?php function checkValidate($user, $pass) { // Fyll i genererade hashar, slå in "användare:lösenord" i en md5-generator $hashes = array('första hashen', 'andra hashen' ); $md5 = md5($user . ":" . $pass); return in_array($md5, $hashes); } ?>

MD5-hashar kan du generera här.

Trädvy Permalänk
Medlem
Registrerad
Apr 2007

Vad har jag gjort för fel?

Jag fyllde i detta i koden och döpte den till hash.php:

Citat:

<?php
function checkValidate($user, $pass) {
// Fyll i genererade hashar, slå in "användare:lösenord" i en md5-generator
$hashes = array('24c9e15e52afc47c225b757e7bee1f9d:a722c63db8ec8625af6cf71cb8c2d939',
'andra hashen' );

$md5 = md5($user . "24c9e15e52afc47c225b757e7bee1f9d:a722c63db8ec8625af6cf71cb8c2d939" . $pass);
return in_array($md5, $hashes);
}
?>

Jag la till include 'hash.php'; som man ser nedan överst i skyddad.php;

Citat:

<?php
include 'validate.php';
include 'hash.php';

if (! checkValidate($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
header('WWW-Authenticate: Basic realm="Min hemsidas lösenordsskyddade sidor"');
header('HTTP/1.0 401 Authorizied');
echo "Du måste ange korrekt användarnamn och lösenord!";
exit;
}

?>

Och validate.php lät jag vara som den är;

Citat:

<?php

function checkValidate($user, $pass) {
//byt ut mot de användarnamn och lösenord du vill ha

$users = array('user1' => 'pass1',
'user2' => 'pass2');

if (isset($users[$user]) && ($users[$user] == $pass)) {
return true;
}
else {
return false;
}
}
?>

Fractal Design Define R4 | be quiet! SilentWings 2 140mm (x3) | be quiet! Dark Power Pro10, 650W | ASUS Z87-DELUXE ATX | Intel Core i7 4770K 3.5 GHz | Noctua NH-U12S | Corsair 32GB CL10 1866MHz VENGEANCE LP | ASUS GeForce GTX 670 2048MB DirectCUII | Samsung SSD Pro Basic 840-Series 256GB

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jan 2007
Citat:

Ursprungligen inskrivet av Panaz
Vad har jag gjort för fel?

Du ska inte hasha användarnamn och lösenord var för sig, du ska skapa en hash av hela strängen "användarnamn:lösenord"; dvs. om du vill ha användarnamnet "user" och lösenorder "pass" så slår du in "user:pass" i md5-generatorn och får hashen "21a39285884a268d6458e3fdeb08bea".

Trädvy Permalänk
Medlem
Registrerad
Apr 2007

Tack så väldigt mycket för hjälpen det fungerar ju klockrent!

Jag kom på att på denna raden behöver man ju inte fylla i något;

$md5 = md5($user . ":" . $pass);

Den filen som innehåller lösenordet (validate.php) ska man lägga den i en egen mapp så att den blir svårare att komma åt?

Går det att fixa så att jag kan se vilka användare som har loggat in? Eller det kanske inte är så bra med tanke på säkerheten?

Ifall jag inte vet vilket användarnamn som loggat in så blir det ju svårt att lista ut vilket lösenord jag ska byta om något missbrukas!

Fractal Design Define R4 | be quiet! SilentWings 2 140mm (x3) | be quiet! Dark Power Pro10, 650W | ASUS Z87-DELUXE ATX | Intel Core i7 4770K 3.5 GHz | Noctua NH-U12S | Corsair 32GB CL10 1866MHz VENGEANCE LP | ASUS GeForce GTX 670 2048MB DirectCUII | Samsung SSD Pro Basic 840-Series 256GB