inloggen php onveilig
Ik heb in php een standaard php inlogmodule gemaakt. Het wachtwoord staat dmv md5() functie van php ge-encrypt in de database..
Maar als ik bij een client inlog zou het ww eerst naar de server moeten worden gestuurd, en is dan dus nog niet ge-encrypt.. php is overigens serverside.
Maar goed, het wachtwoord is niet ge-encrypt tijdens route naar server dus.Met andere woorden, tis onveilig.. De browser van de client moet het dus encrypten.. iemand enig idee hoe? waarschijnlijk wordt het dan dus java..
javascript idd
weet je misschien waar ik daar meer info over kan vinden ?
http://www.google.com :/
Gewijzigd op 27/10/2004 11:45:00 door Eris -
gebruik deze:http://pajhome.org.uk/crypt/md5/md5.js
en dan op deze manier:
<script type="text\javascript" src="md5.js" />
<form onsubmit="this.password.value = md5(this.password.value);">
En dan:
Code (php)
Maar het JS bestand draait dan toch dan nog steeds aan de serverkant waardoor ww ongecodeerd over netwerk wordt verzonden ??
JS draait client-side.
En let op! Je hebt je pass nu al als MD5 hash verzonden, moet je um niet weer MD5'en ^^
2de is voor als je javascript uit heb staan...
dit heb ik .. en moet dus met gebruik van JS gekoppeld worden..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<? session_start();
if ($_POST['login'])
{
$loginnaam = $_POST['loginnaam'];
$wachtwoord= md5($_POST['wachtwoord']);
selecteerDB('database');
$query="SELECT * FROM gebruiker WHERE gebruikersnaam='$loginnaam' AND wachtwoord='$wachtwoord'";
$result=mysql_query($query);
if (mysql_num_rows($result)==1)
{
$obj=mysql_fetch_object($result);
//kijk of de gebruiker actief is.
if($obj->geactiveerd=='0')echo"<script>alert('U bent niet (meer) geactiveerd en kunt niet inloggen.')</script>";
else
{
$_SESSION['gebruikersid'] =$obj ->id;
$_SESSION['gebruikersnaam'] =$loginnaam;
$_SESSION['gebruikerstype'] =$obj->type;
$_SESSION['lokatieid'] = $obj-> lokatieid;
echo"<SCRIPT>document.location.href='http://test.php'";
}
}
else
{
echo"<script>alert('Onjuiste loginnaam/wachtwoord')</script>";
}
}
?>
if ($_POST['login'])
{
$loginnaam = $_POST['loginnaam'];
$wachtwoord= md5($_POST['wachtwoord']);
selecteerDB('database');
$query="SELECT * FROM gebruiker WHERE gebruikersnaam='$loginnaam' AND wachtwoord='$wachtwoord'";
$result=mysql_query($query);
if (mysql_num_rows($result)==1)
{
$obj=mysql_fetch_object($result);
//kijk of de gebruiker actief is.
if($obj->geactiveerd=='0')echo"<script>alert('U bent niet (meer) geactiveerd en kunt niet inloggen.')</script>";
else
{
$_SESSION['gebruikersid'] =$obj ->id;
$_SESSION['gebruikersnaam'] =$loginnaam;
$_SESSION['gebruikerstype'] =$obj->type;
$_SESSION['lokatieid'] = $obj-> lokatieid;
echo"<SCRIPT>document.location.href='http://test.php'";
}
}
else
{
echo"<script>alert('Onjuiste loginnaam/wachtwoord')</script>";
}
}
?>
Als security zo'n probleem is zet heel je website dan https, en gebruik dan alsnog logins/paswoord voor de eigenlijke access op je systeem (https werkt niet noodzakelijk zelf met paswoorden)
ja dat lijkt mij ook beter
Maar als je een echte hele veilige site wilt bouwen met creditcard nummers dan maakt dan beetje geld ook niet zo veel uit he
http://pajhome.org.uk/crypt/md5/md5.js
nou "echt" veilig, ik heb nie zo veel verstand van java :(.
Is dat script van: nou "echt" veilig, ik heb nie zo veel verstand van java :(.
???
Hij zet de md5 wachtwwoord om meer niet....
http://www.polar-lights.com/hackerhunter/ ... deze mensen zijn al een tijdje bezig met het maken van login beveiliging (php) en hun script schijnt vrijwel even safe data te versturen als SSL encryptie , en dat met javascript en zonder extra kosten van SSL , ze kunnen je vast tips geven.
Ik kan je aanraden om beveiligings vragen hier te doen : Sander:
Is dat script van: http://pajhome.org.uk/crypt/md5/md5.js
nou "echt" veilig, ik heb nie zo veel verstand van java :(.
nou "echt" veilig, ik heb nie zo veel verstand van java :(.
Het is JavaScript.
Is wel leuk om te weten maar Java zelf heeft geen ingebouwde functie voor MD5
Uhm, echt veilig is je site nu nog steeds niet. Je kunt zo iemands sessies stelen en daarmee alsnog inbreken. Maak dus ook een sessie met iemands ip adres en vergelijk dit steeds met de $_SERVER['REMOTE_ADDR'] variabele. Dan pas krijg je een enigsinds waterdichte beveiliging. Voor de zekerheid ook even de variabele door addslashes heen halen. Dr zijn altijd freaks die je query proberen te veranderen waardoor je script denkt dat je toegang hebt.
Hoe wou je een sessie stellen of veranderen?
Lees de php hacking guide op phpfreakz en je begrijpt waarom ;)
Ben met je eens dat deze manier wel te hacken is maar zie je tegenwoordig zelde
index.php?PHPSESSID=deSessieID
Maar als PHP een cookie op jouw computer zet, hoe wou je er dan bij komen?
En hoe wij jij komen in de map met die sessie gegevens? Met Remote PHP execution? Als het goed is doet iemand dat niet een variabelen include, dan ben je namelijk ook vat baar voor o.a. de santy worm
-------
Als ik een denk fout maak, wijs me er dan op. Maar mijn conclusie:
- Erg veel werk, kans op resultaat bij goed geprogrammeerde site 1%
Je script is dus niet meteen gevoelig, maar het is meestal een samenloop van omstandigheden, maar zorg dus dat je altijd controleert dat degene die van de sessie gebruikmaakt ook de sessie mag gebruiken. Door bij het aanmaken van je sessie een ip adres in de sessie te zetten en deze iedere keer te controleren met het ip adres uit de $_server['REMOTE_ADDR'] variabele dan weet je dat die gebruiker ook de rechten mag krijgen. Kwestie van enkele regels code en altijd goed opletten of er geen misbruik van zaken gemaakt kunnen worden.
Mensen die geen md5 hash of iets dergelijks gebruiken: altijd wachtwoorden en usernames door add_slashes heen halen, anders kun je sql injection toepassen. T is niet de eerste keer dat ik dit soort problemen ben tegengekomen. Deze laatste hacking methode is veel gevaarlijker. Je bent dan in 1 seconde ingelogd als admin met alle gevolgen van dien. Even een voorbeeldje om het uit te leggen.
Stel je hebt de volgende code:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
include "config.php"; //mysql verbinding
$check = mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='$username' AND wachtwoord='$wachtwoord'"));
if($check == 1) {"
$login = 1;
Session_Register("login")
}
?>
include "config.php"; //mysql verbinding
$check = mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='$username' AND wachtwoord='$wachtwoord'"));
if($check == 1) {"
$login = 1;
Session_Register("login")
}
?>
Dit is maar een klein voorbeeldje waar dus ook voorstaand lek in voorkomt. Als je nu als gebruikersnaam en wachtwoord het volgende intypt:
a' or '1'='1' or 'b dan wordt de query:
SELECT * FROM users WHERE username='a' or '1'='1' or 'b' and wachtwoord ='a' or '1'='1' or 'b'
Mensen die SQL beter kennen weten dat je in een query vergelijkingen kunt doen. Deze vergelijking is altijd waar, dus zal mysql_num_rows waarschijnlijk een 1 teruggeven. Resultaat is dat je ingelogd bent. Door add_slashes te gebruiken worden de quotjes eruit gehaald en kan deze hacking methode dus niet gebruikt worden.
Voor meer info zie dus die hacking guide op phpfreakz die zeker de moeite waard is om een keer door te nemen.
Gewijzigd op 28/01/2005 15:58:00 door Jeroen van Lieshout