Avatar billede thomasgajhede88 Nybegynder
27. oktober 2013 - 23:49 Der er 5 kommentarer og
2 løsninger

Har en fejl jeg ikke kan finde i mit login system

Hej alle sammen .

Jeg er ved at lærer mig selv PHP og det skrider som sådan fremad :) .. men nu er jeg ved at lave et Login system og her er jeg så strandet :( .. jeg kan ikke finde ud af hvorfor jeg ikke kan logge ind og lige meget hvad jeg skriver i mine forms så for jeg error beskeden.

Jeg har prøvet at var_dump $get variablen og den indeholder de rigtige ting fra databasen :)


Håber i kan hjælpe mig :)

mit kode ser så ledes ud..

<?php
$email = $_POST['user'];
$password= $_POST['pass'];
$login = $_POST['login'];
$user_id = $_GET['user_id'];


if($_POST['login'])
{
    global $wpdb;

    $get = $wpdb->get_row("SELECT
                          *
                     
                          FROM
                          das_users
                     
                          WHERE email = '$email' AND password ='" . md5($password) . "'
                     
                          ");

 
    $result = mysql_query($get);
    $count = mysql_num_rows($result);
 
    if($count == 1)
    {   
        session_start();
       
     
        $_SESSION['email'] = $email;
        $get = mysql_fetch_array($get);
        $_SESSION['user_id'] = $get['user_id'];
       
        header("location: http://mysite.com/?id=" . $get['users_id']);
    }
   
    else
    {
       
        $msg="wrong email or password";
    }
}
?>
Avatar billede arne_v Ekspert
28. oktober 2013 - 00:05 #1
Jeg tror at du maaske laver dobbelt query - du kalder mysql_query med retur vaerdi fra $wpdb->get_row og hvis det navn passer saa returnerer den ikke SQL strengen men noget data som ikke er validt til mysql_query.
Avatar billede arne_v Ekspert
28. oktober 2013 - 00:07 #2
Derudover:
* brug ikke global
* din kode er piv aaben overfor SQL injection
* MD5 uden brug af salt er ikke godt
* mysql extension er ikke god (brug mysqli extension eller PDO)
Avatar billede thomasgajhede88 Nybegynder
28. oktober 2013 - 15:32 #3
Hvorfor kan man ikke bruge global $wpdb;..???

Ens mysql statement skulle da være rimelig sikker når man bruger wpdb.. Det står der ihvertfald hos Wordpress

Hvad er det salt gør..?? Ens kode bliver jo ændret så folk ikke kan se ens password.

:)
Avatar billede herlevsen123 Nybegynder
28. oktober 2013 - 23:05 #4
Forestil dig du har en administrator bruger med navnet admin. Hvad sker der hvis jeg skriver admin som brugernavn og som password skriver jeg ' OR 'a' = 'a ?
Så ser din query pludselig sådan her ud:

SELECT
  *
FROM
  das_users
WHERE
  email = 'admin' AND password ='' OR 'a' = 'a'

eftersom a altid er lig a, er det ligemeget om passwordet er forkert. Det er en sql injection.
Avatar billede cht22 Professor
30. oktober 2013 - 16:36 #5
Du kan evt. bruge det her, hvis du ikke kan få det andet til at virke:

http://cht.dk/database/link.php?id=44

Der er dog ikke MD5 i det forum jeg har linket til.
Avatar billede cht22 Professor
31. oktober 2013 - 14:54 #6
Du kan evt. bruge det her, hvis du ikke kan få det andet til at virke:

http://cht.dk/database/link.php?id=44

Oprettelse af bruger virker og der kan logges på.

Det er ikke alle links der virker...

Resten af siderne kan du selv lægge ind :-)
Avatar billede arne_v Ekspert
03. november 2013 - 02:46 #7
Det er generelt bedre at sende variable som argumenter fremfor at bruge global.

Der staar klar ogtydeligt hos Wordpress at den maade du bruger det paa ikke er sikker:

http://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

Pointen med salt kan du laese paa wikipedia:

http://en.wikipedia.org/wiki/Salt_%28cryptography%29

eller i min artikel:

http://www.eksperten.dk/guide/1542
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