Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
MaryG
Δημοσιεύσεις: 11
Εγγραφή: 03 Νοέμ 2012 17:58

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από MaryG » 09 Δεκ 2012 21:09

Καλησπέρα σας , έχω μια μικρή απορία ..
Έχοντας ακούσει για τη sql injection , με την υπόθεση ότι σε ένα site θα έχει πρόσβαση
μόνο ένας άνθρωπος (admin) , και με δεδομένο ότι η php δεν διαβάζεται από τον browser
είναι ασφαλής μία είσοδος χωρίς βάση δεδομένων ?

λ.χ.

Κώδικας: Επιλογή όλων

<form action="login.php" method='post'>
Username&#58; <input type="text" name="username"><br/>
Password&#58; <input type="password" name="password"><br/>
<input type="submit" name="submit" value="submit">
</form>	

login.php

Κώδικας: Επιλογή όλων

<?php
$username = $_POST&#91;'username'&#93;;
$password = $_POST&#91;'password'&#93;;
$name = "admin";
$pass = "12345";

if&#40;$username == $name && $password == $pass&#41;
&#123;
echo "Μόλις συνδέθηκες";
&#125;
else &#123;
echo "Λάθος στοιχεία";
&#125;
?>

Simplicity is the ultimate sophistication...
-Leonardo da Vinci

MaryG
Δημοσιεύσεις: 11
Εγγραφή: 03 Νοέμ 2012 17:58

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από MaryG » 09 Δεκ 2012 21:26

Μπορεί να γίνει και χρήση του md5()
αλλά δεν είμαι βέβαιη αν έχει νόημα απ' τη στιγμή
που δεν αποθηκεύεται σε βάση δεδομένων

Κώδικας: Επιλογή όλων

$username = md5&#40; $_POST&#91;'username'&#93;&#41;;
$password = md5&#40;$_POST&#91;'password'&#93;&#41;;
$name = md5&#40;"admin"&#41;;
$pass = md5&#40;"12345"&#41;;
Simplicity is the ultimate sophistication...
-Leonardo da Vinci

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από jpk » 09 Δεκ 2012 22:50

Το ασφαλές ως λέξη συνήθως μπορεί να εννοηθεί ως «απόλυτα ασφαλές». Προγραμματιστικά τίποτα δεν είναι απόλυτα ασφαλές . Ότι φτιάχνετε από άνθρωπο παραβιάζεται και από άνθρωπο. Υπάρχουν ορισμένα πράγματα που είναι στοιχειώδη ασφαλείας και λειτουργικότητας όπως π.χ. να μην έχεις τα PHP αρχεία σου στο public_html , αλλά έτσι και αλλιώς και βάση να χρησιμοποιούσες κάπου θα αποθήκευες το password εισόδου του χρήστη στην βάση. Αλλά και τα shadows files ή οποιαδήποτε αρχεία εξουσιοδότησης κάπου γράφουν το τελικό hash .

Και αν ακολουθείς όλα τα βήματα στοιχειώδους ασφάλειας της εφαρμογής ένα δεύτερο πέρασμα από κάποιο hash αλγόριθμο όπως ο md5 που ανέφερες με ένα salt θα δυσκόλευε τον υποτιθέμενο hacker που συνήθως χρησιμοποιεί ετοιματζίδικα για να κάνει την δουλειά του. Π.χ πες ότι το password είναι 12345 , φυσικά και δεν το στέλνεις έτσι από το client στο server side κομμάτι. Πρώτα το κάνεις hash με κάποιο JS σε md5 και μετά το στέλνεις (σημαντικό &#8230; ποτέ δεν στέλνουμε password χύμα με post). Αφού το πάρεις αυτό το hash και θέλεις απλά να κάνεις server side validation χωρίς βάση και κατευθείαν στον κώδικα (που δεν είναι στο public_html) το περνάς ξανά από ένα hash με ένα salt και συγκρίνεις το αποτέλεσμα.

Εσύ ξέρεις με τι θα το συγκρίνεις γιατί μπορείς να το κάνεις md5 το 12345 (έτσι όπως θα αποστέλλετε από τον client) , ξέρεις με τι θα το περάσεις με salt μετά για md5 server side οπότε ξέρεις το αποτέλεσμα &#8230; για να σου το στείλει κάποιος ή θα πρέπει να σου αλλάξει το αρχείο μέσα στον server (που δεν είναι στο public_html) ή να κάνει ατελείωτες απόπειρες αποστολής &#8230; οπότε εύκολα κόβεις πάνω από 10 πχ απόπειρες ανά IP και άσε τον να αλλάζει IPs ώσπου να το πετύχει.

\Στο επίπεδο ασφάλειας έχουμε πολλά καλούδια &#8230; από SSL μέχρι SSO και ένα σωρό άλλα . Αλλά όποια μέθοδο (ή μεθόδους) και να ακολουθείς πάντα πρέπει να υπάρχει η δημιουργική προσέγγιση (καστομιά) που δυσκολεύει τους αυτόματους ανιχνευτές.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από jpk » 09 Δεκ 2012 23:09

Θα το ανεβάσω λίγο το θέμα &#8230; λες MaryG ότι προβληματίζεσαι αν έχει νόημα κάποιο md5 αν δεν έχεις να κάνεις με βάση δεδομένων &#8230; είχα διαβάσει και κάποιο παλιότερο post σου σχετικά στο blog σου &#8230; Έχω μια απορία και είναι πραγματικά άδηλη &#8230; όταν πρώτο άκουσες για md5 δεν ασχολήθηκες λίγο να δεις τι είναι τούτο ; Τι νόημα έχει να ρωτάς ή να προτείνεις χωρίς να έχεις φάει 10 λεπτά να διαβάσεις και να δοκιμάσεις. Και αν δεν το έχεις το χάρισμα της αντίληψης δεν τρέχει τίποτα εμείς είμαστε εδώ να ρωτήσεις&#8230; αλλά αφού έχεις διαβάσει και δοκιμάσει &#8230;

MaryG
Δημοσιεύσεις: 11
Εγγραφή: 03 Νοέμ 2012 17:58

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από MaryG » 09 Δεκ 2012 23:25

jpk έγραψε:Θα το ανεβάσω λίγο το θέμα &#8230; λες MaryG ότι προβληματίζεσαι αν έχει νόημα κάποιο md5 αν δεν έχεις να κάνεις με βάση δεδομένων &#8230; είχα διαβάσει και κάποιο παλιότερο post σου σχετικά στο blog σου &#8230; Έχω μια απορία και είναι πραγματικά άδηλη &#8230; όταν πρώτο άκουσες για md5 δεν ασχολήθηκες λίγο να δεις τι είναι τούτο ; Τι νόημα έχει να ρωτάς ή να προτείνεις χωρίς να έχεις φάει 10 λεπτά να διαβάσεις και να δοκιμάσεις. Και αν δεν το έχεις το χάρισμα της αντίληψης δεν τρέχει τίποτα εμείς είμαστε εδώ να ρωτήσεις&#8230; αλλά αφού έχεις διαβάσει και δοκιμάσει &#8230;
Eχεις δίκιο , δεν είναι ότι δεν το είχα μελετήσει , αλλά είχα δοκιμάσει να κάνω hash και το username και δούλεψε μια χαρά και θεώρησα ότι αφού το μεταφράζει από τη φόρμα γιατί όχι και να το προβάλλει, αλλά όταν μετά το ερώτημά σου , πέρασα πολλές ώρες προσπαθώντας να το προβάλλω και διαπίστωσα ότι ήταν αδύνατο , απλά το διέγραψα γιατί κατάλαβα πως πρόκειται για ανοησία εκ μέρους μου.

Σχετικά με το παρών , διάβασα αρκετές οδηγίες σήμερα για "ασφαλή" είσοδο χωρίς τη χρήση βάσης δεδομένων , κι είχα την απορία , αν δεν πρόκειται να χρησιμοποιήσουμε registration και η σελίδα μας έχει περιορισμένους διαχειριστές , τι θα ήταν πιο ασφαλές , πρόσβαση από βάση δεδομένων ή χωρίς ??

Ευχαριστώ για την απάντηση
Simplicity is the ultimate sophistication...
-Leonardo da Vinci

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από jpk » 09 Δεκ 2012 23:45

MaryG έγραψε:ανοησία εκ μέρους μου
Όλοι έχουμε πει ανοησίες ανά καιρούς , κάποιοι από εμάς έχουμε την τιμή να έχουμε εφαρμόσει και ανοησίες σε παραγωγή &#8230; το θέμα είναι να πατάς και λίγο στην Γη και να αφήνεις περιθώριο να το καταλάβεις και να το διορθώσεις. Ελπίζω να βοήθησα λίγο με την πρώτη απάντησή &#8230; και αν μου επιτρέπεις καλά το πας &#8230; ανοησία είναι να μην αποδέχεσαι τις ανοησίες σου &#8230;

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από cherouvim » 10 Δεκ 2012 10:37

jpk έγραψε:Πρώτα το κάνεις hash με κάποιο JS σε md5 και μετά το στέλνεις (σημαντικό &#8230; ποτέ δεν στέλνουμε password χύμα με post).
Δεν νομίζω οτι ισχύει αυτό. Απλά κάνεις POST σε https όπως πχ gmail, twitter και facebook.

MaryG
Δημοσιεύσεις: 11
Εγγραφή: 03 Νοέμ 2012 17:58

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από MaryG » 10 Δεκ 2012 15:41

Κώδικας: Επιλογή όλων

<?php 
$username = $_POST&#91;'username'&#93;; 
$password = $_POST&#91;'password'&#93;; 
$name = "admin"; 
$pass = "12345"; 

if&#40;$username == $name && $password == $pass&#41; 
&#123; 
session_register&#40;"mySession"&#41;; 
header&#40;"location&#58;admin.php"&#41;;
&#125; 
else &#123; 
header&#40;"location&#58;wrong.php"&#41;;
&#125; 
?> 

Έχω πάντως την εντύπωση πως κάτι ανάλογο με το παραπάνω ,
συν τη φόρμα και την ενεργοποίησής της μέσα σε https (ssl κρυπτογράφηση) ,
φαινομενικά δεν φαίνεται να έχει κάποιο "ανοιχτό παράθυρο" στο θέμα της ασφάλειας
Simplicity is the ultimate sophistication...
-Leonardo da Vinci

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από gvre » 10 Δεκ 2012 19:05

Αν η φόρμα που βάζει ο χρήστης τα στοιχεία του και το script στο οποίο γίνοται post λειτουργούν μέσω https τότε είσαι σε καλό δρόμο. Δεν έχεις πρόβλημα αν στέλνεις το password σε plain text αρκεί να ισχύει αυτό που αναφέρω παραπάνω. Δε χρειάζεται να εφαρμόσεις οποιουδήποτε είδους hashing (md5, κλπ) στον browser.

Τα sql injections τα ξεχνάς με prepared statements.

Την session_register ξέχασέ τη. Έχει ήδη αφαιρεθεί από την php 5.4.

Η εφαρμογή σου δε χρησιμοποιεί βάση δεδομένων γενικότερα;

MaryG
Δημοσιεύσεις: 11
Εγγραφή: 03 Νοέμ 2012 17:58

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από MaryG » 10 Δεκ 2012 19:59

gvre έγραψε: Την session_register ξέχασέ τη. Έχει ήδη αφαιρεθεί από την php 5.4.
Ω δεν το γνώριζα , ευχαριστώ πολύ !!!!!!

Νομίζω πως κάπως έτσι θα δουλέψει (...??)

Κώδικας: Επιλογή όλων

<?php 
$username = $_POST&#91;'username'&#93;; 
$password = $_POST&#91;'password'&#93;; 
$name = "admin"; 
$pass = "12345"; 
$ok = $username == $name && $password == $pass ;

if&#40;$username == $name && $password == $pass &#41; 
&#123; 
session_start&#40;&#41;;
$_SESSION&#91;'admin'&#93;= $ok ;
header&#40;"location&#58;admin.php"&#41;;
&#125; 
else &#123; 
header&#40;"location&#58;wrong.php"&#41;;
&#125; 
?> 

admin.php

Κώδικας: Επιλογή όλων

<?php
session_start&#40;&#41;;
if&#40;isset&#40;$_SESSION&#91;'admin'&#93;&#41;&#41;
&#123;
print&#40;"You are logged in"&#41;;
&#125;
else
&#123;
print&#40;"You are not logged in"&#41;;
&#125;
?>
Τελευταία επεξεργασία από το μέλος MaryG την 10 Δεκ 2012 20:13, έχει επεξεργασθεί 1 φορά συνολικά.
Simplicity is the ultimate sophistication...
-Leonardo da Vinci

MaryG
Δημοσιεύσεις: 11
Εγγραφή: 03 Νοέμ 2012 17:58

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από MaryG » 10 Δεκ 2012 20:10

gvre έγραψε:Αν η φόρμα που βάζει ο χρήστης τα στοιχεία του και το script στο οποίο γίνοται post λειτουργούν μέσω https τότε είσαι σε καλό δρόμο. Δεν έχεις πρόβλημα αν στέλνεις το password σε plain text αρκεί να ισχύει αυτό που αναφέρω παραπάνω. Δε χρειάζεται να εφαρμόσεις οποιουδήποτε είδους hashing (md5, κλπ) στον browser.

Τα sql injections τα ξεχνάς με prepared statements.

Την session_register ξέχασέ τη. Έχει ήδη αφαιρεθεί από την php 5.4.

Η εφαρμογή σου δε χρησιμοποιεί βάση δεδομένων γενικότερα;

Ευχαριστώ πολύ για την απάντηση !!!

Θα έχει βάση δεδομένων , μόνο για ορισμένες πληροφορίες .
Simplicity is the ultimate sophistication...
-Leonardo da Vinci

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από gvre » 10 Δεκ 2012 20:38

Το $ok = $username == $name && $password == $pass ; δε χρειάζεται. Μπορείς απλά να κάνεις $_SESSION['admin']=1; όταν το authentication γίνει με επιτυχία.

MaryG
Δημοσιεύσεις: 11
Εγγραφή: 03 Νοέμ 2012 17:58

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από MaryG » 10 Δεκ 2012 20:51

gvre έγραψε:Το $ok = $username == $name && $password == $pass ; δε χρειάζεται. Μπορείς απλά να κάνεις $_SESSION['admin']=1; όταν το authentication γίνει με επιτυχία.
Ω τέλεια !! Και πάλι σ' ευχαριστώ πολύ !!!!!!!
Simplicity is the ultimate sophistication...
-Leonardo da Vinci

MaryG
Δημοσιεύσεις: 11
Εγγραφή: 03 Νοέμ 2012 17:58

Είναι ασφαλές ένα login χωρίς βάση δεδομένων;

Δημοσίευση από MaryG » 10 Δεκ 2012 21:31

Ευχαριστώ πολύ για τη βοήθεια και τις συμβουλές !
Tο τελικό script :



index.php

Κώδικας: Επιλογή όλων

<?php
session_start&#40;&#41;;

//If user is logged in display ..
if&#40;isset&#40;$_SESSION&#91;'admin'&#93;&#41;&#41;&#123;
echo "<center><h1>Admin Panel</h1></center><br>";
echo "<a href=logout.php>Logout</a>";
&#125;

//If user is not logged in redirect to "login.php"
else &#123;
header&#40;"location&#58;login.php"&#41;;
&#125;
?>

login.php

Κώδικας: Επιλογή όλων

<form action="process.php" method='post'> 
Username&#58; <input type="text" name="username"><br/> 
Password&#58; <input type="password" name="password"><br/> 
<input type="submit" name="submit" value="Login"> 
</form>  
process.php

Κώδικας: Επιλογή όλων

<?php 
$username = $_POST&#91;'username'&#93;; 
$password = $_POST&#91;'password'&#93;; 
$name = "admin"; //Set username
$pass = "12345"; //Set password

//Check if username and password are correct and start session
if&#40;$username == $name && $password == $pass &#41; &#123; 
session_start&#40;&#41;;
$_SESSION&#91;'admin'&#93;= 1 ;
header&#40;"location&#58;index.php"&#41;;
&#125; 
//If username and password are not correct
else &#123; 
header&#40;"location&#58;wrong.php"&#41;;
&#125; 
?> 

wrong.php

Κώδικας: Επιλογή όλων

<p>The information you provided is not correct</p>

logout.php

Κώδικας: Επιλογή όλων

<?php 
session_start&#40;&#41;;
session_destroy&#40;&#41;;
header&#40;"location&#58;login.php"&#41;;
?>
Simplicity is the ultimate sophistication...
-Leonardo da Vinci

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες