Autor | Zpráva | ||
---|---|---|---|
Kardif Profil * |
#1 · Zasláno: 17. 2. 2010, 08:28:54
Potřebuju přihlásit lidi z phpbb databáze na svojí stránce, jenomže nemůžu přijít jak na to normálně bych použil tenhle kod:
session_start(); if(isset($_POST['jmeno'])){ require_once 'db.php'; $name = $_POST['jmeno']; $pass = $_POST['heslo']; echo $pass $query = mysql_query("SELECT * FROM `uziv` WHERE `meno` = '$name' and `heslo` = '$pass'") or die (mysql_error()); $Vysledek = mysql_fetch_array($query); if($Vysledek['meno']){ // Do sessions si uložíme pár informací o přihlášeném $_SESSION['prihlasen'] = 1; $_SESSION['login'] = $Vysledek['username']; $_SESSION['UserId'] = $Vysledek['user_id']; $_SESSION['prava'] = $Vysledek['prava']; }else{ echo "Bohužel jste zadali špatné jméno nebo heslo"; } mysql_free_result($query); }else{ echo "Zde nic není."; } ob_end_flush(); Jenomže phpbb má heslo v hashi, kterej je prý nerozluštelnej :D. Takže tenhle kod jaksi nefunguje. Předem děkuji za každou pomoc. |
||
Majkl578 Profil |
#2 · Zasláno: 17. 2. 2010, 09:54:38
Jaký je problém s hashováním pomocí jejich funkce?
|
||
AM_ Profil |
#3 · Zasláno: 17. 2. 2010, 11:06:27
Kardif:
„Jenomže phpbb má heslo v hashi, kterej je prý nerozluštelnej :D“ jasně, hesla rozluštit nelze, ale o jaký hash se jedná lze zjistit většinou na pohled (32 hexa znaků - MD5, teď nevím jak přesně dlouhý je SHA1). Hashovací algoritmy má PHP zabudované přímo jako funkce md5() a sha1(). |
||
tiso Profil |
#4 · Zasláno: 17. 2. 2010, 12:35:34
Kardif: stačí sa pozrieť ako má prihlasovanie riešené phpbb a použiť ho na svojej stránke.
|
||
Kardif Profil * |
#5 · Zasláno: 17. 2. 2010, 12:39:53
:D:D Tak prohrabávat se kodem se 50000 řádky a hledat kde to má fuknci na přihlášení to vidím bledě.
No ale mělo by se používat tohle:phpbb_hash() ale i když to použiju tak se mi nic nevypíše ani chyba prostě prázdnej list |
||
AM_ Profil |
#6 · Zasláno: 17. 2. 2010, 13:01:27
Kardif:
No pokud já vím tak BBčko používá MD5, přesně tohle jsem jednou dělal - web s přihlašováním a účty jsem převzal z phpBB, které běželo na md5. Pokud máš nějakou jinou verzi, tak se v tom holt budeš muset prohrabat. Programátoři phpBB zřejmě nejsou takoví dobytci, aby phpbb_hash() něco vypisovalo na standardní výstup. Z tvého posledního příspěvku opravdu nic nevyvěštíme, a holt je na tobě tu funkci prozkoumat pokud se nechová jak bys čekal nebo si najít dokumentaci k phpBB. |
||
Majkl578 Profil |
#7 · Zasláno: 17. 2. 2010, 13:02:48 · Upravil/a: Majkl578
Kardif:
PHPBB má také tzv. Code Reference. Tam by jsi to zjistil velice rychle. Viz funkce phpbb_hash. |
||
nightfish Profil |
#8 · Zasláno: 17. 2. 2010, 13:03:33
předpokládám, že hledáš spíš phpbb_check_hash() (nachází se ve functions.php)
|
||
Kardif Profil * |
#9 · Zasláno: 17. 2. 2010, 13:33:42
Tak sem to udělal takhle a stejně nic bílá stránka :-(
<?php ob_start(); session_start(); define('IN_PHPBB', true); include_once ("/includes/functions.php"); if(isset($_POST['jmeno'])){ require_once 'db.php'; $name = $_POST['jmeno']; $pass = phpbb_check_hash($_POST['heslo']); echo $pass $query = mysql_query("SELECT * FROM `phpbb_users` WHERE `username` = '$name' and `user_password` = '$pass'") or die (mysql_error()); // Vybereme uživatele se zadaným jménem a heslem $Vysledek = mysql_fetch_array($query); if($Vysledek['username']){ // pokud tato proměnná obsahuje data, bylo zadané správné jméno a heslo // Do sessions si uložíme pár informací o přihlášeném $_SESSION['prihlasen'] = 1; $_SESSION['login'] = $Vysledek['username']; $_SESSION['UserId'] = $Vysledek['user_id']; $_SESSION['prava'] = $Vysledek['prava']; }else{ echo "Bohužel jste zadali špatné jméno nebo heslo"; } mysql_free_result($query); }else{ echo "Zde nic není."; } ob_end_flush(); ?> |
||
Majkl578 Profil |
#10 · Zasláno: 17. 2. 2010, 13:45:29
Na řádku 11 je chyba syntaxe - chybí středník.
Doporučuji zapnout chybové hlášky. |
||
shaggy Profil |
#11 · Zasláno: 17. 2. 2010, 17:33:15
Kardif:
Predpokladám, že si si neprečítal popis funkcie na stránke phpbb. Pretože by si vedel, že tvoj riadok č. 10 $pass = phpbb_check_hash($_POST['heslo']); nemôže fungovať, pretože: 1. funkcia porovnáva heslo s hashom, ktorý je v db a ty jej predávaš iba jednu premennú, 2. aj keby jej stačila iba premenná heslo, tak $pass by sa rovnalo iba true alebo false. A potom by nasledujúci riadok $query = mysql_query("SELECT * FROM `phpbb_users` WHERE `username` = '$name' and `user_password` = '$pass'") aj tak neprešiel, pretože žiadny z používateľov nemá heslo, ktoré sa rovná true alebo false. Preto by si mal: 1. po prihlásení vybrať z DB stĺpce user_id, prava a heslo (resp. jeho hash) pre používateľa, ktorého username sa rovná tomu, ktoré zadal pri prihlasovaní. 2. overiť, či sa jeho heslo zhoduje s heslom po prihlásení, čiže: $isPass = phpbb_check_hash($_POST['heslo'], $Vysledek['heslo']); a ak bude $isPass true, tak ho "prihlásiš" (nastavíš hodnoty session). Samozrejme ber ten môj kód ako ilustračný, treba si ošetriť vstupy a prispôsobiť si svojim potrebám. |
||
Kardif Profil * |
#12 · Zasláno: 17. 2. 2010, 20:00:42
No tak sem to předělal, ale stejně to nefunguje myslým že je to v tom true a v tej podmínce (teď se trochu stydím, ale tak něják sem ještě nepoužíva true a fals)
<?php ob_start(); session_start(); define('IN_PHPBB', true); include_once ("/includes/functions.php"); if(isset($_POST['jmeno'])){ require_once 'db.php'; $name = $_POST['jmeno']; $pass = $_POST['heslo']; $query = mysql_query("SELECT * FROM `phpbb_users` WHERE `username` = '".$name."'") or die (mysql_error()); // Vybereme uživatele se zadaným jménem a heslem $Vysledek = mysql_fetch_array($query); $isPass = phpbb_check_hash($_POST['heslo'], $Vysledek['heslo']); if ($isPass == true) { $query2 = mysql_query("SELECT * FROM `phpbb_users` WHERE `user_id` = '".$Vysledek['user_id']."'") or die (mysql_error()); $Vysledek2 = mysql_fetch_array($query2); $_SESSION['prihlasen'] = 1; $_SESSION['login'] = $Vysledek2['username']; $_SESSION['UserId'] = $Vysledek['user_id']; $_SESSION['points'] = $Vysledek['user_points']; }else{ echo "Bohužel jste zadali špatné jméno nebo heslo"; } mysql_free_result($query); }else{ echo "Zde nic není."; } ob_end_flush(); ?> Už jsem z toho docela konsternovanej :-). |
||
AM_ Profil |
#13 · Zasláno: 17. 2. 2010, 20:44:24
|
||
Kardif Profil * |
#14 · Zasláno: 17. 2. 2010, 21:05:31
:D Zajímavý čtení, né že by to pomohlo, ale díky ;-)
|
||
AM_ Profil |
#15 · Zasláno: 17. 2. 2010, 21:19:47
Kardif:
:-DD to myslíš vážně? [#12] Kardif to myslíš že si ten kód budeme instalovat na localhost, vedle toho phpBB a zjišťovat, proč ti to nešlape? ten odkaz tě měl přivést k tomu, aby ses alespoň obtěžoval dodat chybu. A jestli ti to neháže chybovou hlášku, tak zapojit echo, var_dump atd, vypsat si klíčové proměnné v klíčových místech a zjistit, proč ti to nefunguje. Kdybych já běžel na fórum s každou funkcí, která se nechová tak, jak bych čekal, tak tu udělám denně deset vláken, to je holt otrocká programátorská práce na to přijít, a ne někam plácnout kód aby na to přišli ostatní. „že je to v tom true a v tej podmínce“ co je v true? true je hodota, v ní nic není. V podmínce je toho spoustu, třeba můj kamarád, který řídil pod vlivem alkoholu. Ne že by tahle věta nějak pomohla nám. |
||
Kardif Profil * |
#16 · Zasláno: 17. 2. 2010, 21:41:44
Jo díky Nakonec sem to udělal trochu jinak :D No dost jinak :D Ale otevřel si mi oči
|
||
Nadan Profil |
#17 · Zasláno: 17. 2. 2010, 21:51:48
Kardif:
Jak jsi to udělal? :-D |
||
Kardif Profil * |
#18 · Zasláno: 17. 2. 2010, 22:10:01
No přpsal jsem ve function.php ověřování, takže při ověřování to udělá z toho phpbb_hashe MD5 a to už pak jde porovnat v pohodě
|
||
Časová prodleva: 13 let
|
0