Autor | Zpráva | ||
---|---|---|---|
Sobky Profil |
#1 · Zasláno: 27. 7. 2014, 19:24:15
Dobrý deň!
Prosím Vás ako mám spraviť aby si internet zapamätal prihlásenie? Mám tento script: <?php $server = "localhost"; $dbuser = "saffasfafa7"; $dbpass = "dsafghj"; $dbname = "asfgshbs"; $mysqli = new mysqli("$server", "$dbuser", "$dbpass", "$dbname"); $query="SELECT pass FROM administration"; $result = mysqli_query($mysqli, $query); while($row = mysqli_fetch_array($result)) { $heslicko = $row['pass']; } if(isset($_POST['submit'])){ $heslo = $_POST['heslo']; $heslo = md5($heslo); if($heslo == $heslicko) { include('administracia.php'); exit(); } } ?> <html xmlns='http://www.w3.org/1999/xhtml' lang='sk'> <head> <title>Invite list</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="author" content="SobkyLuckSK"> <link rel="stylesheet" type="text/css" href="css/admin.css"> <script type="application/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> </head> <body> <img class="logo" src="http://www.magicraft.4fan.cz/wp-content/uploads/2014/06/MAGICRAFT-3.png"> <form action="" method="POST"> <fieldset class="table"> <legend><p style="font-size: 2em; color: gold; font-weight: bold">Administrácia</p></legend> <table width="100%"> <tr> <td width="80%" align="center"><input type="text" class="nick" name="nick" tabindex="1" size="25" placeholder="Admin"></td> </tr> <tr> <td width="80%" align="center"><input type="password" class="heslo" name="heslo" tabindex="2" size="25" placeholder="Heslo"></td> </tr> <tr> <td colspan="4" align="center"><input type="submit" name="submit" class="tlacitko" value="Prihlásiť" tabindex="3"></td> </tr> </table> </fieldset> </form> </body> </html> |
||
Fisir Profil |
#2 · Zasláno: 27. 7. 2014, 19:27:46
Reaguji na Sobkyho:
Buď pomocí sessions , nebo cookies .
|
||
Taps Profil |
#3 · Zasláno: 27. 7. 2014, 19:47:58
Sobky:
použití cookies - http://pecan.cz/index.php?id=42&n=prace-s-cookies |
||
Skilerko123 Profil |
#4 · Zasláno: 27. 7. 2014, 20:13:02
Sobky sprav to cez podmienku ak bude zaškrtnuté zapamätal prihlásenie nastav cookie na týžden napríklad ak nie daj to na hodinu a hotovo :)
|
||
Sobky Profil |
#5 · Zasláno: 27. 7. 2014, 22:29:46
A kde to mám umiestniť v tom scripte?
|
||
jenikkozak Profil |
#6 · Zasláno: 27. 7. 2014, 22:55:01
Před příkaz
include na 18. řádku.
|
||
Sobky Profil |
#7 · Zasláno: 27. 7. 2014, 23:15:47
Len keby som vedel čo tam mam napísať. Z toho sessions a cookies som upne vypečený. Už som čítal xy stránok o tom ale stále tomu nechápem
|
||
Davee Profil * |
#8 · Zasláno: 27. 7. 2014, 23:43:44
Já používám něco takového
if(isset($_POST['remember'])){ setcookie("cookname", $_SESSION['ucet'], time()+60*60*24*100, "/"); setcookie("cookpass", $_SESSION['heslo'], time()+60*60*24*100, "/"); } |
||
Sobky Profil |
#9 · Zasláno: 27. 7. 2014, 23:48:40
iba toto? a funguje to? INak v tom $_session ten ucet a heslo tak možem dať hocičo alebo podla niečoho je to určené?
|
||
Skilerko123 Profil |
#10 · Zasláno: 28. 7. 2014, 00:03:53
Davee ktorý ... ukladá heslo do cookie ?? Sprav to takto :
<?php if (isset($_save)){ setcookie("cookname", $_SESSION['ucet'], time()100, "/"); } else{ setcookie("cookname", $_SESSION['ucet'], time()22222222222, "/"); } ?> Do času si daj svoje parametre ja som tam hodil blaol takže :) |
||
Sobky Profil |
#11 · Zasláno: 28. 7. 2014, 11:35:14
Tak by to potom vyzeralo takto?:
<?php $server = "localhost"; $dbuser = "ASDFG"; $dbpass = "SAFDGHFF"; $dbname = "asdgfh"; $mysqli = new mysqli("$server", "$dbuser", "$dbpass", "$dbname"); $query="SELECT pass FROM administration"; $result = mysqli_query($mysqli, $query); while($row = mysqli_fetch_array($result)) { $heslicko = $row['pass']; } if(isset($_POST['submit'])){ $heslo = $_POST['heslo']; $heslo = md5($heslo); if($heslo == $heslicko) { if(isset($_POST['remember'])){ setcookie("cookname", $_SESSION['ucet'], time()+60*60*24*100, "/"); setcookie("cookpass", $_SESSION['heslo'], time()+60*60*24*100, "/"); } include('administracia.php'); exit(); } } ?> <html xmlns='http://www.w3.org/1999/xhtml' lang='sk'> <head> <title>Invite list</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="author" content="SobkyLuckSK"> <link rel="stylesheet" type="text/css" href="css/admin.css"> <script type="application/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> </head> <body> <img class="logo" src="http://www.magicraft.4fan.cz/wp-content/uploads/2014/06/MAGICRAFT-3.png"> <form action="" method="POST"> <fieldset class="table"> <legend><p style="font-size: 2em; color: gold; font-weight: bold">Administrácia</p></legend> <table width="100%"> <tr> <td width="80%" align="center"><input type="text" class="nick" name="nick" tabindex="1" size="25" placeholder="Admin"></td> </tr> <tr> <td width="80%" align="center"><input type="password" class="heslo" name="heslo" tabindex="2" size="25" placeholder="Heslo"></td> </tr> <tr> <td colspan="4" align="center"><input type = "checkbox" name = "remember" >Pamätaj si ma<input type="submit" name="submit" class="tlacitko" value="Prihlásiť" tabindex="3"></td> </tr> </table> </fieldset> </form> </body> </html> |
||
mimochodec Profil |
#12 · Zasláno: 28. 7. 2014, 12:03:23
Sobky:
„$mysqli = new mysqli("$server", "$dbuser", "$dbpass", "$dbname");“ Uvozovky tady nemají co dělat. Bohužel to lze a funguje to. Je to ale nadbytečné. Dále: zamysli se, jak ten skript funguje. Na začátku si sáhneš do databáze pro $heslicko . Až potom testuješ $_POST. Pokud formulář odeslán nebyl a $_POST['submit'] je prázdný, k čemu $heslicko potřebuješ? K ničemu a celý ten dotaz je zbytečný. Dej ho dovnitř do toho if.
Dále: zdá se, že máš v databázi jedno heslo a nerozlišuješ uživatele. Určitě nepotřebuješ dát přístup více lidem? Nebudeš to potřebovat ani v budoucnu? Víš to s naprostou jistotou? Pokud tu jistotu nemáš, udělej si tabulku users, do ní přidej jednoho člověka. Je to jen minimum práce navíc a až budeš chtít někoho přidat, nebudeš muset skript přepisovat, jen přidáš položku do databáze. |
||
Sobky Profil |
#13 · Zasláno: 28. 7. 2014, 23:23:25
NO tak som to trochu upravil. Len ja stále neviem prísť na ten princíp toho aby si ma to pamatalo. Proste prihlásim sa a som prihlásený dokým sa neodhlásim alebo nezavriem stránku. Ale ked ju obnovím tak aby som bol stále prihlásený. To stým if remember je asi zle ale ide to :D
<?php $server = "localhost"; $dbuser = "ssadsadd"; $dbpass = "adegy"; $dbname = "yadsffds"; if(isset($_POST['submit'])){ $nick = $_POST['nick']; $mysqli = new mysqli("$server", "$dbuser", "$dbpass", "$dbname"); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query = "SELECT admin, pass FROM administration WHERE admin = '".$nick."'"; $result = mysqli_query($mysqli, $query); while($row = mysqli_fetch_array($result)) { $heslicko = $row['pass']; $meno = $row['admin']; $heslo = $_POST['heslo']; $heslo = md5($heslo); if($nick == $meno) { if($heslo == $heslicko) { if(isset($_POST['remember'])){ setcookie("cookname", $_SESSION['nick'], time()+60*60*24*100, "/"); setcookie("cookpass", $_SESSION['heslo'], time()+60*60*24*100, "/"); include('administracia.php'); exit(); }else{ include('administracia.php'); exit(); } } } } } ?> <html xmlns='http://www.w3.org/1999/xhtml' lang='sk'> <head> <title>Invite list</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="author" content="SobkyLuckSK"> <link rel="stylesheet" type="text/css" href="css/admin.css"> <script type="application/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> </head> <body> <img class="logo" src="http://www.magicraft.4fan.cz/wp-content/uploads/2014/06/MAGICRAFT-3.png"> <form action="" method="POST"> <fieldset class="table"> <legend><p style="font-size: 2em; color: gold; font-weight: bold">Administrácia</p></legend> <table width="100%"> <tr> <td width="80%" align="center"><input type="text" class="nick" name="nick" tabindex="1" size="25" placeholder="Admin"></td> </tr> <tr> <td width="80%" align="center"><input type="password" class="heslo" name="heslo" tabindex="2" size="25" placeholder="Heslo"></td> </tr> <tr> <td colspan="4" align="center"><input type = "checkbox" name = "remember" >Pamätaj si ma<input type="submit" name="submit" class="tlacitko" value="Prihlásiť" tabindex="3"></td> </tr> </table> </fieldset> </form> </body> </html> |
||
jenikkozak Profil |
#14 · Zasláno: 29. 7. 2014, 12:04:06
Do cookie určitě neukládej heslo, ale nějaký token (náhodně vygenerovaný řetězec), podle kterého pak ověříš pravost přihlášeného uživatele. Obsah souborů cookie se totiž s každým požadavkem posílá na server a může si ho přečíst každý, kdo má přístup k počítači uživatele.
Pak budeš mít cookii u uživatele uloženou, ale její obsah musíš také na serveru přečíst. K tomu využiješ superglobální proměnnou $_COOKIE. Pokud bude její hodnota existovat, budeš uživatele považovat za přihlášeného a zobrazíš mu tu administraci. |
||
Kubo2 Profil |
#15 · Zasláno: 29. 7. 2014, 12:34:34
Sobky, skús si ten skript pri každej úprave prejsť a zamyslieť sa nad tým, čo robí, prečo to robí takto a čo približne v ňom chýba, aby robil niečo ďaľšie, čo od neho požaduješ.
Pokús sa rozmýšľať s nadhľadom ponad tú spleť príkazov. Aby si sa stal programátorom, nie je potrebné ovládať kompletnú sadu príkazov alebo syntax nejakého programovacieho jazyka. Musíš sa naučiť myslieť a formulovať svoje myšlienky tak, aby sa dali ihneď zapísať ako program, bez ohľadu na programovací jazyk (ten jazyk je iba prostriedok na vyjadrenie programátorových myšlienok v podobe programu daného programovacieho jazyka). Toto sa však bohužiaľ nikde neučí. Nazýva sa to programátorským myslením. |
||
Jan Tvrdík Profil |
#16 · Zasláno: 29. 7. 2014, 12:36:00
Sobky:
Dovolím si dvě poznámky ohledně bezpečnosti: 1) Skript je obsahuje SQL injection zranitelnost, protože neošetřuje vstupy, které posílá do databáze. Použij funkci mysqli_real_escape_query. 2) Funkce md5 není vhodná pro hashování hesel, viz dokumentace PHP. Použij radši funkce password_hash a password_verify.
|
||
Sobky Profil |
#17 · Zasláno: 29. 7. 2014, 23:10:50
Ja stále tomu cookie nechápem :( Ako si ma to zapamatá?
A Jan Tvrdík To 1. Nechápem, čo mám nahradiť v tom kóde. To row[]...?? 4i niečo iné? A to pass_hash... to funguje parádne Ďakujem. A ako som pochopil tak to md5 sa dá asi lahšie rozšifrovať nie? |
||
lionel messi Profil |
Sobky:
„A ako som pochopil tak to md5 sa dá asi lahšie rozšifrovať nie?“ U funkcie md5 je (oveľa) jednoduchšie nájsť kolízny reťazec (to jest nájsť 2 rôzne reťazce s rovnakým hashom). MD5 je hashovacia funkcia, nie šifra a myslím, že nikdy nebola na hashovanie hesiel navrhnutá. Hash je iba „odtlačok“ hesla, na rozdiel od šifry nie je z neho možné získať pôvodné heslo. „Nechápem, čo mám nahradiť v tom kóde. To row[]...?? 4i niečo iné?“ Riadok 13 (možno aj niečo iné, len som to preletel): $query = "SELECT admin, pass FROM administration WHERE admin = '". mysqli_real_escape_string($mysqli, $nick)."'"; Použiť ošetrenie proti SQL injection v row[] je podľa mňa zbytočné. Ešte si dovolím 2 technické pripomienky: 1. Mixovať objektový a procedurálny prístup k DB je možné, ale neprehľadné. 2. Na riadku 9 sú úplne zbytočne použité úvodzovky okolo premenných, viď: Nejčastější potíže s PHP (FAQ) » Co dávat a co nedávat do uvozovek |
||
Sobky Profil |
Čo ste mi povedali tak to som sa snažil pomeniť a konečne som sprejazdnil to prihlásenie. Spravil som to so session. Ďakujem všetkým za pomoc!
<?php $server = "asfgeegs"; $dbuser = "asfsfasf"; $dbpass = "asffsafsa"; $dbname = "sddsasdfsa"; if(isset($_POST['submit'])){ $nick = $_POST['nick']; $mysqli = new mysqli($server, $dbuser, $dbpass, $dbname); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query = "SELECT admin, pass FROM administration WHERE admin = '". mysqli_real_escape_string($mysqli, $nick)."'"; $result = mysqli_query($mysqli, $query); while($row = mysqli_fetch_array($result)) { $heslicko = $row['pass']; $hash = $heslicko; $meno = $row['admin']; $heslo = $_POST['heslo']; $hesloo = password_verify($heslo, $hash); if(($nick == $meno)&&($hesloo == $heslicko)) { session_start(); header("Cache-control: private"); $_SESSION["logged"] = 1; header("Location: administracia.php"); exit; } } } ?> <html xmlns='http://www.w3.org/1999/xhtml' lang='sk'> <head> <title>Invite list</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="author" content="SobkyLuckSK"> <link rel="stylesheet" type="text/css" href="css/admin.css"> <script type="application/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> </head> <body> <img class="logo" src="http://www.magicraft.4fan.cz/wp-content/uploads/2014/06/MAGICRAFT-3.png"> <form action="" method="POST"> <fieldset class="table"> <legend><p style="font-size: 2em; color: gold; font-weight: bold">Administrácia</p></legend> <table width="100%"> <tr> <td width="80%" align="center"><input type="text" class="nick" name="nick" tabindex="1" size="25" placeholder="Admin"></td> </tr> <tr> <td width="80%" align="center"><input type="password" class="heslo" name="heslo" tabindex="2" size="25" placeholder="Heslo"></td> </tr> <tr> <td colspan="4" align="center"><input type="submit" name="submit" class="tlacitko" value="Prihlásiť" tabindex="3"></td> </tr> </table> </fieldset> </form> </body> </html> |
||
lionel messi Profil |
#20 · Zasláno: 31. 7. 2014, 18:57:24
Sobky:
Už len posledná chybička na kráse: ešte by som riadok 9 zmenil na procedurálny štýl, kt. používaš vo zvyšku kódu: $mysqli = mysqli_connect($server, $dbuser, $dbpass, $dbname); |
||
Časová prodleva: 10 let
|
0