inloggen php onveilig

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis vp

dennis vp

27/10/2004 10:27:00
Quote Anchor link
Hee php gasten!
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..
 
PHP hulp

PHP hulp

27/11/2024 01:55:34
 
B a s
Beheerder

B a s

27/10/2004 10:35:00
Quote Anchor link
javascript idd
 
Dennis vp

dennis vp

27/10/2004 10:49:00
Quote Anchor link
weet je misschien waar ik daar meer info over kan vinden ?
 
Eris -

Eris -

27/10/2004 11:44:00
Quote Anchor link
http://www.google.com :/
Gewijzigd op 27/10/2004 11:45:00 door Eris -
 
Dennis vp

dennis vp

27/10/2004 12:05:00
Quote Anchor link
ik las dit:

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
if ($_POST['password'] != $password && md5($_POST['password']) != $password)
{

     //fout
}
?>


Maar het JS bestand draait dan toch dan nog steeds aan de serverkant waardoor ww ongecodeerd over netwerk wordt verzonden ??
 
Mitch X

Mitch X

27/10/2004 12:27:00
Quote Anchor link
Nee!
JS draait client-side.

En let op! Je hebt je pass nu al als MD5 hash verzonden, moet je um niet weer MD5'en ^^
 
Dennis vp

dennis vp

27/10/2004 12:46:00
Quote Anchor link
2de is voor als je javascript uit heb staan...
 
Dennis vp

dennis vp

27/10/2004 14:00:00
Quote Anchor link
ik kom niet echt verder...
dit heb ik .. en moet dus met gebruik van JS gekoppeld worden..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<? 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>";
        }
    }

    ?>
 

17/11/2004 11:23:00
Quote Anchor link
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)
 
Christophe

christophe

17/11/2004 12:53:00
Quote Anchor link
ja dat lijkt mij ook beter
 

12/01/2005 14:04:00
Quote Anchor link
idd ssl is beter maar je moet dan nig wel ssl hebben en meestal moet je daarvoor bijbetalen bij je host.
Maar als je een echte hele veilige site wilt bouwen met creditcard nummers dan maakt dan beetje geld ook niet zo veel uit he
 
Sander

Sander

12/01/2005 15:27:00
Quote Anchor link
Is dat script van: http://pajhome.org.uk/crypt/md5/md5.js
nou "echt" veilig, ik heb nie zo veel verstand van java :(.
 
Sander

Sander

13/01/2005 12:24:00
Quote Anchor link
???
 
Eris -

Eris -

13/01/2005 13:24:00
Quote Anchor link
Hij zet de md5 wachtwwoord om meer niet....
 

24/01/2005 20:49:00
Quote Anchor link
Ik kan je aanraden om beveiligings vragen hier te doen : 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.
 

24/01/2005 20:52:00
Quote Anchor link
Sander:
Is dat script van: http://pajhome.org.uk/crypt/md5/md5.js
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
 
Jeroen van Lieshout

Jeroen van Lieshout

26/01/2005 14:21:00
Quote Anchor link
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.
 

26/01/2005 14:42:00
Quote Anchor link
@Jeroen
Hoe wou je een sessie stellen of veranderen?
 
Jeroen van Lieshout

Jeroen van Lieshout

28/01/2005 13:49:00
Quote Anchor link
Lees de php hacking guide op phpfreakz en je begrijpt waarom ;)
 

28/01/2005 14:10:00
Quote Anchor link
Als je goed programmeerd dan is je website niet te (helemaal) te hacken.

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%
 
Jeroen van Lieshout

Jeroen van Lieshout

28/01/2005 15:51:00
Quote Anchor link
Je moet natuurlijk altijd als hacker een beetje vertrouwen op "onozele" webmasters die ervanuit gaan dat er niets gebeurd op een site. Stel je hebt een gastenboek op je website met ubb parser. Deze is slecht beveiligd en je zet in een link een javascriptje die al je gegevens van je cookie doorstuurt naar een door hem gemaakte pagina. Als jij of iemand anders zo dom is om dan op die link te klikken heeft de hacker je cookie. Die kan em zelf setten en meteen je sessie overnemen zonder dat je het weet.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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")
}

?>

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.