ugrás a tartalomhoz

Hogyan jelenjen meg a jelszó a lekérdező karakterláncban kódolva bejelentkezéskor?

thomk · 2009. Szep. 18. (P), 08.46
Sziasztok!
Egy nagy problémába ütköztem.
Adott egy bejelentkező felület, amelyen ha bejelentkezek kiírja a jelszavamat kódolva, és hogy hány sor változott a mysql táblában.
No de. A lekérdező karakterlánba megjelenik a jelszavam teljes valójában.

encode.php?felh=thomk&jelszo=ajelszavam&okay=rendben

íme a kód:
<?php
include "db/database.php"; //a mysql-hez csatizás
$felh = $_GET['felh'];
$jelszo = $_GET['jelszo'];
$kodolt = crypt($jelszo);
if ($kodolt != "" && $felh != "" ){
$parancs = "UPDATE users SET jelszo='$kodolt' WHERE user='$felh'";
mysql_query($parancs);
print "\n\n".$kodolt."\n\n";
print "Változott sorok: ".mysql_affected_rows()." --";
} //igaz itt lehetne másik if is, hogy ha nincs ilyen felh az adatbázisba, akkor addjon hozzá. de az én esetembe ez nem nagyon fontos.
?>
<html>
<form method="get" action="<? print $_SERVER['PHP_SELF'] ?>">Felh:<input type="text" name="felh" />Kódolandó password:<input height="14" width="95" type="password" name="jelszo" /><input height="14" width="50" type="submit" name="okay" value="rendben" /></form>
<?
mysql_close($mysql); ?>



Igaz a crypt helyett használhatnék md5-öt vagy sha5-öt.
Addig jó az egész, hogy az adatbázisba kódolva kerül be, de ne jelenjen már meg rendes valójában a jelszó a böngésző sorban.

Köszönöm előre is a segítséget!
 
1

post

Drawain · 2009. Szep. 18. (P), 09.25
Ne GET-el küldd el a formot, hanem POST-al.

<form method="post" ...
2

és onnan is szedd elő

thgab · 2009. Szep. 18. (P), 11.10

...
$felh = $_POST['felh'];
$jelszo = $_POST['jelszo'];
...
3

és escapeld a felhasználói inputot

zila · 2009. Szep. 18. (P), 16.15
Mert a mostani verziódban ha felhasználónévnek azt adom, hogy:
usernevem' OR '1'='1
Akkor az összes user jelszavát megváltoztattam, innentől meg csak meg kell próbálni belépni az admin vagy webmaster userrel és az általam megadott jelszóval aztán már lehet is garázdálkodni...
4

Köszi..

thomk · 2009. Szep. 19. (Szo), 09.13
Köszi szépen!
Már tudom miért írtam GET-et. :D Mert tegnap lekérdező karakterláncokkal szórakoztam, és a tankönyv azt írta, hogy azokhoz GET kell, és POST-al nem mennek.

Amúgy, zila, kifejtenéd bővebben ezt a biztonsági rést?

EDIT:
Jah az azé van mert, kódolni akarom a jelszavakat mysql-be, és ha beviszed a jelszót akkor azt kódolva rakja be a táblába.
Szal az direkt van úgy. Nyitni fogok egy másik témát kódolás ügyben, mert azzal is gondjaim vannak.
5

ne nyiss másikat

a.d.a.m · 2009. Szep. 19. (Szo), 09.34
sokan, sokszor kérdeztek már ebben a témában. Még cikk is született róla: PHP a frontvonalon, védekezés a bemeneten. Először nézd végig őket, ha mégsem találsz választ a megfogalmazódott kérdéseidre akkor kérdezz bátran.
6

Oks

thomk · 2009. Szep. 19. (Szo), 10.48
Vettem, át olvasom.
Köszönöm megint!
7

aspektusbeli probléma

vbence · 2009. Szep. 19. (Szo), 11.42
A jelszót egyszer kell küldeni, amikor belépsz. Onnantól egy session azonosítót állítasz be (mondjuk cookie-ban), és egy mysql táblában tárolod hogy melyik sessionre melyik felhasználó van belépve.

Egyszerűbb lehetőség, ha a PHP saját session kezelését használod. Ekkor a login.php ami ellenőrzi a jelszó helyességét és ha helyes beállít egy ilyet: od $_SESSION["felh"] = $_POST["felh"] Innentől kezdve a többi PHP már a $_SESSION["felh"] -el dolgozik, és ha ez üres (nem sikerült a belépés) visszadobja a usert a login oldalra. Session autostart esetén nem is kell mással bonyolítanod a kódot.