Avatar billede jm0 Nybegynder
26. juli 2004 - 00:00 Der er 10 kommentarer og
1 løsning

Sikkerhed til login system, bla beskyttelse mod sql injection.

Har dette script til at logge brugere ind:
if(isset($_GET[login])) {
    $kode = md5($_POST[kodeord]);
    $tjek_login = mysql_query("SELECT id,name FROM users WHERE name = '$_POST[brugernavn]' AND password = '$kode'") or print mysql_error();
    $login = mysql_num_rows($tjek_login);
    $fetch_login=mysql_fetch_array($tjek_login);
    if($login == '1') {
        //LOGIN KORREKT
        session_start();
        $_SESSION['s_id'] = $fetch_login["id"];
        $_SESSION['s_name'] = $fetch_login["name"];
        header("Location: index.php");
    } else {
        //LOGIN FORKERT
        echo"<script>alert(\"Forkert Bruger/Kode, Prøv igen!\");</script>";
    }
}
Avatar billede thesurfer Nybegynder
26. juli 2004 - 00:06 #1
Sikkerhedsbristen ligger i din WHERE-betingelse.

Normalt kan man "hacke" en konto, ved at bruge brugernavn "' or 1 = 1" og ikke som password.

Det sikre man sig imod, ved at erstatte ' tegnet. Hvis ' tegnet godt må bruge i brugernavn og/eller password, skal det bare erstattes af 2x '. Dvs: ''
Hvis det *ikke* må bruges i brugernavn og/eller password, skal ' erstattes af ingenting.
Avatar billede thesurfer Nybegynder
26. juli 2004 - 00:09 #2
Eksempler:

$brugernavn = str_replace("'", "", $_POST[brugernavn]);
$kode = str_replace("'", "", $_POST[kodeord]);

$tjek_login = mysql_query("SELECT id,name FROM users WHERE name = '$brugernavn' AND password = '$kode'") or print mysql_error();

muligvis:

$kode = MD5(str_replace("'", "", $_POST[kodeord]));


Nu programmerer jeg i ASP, og ikke PHP, men metoden er den samme.
Avatar billede squashguy Nybegynder
26. juli 2004 - 00:11 #3
$kode = md5($_POST[kodeord]);

$user = $_POST[brugernavn];
if (!get_magic_quotes_gpc()) $user = mysql_magic_quotes($user);

$tjek_login = mysql_query("SELECT id,name FROM users WHERE name = '$user' AND password = '$kode'") or print mysql_error();


hvis magic quotes er sat til on i php.ini, vil alle apostroffer automatisk blive escaped ved submit, derfor if-sætningen

koden behøver man ikke kontrollere, da den laves til en md5-hash først..
Avatar billede thesurfer Nybegynder
26. juli 2004 - 00:11 #4
hmm.. PHP er case-sensitive, eller hva'?

Hvis ja: $kode = md5(str_replace("'", "", $_POST[kodeord]));
(lille "md5")
Avatar billede squashguy Nybegynder
26. juli 2004 - 00:12 #5
dårlig syntax: $_POST[kodeord]
god syntax: $_POST['kodeord']
Avatar billede thesurfer Nybegynder
26. juli 2004 - 00:14 #6
thesurfer != php :-)

Det regnede jeg også med at det ville være.. men så så jeg "$kode = md5($_POST[kodeord]);"..
Avatar billede nikolajdu Nybegynder
27. juli 2004 - 10:30 #7
Hvorfor overhovedet først omregne i php??

$mysql_query("SELECT user_id,name FROM users WHERE name=".$_POST["brugernavn"]." AND password=MD5(".$_POST["kodeord"].") LIMIT 0,1")or die(mysql_error());
Avatar billede squashguy Nybegynder
27. juli 2004 - 13:47 #8
nikolajdu, som thesurfer påpeger,hvis magic quotes er slået fra på serveren, vil dette udgøre en sikkerhedsbrist af karakter..
Avatar billede nikolajdu Nybegynder
27. juli 2004 - 15:55 #9
Nåja da - æv ;-)
Avatar billede jm0 Nybegynder
28. juli 2004 - 12:16 #10
brugte thesurfers kode, opret svar.
Avatar billede thesurfer Nybegynder
28. juli 2004 - 21:15 #11
Det er hermed gjort :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester