background image

Κεφάλαιο 3 - Ανάπτυξη και Υλοποίηση της Εφαρμογής 
 

 

 

59 

 

κατά κόρον από την χρήση του αντικειμένου PDO για την αποστολή ερωτημάτων στην βάση 
δεδομένων. 

1. 

// Select the user's information by search parameter

 

2. 

public

 

function

 get_user_information

(

$user

,

 

$search_type

)

 

{

 

3. 

  $query

 

=

 

"SELECT * FROM users WHERE  "

.

$search_type

.

" = :user "

;

  

4. 

  $statement

 

=

 

$this

->

conn

->

prepare

(

$query

);

  

5. 

  $statement

->

execute

(

array

(

'user'

 

=>

 

$user

));

 

6. 

  return

 

$statement

->

fetch

();

 

7. 

}

 

 

Κώδικας 26: Database.php - Η μέθοδος γενικής αναζήτησης χρήστη από την βάση δεδομένων 

Για την διευκόλυνση της εξέτασης του επιπέδου αυτού θα χρησιμοποιήσουμε ως παράδειγμα 
την μέθοδο “get_user_information” που δέχεται ως εισόδους ένα στοιχείο του χρήστη και το 
είδος αυτού  του στοιχείου ώστε να επιστρέψει όλα τα στοιχεία αυτού  του  χρήστη. Παρέχει 
ουσιαστικά μία γενική αναζήτηση χρήστη στην βάση δεδομένων. Λόγο όμως της γενικότητας, 
ο  τύπος  του  στοιχείου  αναζήτησης  δεν  είναι  σταθερός  κι  έτσι  δεν  μπορεί  να  περάσει  από 
σταθερό φίλτρο στο πρώτο επίπεδο ασφάλειας. Έτσι ο μόνος τρόπος για την διασφάλιση της 
ασφάλειας των δεδομένων αυτού του στοιχείου είναι η εισαγωγή τους στο ερώτημα SQL μέσω 
της προετοιμασίας από το αντικείμενο PDO. Η προετοιμασία γίνεται εισάγοντας ένα δείκτη 
μέσα  στο  ερώτημα  όπως  το  “:user”  (Κώδικας  26,  γραμμή  3).    Στην  συνέχεια  κάνουμε  την 
προετοιμασία του ερωτήματος και το εκτελούμε αντιστοιχίζοντας τον δείκτη με την μεταβλητή 
(Κώδικας  26,  γραμμές  4-5).  Με  αυτόν  τον  τρόπο  διασφαλίζουμε  ότι  τα  στοιχεία  που  θα 
αντικαταστήσουν τον δείκτη θα αντιμετωπιστούν από την SQL ως μία τιμή. Έτσι εάν γίνει για 
παράδειγμα η εισαγωγή στα στοιχεία του χρήστη μίας τιμής όπως “OR 

IF 1=1 DELETE FROM 

users

”, σε μία απλή εισαγωγή του ερωτήματος στην βάση δεδομένων, θα μπορούσε να έχει ως 

αποτέλεσμα την διαγραφή όλων των χρηστών. Με την τεχνική όμως που χρησιμοποιούμε εδώ, 
η τιμή αυτή θα περιοριστεί στην αντιμετώπισή της, αποκλειστικά ως τιμή του στοιχείου που 
δίνεται από το “$search_type” και όχι ως ένα συνεχές ερώτημα. Επιστρέφοντας στο αρχικό 
παράδειγμα της μεθόδου “get_user_information”, μπορούμε πλέον να εξηγήσουμε τον λόγο 
που  κάποιες  μεταβλητές  δεν  μπορούν  να  προετοιμαστούν.  Τέτοιες  μεταβλητές,  όπως  η 
“$search_type”, πρέπει να βρίσκονται στο ερώτημα πριν την προετοιμασία του ώστε να είναι 
δυνατός  ο  ορισμός  του  τύπου  δεδομένων  του  στοιχείου  που  αντιπροσωπεύουν  κατά  την 
προετοιμασία.  Αυτές  οι  μεταβλητές  όμως  περιορίζονται  σε  συγκεκριμένες  τιμές  που 
καθορίζονται  από  τα  γνωρίσματα  του  πίνακα  κι  έτσι  είναι  δυνατός  ένας  αρκετά  πιο 
συγκεκριμένος  έλεγχος  των  τιμών  τους.  Γίνεται  λοιπόν  φανερό  πως  τα  πρώτα  δύο  επίπεδα 
περιστρέφονται γύρω από την δημιουργία ενός τοίχου προστασίας τις βάσεως δεδομένων. 

 

Το  τρίτο  επίπεδο  που  χρησιμοποιούμε  στοχεύει  αντίθετα  στην  εισαγωγή  ασφάλειας 

στους λογαριασμούς χρηστών. Το επίπεδο αυτό βρίσκεται μέσα στις λειτουργίες χρηστών και 
επιβεβαιώνει ότι η κάθε λειτουργία είναι διαθέσιμη εφόσον ο επισκέπτης έχει τα κατάλληλα 
δικαιώματα. Στο αρχείο “index.php” είδαμε μία εφαρμογή αυτού του επιπέδου όπου γίνεται 
έλεγχος για συνδεμένο λογαριασμό χρήστη πριν την διάθεση συγκεκριμένων σελίδων. Αυτή 
είναι μία συχνή εφαρμογή του επιπέδου σε πολλές λειτουργίες. Το επίπεδο αυτό γενικά κάνει 
χρήση των μεταβλητών που βρίσκονται στην συνεδρία “$_SESSION['vhdl_user']” κατά την 
είσοδο ενός χρήστη. Αρχικά έχουμε την μεταβλητή “$_SESSION['vhdl_user']['loged_in']” που 
επιβεβαιώνει έχοντας τιμή, και συγκεκριμένα την τιμή “1”, ότι ο χρήστης είναι συνδεμένος σε 
έγκυρο  λογαριασμό.  Ο  έλεγχος  της  μεταβλητής  αυτής  χρησιμοποιείται  για  τον  περιορισμό