Stap 6: achter de schermen
Aangezien het script de databasequery die is gebruikt om de juiste gebruiker te selecteren uitgangen, kunt u zien wat achter de schermen gebeurt. Wanneer u zich aanmeldt als beheerder met de volgende query:
'SELECT * FROM `user` WHERE `email` = \''.$_POST['email'].'\' AND `password` = \''.md5($_POST['password']).'\''
wordt berekend:
'SELECT * FROM `user` WHERE `email` = \'admin AND `password` = \''.md5('top secret password that will never be cracked that fast').'\''
en vervolgens:
'SELECT * FROM `user` WHERE `email` = \'admin AND `password` = \'b655e3f4ae881514c4896b9cd707e4d2\''
en wat is verzonden naar de mysql database is:
SELECT * FROM `user` WHERE `email` = 'admin AND `password` = 'b655e3f4ae881514c4896b9cd707e4d2'
Dus Selecteer het enkel een gebruiker door een e-mailadres en wachtwoord. In dit geval, dit is veilig van de validatie e-mail verwachten. De variabele test OR `id` = 1 OR 1 = ' is niet beveiligd voordat deze is gekoppeld aan de query, zodat we een heleboel slechte dingen hier kan injecteren. De $_POST ['password'] variabele wordt doorgegeven aan de md5() voor haar concated aan de databasequery, dus dit is "per ongeluk veilig" omdat md5() alleen retourneert getallen en tekens, en niets dat onze query kon verpletteren.