koslibpro Δημοσ. 16 Ιουνίου 2012 Δημοσ. 16 Ιουνίου 2012 (επεξεργασμένο) Καλημερα σε ολους, εχω φτιαξει μια φορμα που ο χρηστης μπορει να κανει register με username και password.Χρησιμοποιω sha256 encryption και η κρυπτογραφηση γινεται ετσι >$pass = hash("sha256", $_POST['password']); . Καταχωρειται σωστα στην βαση,οτ εχω τσεκαρει. οταν παω να κανω ενα δοκιμαστικο Log in Με στοιχεια που εχω καταχωρησει,μου βγαζει παντα σφαλμα,οτι εισαγω λανθασμενα στοιχεια. το login.php αρχειο μου ειναι αυτο: ><?php session_start(); mysql_connect('localhost', 'root', '') or die ("Error establishing database connection".mysql_error()); mysql_select_db('dbname') or die ("Error establishing a database connection ".mysql_error()); $pass = hash("sha256", $_POST['password']); if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".$_POST["username"]."' and password=$pass"))==1){ session_register("username"); header("location:index.php"); } else { echo 'Wrong username or password!'; } ?> μηπως υποψιαζεστε/βλεπετε τι μπορει να πηγαινει λαθος? ευχαριστω εκ των προτερων Επεξ/σία 16 Ιουνίου 2012 από koslibpro
bnvdarklord Δημοσ. 16 Ιουνίου 2012 Δημοσ. 16 Ιουνίου 2012 Αν και δεν ξερω PHP, μήπως το $pass πρέπει να ναι εκτός των "" για να παρει την τιμή του; >if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".$_POST["username"]."' and password=".$pass))==1)
koslibpro Δημοσ. 16 Ιουνίου 2012 Μέλος Δημοσ. 16 Ιουνίου 2012 Οχι,το δοκιμασα αυτο που μου ειπες φιλε μου ομως δεν αλλαξε τιποτα..
παπι Δημοσ. 16 Ιουνίου 2012 Δημοσ. 16 Ιουνίου 2012 Το pass δεν ειναι σε αυτακια. Χρησιμοποιησε την sprinf >$user = "userName"; $pass = "userPass"; $query = "SELECT * FROM users WHERE username='{$user}' and password='{$pass}'"; //ή καλυτερα $query = sprintf("SELECT * FROM users WHERE username='%' and password='%'", mysql_real_escape_string($user), mysql_real_escape_string($pass));
koslibpro Δημοσ. 16 Ιουνίου 2012 Μέλος Δημοσ. 16 Ιουνίου 2012 Το pass δεν ειναι σε αυτακια. Χρησιμοποιησε την sprinf >$user = "userName"; $pass = "userPass"; $query = "SELECT * FROM users WHERE username='{$user}' and password='{$pass}'"; //ή καλυτερα $query = sprintf("SELECT * FROM users WHERE username='%' and password='%'", mysql_real_escape_string($user), mysql_real_escape_string($pass)); νομιζω οτι δεν καταλαβα ακριβως πως να το κανω. δηλαδη ο κωδικας θα ειναι καπως ετσι,σωστα? > <?php session_start(); mysql_connect('localhost', 'root', '') or die ("Error establishing database connection".mysql_error()); mysql_select_db('dbname') or die ("Error establishing a database connection ".mysql_error()); $pass = hash("sha256", $_POST['password']); $query = sprintf("SELECT * FROM users WHERE username='%' and password='%'", mysql_real_escape_string($user), mysql_real_escape_string($pass)); if($query){ session_register("username"); header("location:index.php"); } else { echo 'Wrong username or password!'; } ?> edit:ναι τελικα ετσι θα ειναιτο δοκιμασα και μου λειτουργει μια χαρα ευχαριστω πολυ παιδια
παπι Δημοσ. 16 Ιουνίου 2012 Δημοσ. 16 Ιουνίου 2012 νομιζω οτι δεν καταλαβα ακριβως πως να το κανω. δηλαδη ο κωδικας θα ειναι καπως ετσι,σωστα? > <?php session_start(); mysql_connect('localhost', 'root', '') or die ("Error establishing database connection".mysql_error()); mysql_select_db('dbname') or die ("Error establishing a database connection ".mysql_error()); $pass = hash("sha256", $_POST['password']); $query = sprintf("SELECT * FROM users WHERE username='%' and password='%'", mysql_real_escape_string($user), mysql_real_escape_string($pass)); ----------------------- $res = mysql_query($query) ; if($res) { mpla mpla me ta res -------------------- session_register("username"); header("location:index.php"); } else { echo 'Wrong username or password!'; } ?> edit ξεχασα. στην sprintf βαλε μετα το % ενα s δηλαδη %s
koslibpro Δημοσ. 16 Ιουνίου 2012 Μέλος Δημοσ. 16 Ιουνίου 2012 και στο username και στο password ετσι?δεν την κατεχω την sprintf και τωρα αρχισα να την ψαχνω,που μου το προτινες εσυ..
παπι Δημοσ. 16 Ιουνίου 2012 Δημοσ. 16 Ιουνίου 2012 και στο username και στο password ετσι?δεν την κατεχω την sprintf και τωρα αρχισα να την ψαχνω,που μου το προτινες εσυ.. Η mysql_query παιρνει ενα query το οποιο στελενει στην βαση για να παραει καποια αποτελεσματα. το query ειναι ενα string η sprintf φτιαχνει/ενωνει ενα string πχ sprinf("Dieythynsh:%s Arithmos:%d", "agias triadas", 10) αυτο θα σου επιστρεψει "Dieythynsh:agias triadas Arithmos:10" η mysql_real_escape_string ειναι για ασφαλεια πχ αν δωσει ο χρηστης ενα ονομα σα My'Name θα το κανει My\'Name (δες στο google για php sql injection)
koslibpro Δημοσ. 16 Ιουνίου 2012 Μέλος Δημοσ. 16 Ιουνίου 2012 αχα,μαλιστα σε ευχαριστω πολυ ησουν κατατοπιστικοτατος
migf1 Δημοσ. 16 Ιουνίου 2012 Δημοσ. 16 Ιουνίου 2012 Αυτό που πρότεινε ο bnvdarklord γιατί δεν δουλεύει; Δεν είμαι php'άς αλλά το ... > $query = sprintf("SELECT * FROM users WHERE username='%s' and password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($pass)); δεν είναι ισοδύναμο με ... > $query = "SELECT * FROM users WHERE username='" . mysql_real_escape_string($user) . "' and password='" . mysql_real_escape_string($pass) . "'"; ?
bnvdarklord Δημοσ. 16 Ιουνίου 2012 Δημοσ. 16 Ιουνίου 2012 Εχει νοημα να γινεται escape και το pass? Αφού γινεται hashed πρώτα. Αυτό που πρότεινε ο bnvdarklord γιατί δεν δουλεύει; Ξεχασα να βαλω αυτάκια στο pass
migf1 Δημοσ. 16 Ιουνίου 2012 Δημοσ. 16 Ιουνίου 2012 ... Ξεχασα να βαλω αυτάκια στο pass Ανεξάρτητα από τα αυτάκια, περισσότερο ρωτάω για να μάθω αν υπάρχει κάποιου είδους διαφορά μεταξύ sprintf() και . (concatenation operator).
moukoublen Δημοσ. 16 Ιουνίου 2012 Δημοσ. 16 Ιουνίου 2012 Δοκίμασε πάντως κάποια στιγμή αργότερα να δεις και το mysqli αντικείμενο και τι είναι τα prepared statements.
koslibpro Δημοσ. 16 Ιουνίου 2012 Μέλος Δημοσ. 16 Ιουνίου 2012 Δοκίμασε πάντως κάποια στιγμή αργότερα να δεις και το mysqli αντικείμενο και τι είναι τα prepared statements. εχεις καποια Links αξιολογα υποψην???
παπι Δημοσ. 16 Ιουνίου 2012 Δημοσ. 16 Ιουνίου 2012 Ανεξάρτητα από τα αυτάκια, περισσότερο ρωτάω για να μάθω αν υπάρχει κάποιου είδους διαφορά μεταξύ sprintf() και . (concatenation operator). Ποιο σου φαινεται καλυτερο; >$q1 = "isnert into foo values('". mysql_real_escape_string($var1) . "','" . mysql_real_escape_string($var2) . "','" . mysql_real_escape_string($var3) . "','" . mysql_real_escape_string($var4) . "','" . mysql_real_escape_string($var5) . "','" . mysql_real_escape_string($var6) . "')"; $q2 = sprintf("inser into foo values('%s','%s','%s','%s','%s','%s')", mysql_real_escape_string($var1), mysql_real_escape_string($var2), mysql_real_escape_string($var3), mysql_real_escape_string($var4), mysql_real_escape_string($var5), mysql_real_escape_string($var6),
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα