error
7 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
spravil som si php kod na login no vyhadzuje mi stale toto Parse error: syntax error, unexpected T_IF in /home/free/yw.sk/k/klodye/root/www/reg/login.php on line 46 vedeli by ste mi pomoct aku mam v kode chybu?Kod viz. nizzsie za pomoc vopred dakujem <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Untitled Document</title> </head> <body> <?php session_start(); function index() { echo "<form action='?act=login' method='post'>" ."Uzivatelske meno: <input type='text' name='user' size='30'>" ."Heslo: <input type='password' name='password' size='30'>" ."<input type='submit' value='Prihlasit'>" ."</form>"; } function login() { $user = $_REQUEST['user']; $password = $_REQUEST['password']; $connect = mysql_connect("host", "login", "password"); if(!$connect){ die(mysql_error()); } $select_db = mysql_select_db ("database", $connect); if(!$select_db) { die(mysql_error()); } $result = mysql_query("SELECT * FROM users WHERE user = '$user' AND password = '$password'"); $row = mysql_fetch_array($result); $id = $row['id']; $select_user = mysql_query("SELECT * FROM users WHERE id = '$id'"); $row2 = mysql_fetch_array($select_user); $user2 = $row2['user'] if($user !=$user2){ die("Usernameiswrong!"); } $pass_check = mysql_query("SELECT * FROM users WHERE user = '$user' AND id = '$id'"); $row3 = mysql_fetch_array($pass_check); $email = $row3['email']; $select_pass = mysql_query("SELECT * FROM users WHERE user = '$user' AND id='$id' AND email = '$email'"); $row4 = mysql_fetch_array($select_pass); $real_password = $row4['password']; if($password != $real_password) { die('Nespravne heslo'); } session_register("user", $user); session_register("password", $password); echo "Welcome,".$user."please come here <a href=index.php>Index</a>" } switch($act) { default; index(); break; case "login"; login(); break; } ?> </body>
-
<HTML>Chtělo by to říct, který je řádek 46. Ale každopádně tady ti chybí středník: <code> $user2 = $row2['user'] </code></HTML>
-
Každopádně těch středníků tam bude chybět víc ... ;)
-
<HTML>Jen tak mimochodem doufám, že až odstraníte všechny syntaktické chyby, že váš systém nebude v ostrém provozu. Těch několik dotazů na jednoho usera a zjišťování, zda se 1 opravdu rovná 1... Myslím, že se dá SQL injection předejít i jinak, mnohem jednodušším a spolehlivějším způsobem.</HTML>
-
$result = mysql_query(" SELECT * FROM users WHERE (user = '$user' AND password = '$password') OR (user = '$user' AND id = '$id' AND email = '$email') OR (user = '$user' AND id = '$id') OR (id = '$id') "); Hm? :) Jenom treba zacit delsi podminkou, aby nebyl preskocena
-
<HTML>Nikoliv, peto, nepochopils, proč to tazatel dělá. Tvůj kód je dobrý pro přihlášení, pokud to lze několika způsoby. Tazatel však na základě jména a hesla zjistí ID, na základě toho ID zjistí jméno a porovná. To je prakticky 1 = 1. Pak zjistí email (tenhle dotaz je naprosto zbytečný) a potom heslo a zase porovná. To je 1×2 = 1×2. Je to dobré pouze na jednu věc - má to zabránit SQL injection typu jméno = ' OR 1=1 apod. Nezabrání to zajímavějším druhům SQL injection (jméno = '; UPDATE users SET password = tohlehesloznam WHERE id = 1 -- zbytek je komentář) (ano, starší MySQL tohle naštěstí neumí) a potřebuje to 4 dotazy (vlastně 3, jeden je FAKT zbytečný) místo jednoho.</HTML>
-
Nípal (moderátor) :) SQL dotaz najdi uzivatele a vsechny udaje o nej. Pak vsechny tyhle udaje porovnej ifem. jméno = ' OR 1=1 toto mu nemuze nastat, pokud dusledne odfiltuje nezadouci znaky, jako je = ze jmena a mezery a dalsi V podstate jsem chtel rici neco podobne, jako ty, ze tam naprosto zbytecne vola 4x SQL, ze by mu v podstate stacil jeden dotaz, kterym se bud uzivatel prihlasi pres mail nebo nick nebo id a prislo mi to podobne formularum Zapomenute heslo.