TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Σχετικά έγγραφα
TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

BlackBerry Internet Service. Οδηγός χρήστη

Περιεχόμενα. Λίγα λόγια από το συγγραφέα... 7

ΟΔΗΓΙΕΣ ΧΡΗΣΤΗ ΓΙΑ ΤΟ ΠΡΟΓΡΑΜΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ ΤΑΞΗΣ

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο)

Χρήση του Office 365 σε τηλέφωνο Android

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στο Outlook Κεφάλαιο 2 Βασικές εργασίες με μηνύματα 33

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

Επικοινωνία. Ηλεκτρονικό ταχυδρομείο. Δημιουργία λογαριασμού. Λήψη ηλεκτρονικού μηνύματος. Αποστολή ηλεκτρονικού μηνύματος. Απάντηση και προώθηση

ΠΡΩΤΟΚΟΛΟ HTTP ΕΝΤΟΛΩΝ ΔΙΑΣΥΝΔΕΣΗΣ ΕΚΔΟΣΗ 1.2

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στο Outlook Κεφάλαιο 2 Βασικές εργασίες με μηνύματα 31

Δομημένος Προγραμματισμός

Ανοικτό Ψηφιακό Μάθημα για την κατάρτιση του προσωπικού υποστήριξης ανάπτυξης ψηφιακών μαθημάτων

Οδηγός γρήγορης εκκίνησης

Χρήση του Office 365 σε iphone ή ipad

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

ΟΔΗΓΟΣ ΧΡΗΣΗΣ WEBMAIL ΤΕΙ ΚΑΛΑΜΑΤΑΣ

Ενότητα. Σχεδίαση Βάσεων Δεδομένων

Λίγα λόγια από το συγγραφέα Κεφάλαιο 1: Βάσεις δεδομένων και Microsoft Access Κεφάλαιο 2: Microsoft Access

Περιεχόμενα. 1 Tο βιβλίο "με μια ματιά" Εισαγωγή στη Microsoft Access Γνωριμία με τις βάσεις δεδομένων της Access...

Εφαρμογή Βάσης Δεδομένων για την Εθελοντική Αιμοδοσία στο ΑΤΕΙ-Θ

6.2 Υπηρεσίες Διαδικτύου

Εργαστήριο «Βάσεις Οικολογικών Δεδομένων και Εφαρμογές»

Εργαλεία. Επικοινωνίας & Συνεργασίας Πανεπιστήμιο Κύπρου

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

Η διεύθυνση της σελίδας είναι: Ποιά προσωπικά δεδομένα συλλέγουμε και γιατί

Εγχειρίδιο Φοιτητή. Course Management Platform. Εισαγωγή. for Universities Ομάδα Ασύγχρονης Τηλεκπαίδευσης Παν. Μακεδονίας Σεπτέμβριος 2004

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

Προγραμματισμός Διαδικτύου Ασκήσεις Εργαστηρίου

Β ΕΙΔΙΚΗ ΦΑΣΗ ΣΠΟΥΔΩΝ

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΤΩΝ ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΠΡΑΞΕΩΝ ΔΕΛΤΙΟ ΔΗΛΩΣΗΣ ΔΑΠΑΝΩΝ (ΕΕΣ)

Παράρτημα A: PHP, HTML φόρμες και το πρωτόκολλο HTTP.

Ενημέρωση σε Windows 8.1 από τα Windows 8

Συνοπτικός Οδηγός Χρήσης του Moodle για τον Καθηγητή

Συγχώνευση αλληλογραφίας και συγχώνευση μιας πηγής δεδομένων με ένα κύριο έγγραφο όπως ένα γράμμα ή ένα έγγραφο ετικετών

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

ΕΦΑΡΜΟΓΗ ΔΙΑΧΕΙΡΙΣΗΣ ΙΣΤΟΣΕΛΙΔΩΝ ΜΕΛΩΝ ΔΕΠ, ΤΜΗΜΑΤΟΣ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΑΤΡΩΝ ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΠΛΟΗΓΗΣΗΣ ΚΑΙ ΧΡΗΣΗΣ

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Πίνακας περιεχομένων. Περιεχόμενα ΕΓΓΡΑΦΗ ΝΕΟΥ ΧΡΗΣΤΗ 1 ΣΥΝΔΕΣΗ ΧΡΗΣΤΗ 4 ΔΙΑΧΕΙΡΙΣΤΙΚΟ ΧΡΗΣΤΗ ΤΑ ΣΤΟΙΧΕΙΑ ΜΟΥ 5 ΝΕΑ ΑΙΤΗΣΗ 6

Προγραμματισμός ΙI (Θ)

Δημιουργία Λογαριασμού

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Gmail: Η προσέγγιση της Google στο ηλεκτρονικό ταχυδρομείο

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ Π.Σ. ΦΟΙΤΗΤΟΛΟΓΙΟΥ- ΓΙΑ ΤΟ ΔΙΔΑΣΚΟΝΤΑ (ClassWeb)

ΓΕΝΙΚΗ ΓΡΑΜΜΑΤΕΙΑ ΗΜΟΣΙΩΝ ΕΠΕΝ ΥΣΕΩΝ & ΕΣΠΑ ΕΘΝΙΚΗ ΑΡΧΗ ΣΥΝΤΟΝΙΣΜΟΥ ΕΙ ΙΚΗ ΥΠΗΡΕΣΙΑ Ο.Π.Σ.

Περιεχόµενα. 1 Εισαγωγή: Λίγα λόγια για το βιβλίο Τι νέο υπάρχει στο Outlook Ξεκίνηµα Ευχαριστίες...

Εργαστήριο 6 ο 7 ο / Ερωτήματα Ι

«Κρυπτογράφηση Εταιριών»

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο) Διδάσκων: Ανδρέας Γιαννακουλόπουλος Επιστημονικός συνεργάτης Εργαστηρίου: Στέλλα Λάμπουρα

Σχεδιασμός των Πινάκων μίας Βάσης Δεδομένων

Περιεχόμενα. 1 Tο βιβλίο Ξεκίνημα Σύνταξη και αποστολή ηλεκτρονικής αλληλογραφίας iii. Ευχαριστίες... ix

Οδηγίες Χρήσης Πλατφόρμας Ασύγχρονης Τηλεκπαίδευσης (Moodle) του Τμήματος ΔΕΤ

ΟΔΗΓΙΕΣ ΥΠΟΒΟΛΗΣ ΕΡΕΥΝΗΤΙΚΗΣ ΕΡΓΑΣΙΑΣ ΣΤΟ ΙΔΡΥΜΑΤΙΚΟ ΑΠΟΘΕΤΗΡΙΟ ΤΟΥ ΟΠΑ "ΠΥΞΙΔΑ"

Οδηγός ανάγνωσης αποστολής

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Σενάριο Χρήσης Moodle

Διαχειριστικό σύστημα ονομάτων χώρου

4.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας

Λειτουργικά Συστήματα

ΓΕΝΙΚΗ ΓΡΑΜΜΑΤΕΙΑ ΗΜΟΣΙΩΝ ΕΠΕΝ ΥΣΕΩΝ & ΕΣΠΑ ΕΘΝΙΚΗ ΑΡΧΗ ΣΥΝΤΟΝΙΣΜΟΥ ΕΙ ΙΚΗ ΥΠΗΡΕΣΙΑ Ο.Π.Σ.

Το σύστημα Βοήθειας του Internet Explorer

Φόρμες και Αγαπημένα. Έκδοση 5.2. Οδηγός διαχειριστή

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

Ενότητα. Επεξεργασία πινάκων

Κεφάλαιο 1: Έναρξη...3

Οδηγός Χρήσης Εφαρμογής Ανάρτησης μέσω Διαδικτύου. (Έκδοση: 9.0)

Ενότητα. Εισαγωγή στη Microsoft Access

Περιεχόμενα. Μέρος 1: Βασικές έννοιες Πληροφορικής και επικοινωνιών Μέρος 2: Χρήση υπολογιστή και διαχείριση αρχείων Πρόλογος...

F-Secure Anti-Virus for Mac 2015

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Για χρήση στους πολυλειτουργικούς εκτυπωτές (MFP) με δυνατότητα Xerox ConnectKey Technology

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

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access Κεφάλαιο 2 Χειρισμός πινάκων... 27

Ο.Π.Σ. σύμφωνα με Π Τ Π. Έκδοση: ι με τη

Εγχειρίδιο χρήσης συστήματος ηλεκτρονικής αλληλογραφίας της Ελληνικής Ομοσπονδίας Μπριτζ

Περιεχόμενα Ορισμός και λειτουργία των μηχανών Turing Θεωρία Υπολογισμού Ενότητα 20: Μηχανές Turing: Σύνθεση και Υπολογισμοί Επ. Καθ. Π. Κατσαρός Τμήμ

Εγκατάσταση λειτουργίας Σάρωση σε

Αναλυτικά Φύλλα Μισθοδοσίας

Lexicon Software Pachutzu

WinEra ERP. Γενικός Κανονισμός Προστασίας Προσωπικών Δεδομένων (GDPR)

Εγχειρίδιο Χρήσης για Διαχειριστές. Πλατφόρμα Μεταφόρτωσης και Μετατροπής Βίντεο

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δραστηριότητα 9 Δημιουργία και διαχείριση blog μέσω του Blogger. Δημιουργία ιστολογίου

Πρότυπα βιβλίων εργασίας και ονόματα κελιών

ΟΔΗΓΙΕΣ ΥΠΟΒΟΛΗΣ ΔΙΔΑΚΤΟΡΙΚΩΝ ΔΙΑΤΡΙΒΩΝ ΣΤΟ ΙΔΡΥΜΑΤΙΚΟ ΑΠΟΘΕΤΗΡΙΟ ΤΟΥ ΟΠΑ "ΠΥΞΙΔΑ"

PRISMA Win POS Sync Merge Replication

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ: Εντολές κίνησης και στροφής στο προγραμματιστικό περιβάλλον Scratch. ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

Transcript:

TEC610 (ΣΤ εξάμηνο) Διδάσκων: Ανδρέας Γιαννακουλόπουλος Εαρινό εξάμηνο

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ιόνιο Πανεπιστήμιο» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 1

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons 2

Cookies, Sessions & Τεχνικές Ασφάλειας 2

1. Μπισκότα και Περίοδοι Εργασίας Το HTTP είναι μια μη καταστασιακή τεχνολογία, δηλαδή κάθε σελίδα HTML είναι μια ανεξάρτητη οντότητα. Το πρωτόκολλο HTTP δε διαθέτει καμία μέθοδο παρακολούθησης των χρηστών ή διατήρησης μεταβλητών κατά την περιήγηση ενός χρήστη σε μια τοποθεσία. Ο διακομιστής σε αντίθεση με το φυλλομετρητή δεν καταγράφει ποιος έχει δει τι. Δυο εργαλεία της PHP, τα μπισκότα (cookies) και οι περίοδοι εργασίας (sessions), μπορούν να χρησιμοποιηθούν για να παρακάμψετε το πρόβλημα αυτό. 3

Τα μπισκότα αποθηκεύουν δεδομένα στο φυλλομετρητή ιστού του χρήστη. Όταν ο χρήστης προσπελάζει μια ιστοσελίδα της τοποθεσίας από την οποία προήλθε το μπισκότο, ο διακομιστής μπορεί να διαβάσει τα δεδομένα του μπισκότου. Οι περίοδοι εργασίας αποθηκεύουν δεδομένα στον ίδιο το διακομιστή. Οι περίοδοι εργασίας είναι πιο ασφαλείς από τα μπισκότα και μπορούν να αποθηκεύσουν πολύ περισσότερες πληροφορίες. 4

1.1 Δημιουργία Σελίδας Σύνδεσης Η διαδικασία σύνδεσης χρήστη περιλαμβάνει πολύ λίγα συστατικά: Μια φόρμα για την υποβολή των πληροφοριών σύνδεσης Μια ρουτίνα επικύρωσης που επαληθεύει ότι υποβλήθηκαν όλες οι απαραίτητες πληροφορίες Ένα ερώτημα βάσης δεδομένων που συγκρίνει τις υποβληθείσες πληροφορίες με τις ήδη αποθηκευμένες στη βάση δεδομένων Μπισκότα ή περιόδους εργασίας για την αποθήκευση δεδομένων που αντιστοιχούν σε μια επιτυχημένη σύνδεση χρήστη 5

Οι επόμενες σελίδες της τοποθεσίας θα ελεγχθούν αν ο χρήστης έχει όντως συνδεθεί. Υπάρχει και η διαδικασία αποσύνδεσης χρήστη, κατά την οποία καθαρίζονται τα δεδομένα των μπισκότων ή των περιόδων εργασίας της κατάστασης σύνδεσης. 6

1.1.1 Δημιουργήστε μια σελίδα σύνδεσης χρήστη 1. Δημιουργήστε μια νέα σελίδα PHP 2. Συμπεριλάβετε την κεφαλίδα 3. Τυπώστε τυχόν μηνύματα σφαλμάτων 7

4. Εμφανίστε τη φόρμα Η φόρμα HTML χρειάζεται μόνο δυο εισόδους κειμένου, μια για τη διεύθυνση ηλ. ταχυδρομίου και μια για τον κωδικό πρόσβασης. Για να δημιουργηθεί πιο εύκολα η φόρμα πρώτα κλείνουμε το τμήμα κώδικα της PHP. 8

5. Ολοκληρώστε τη σελίδα. 6. Αποθηκεύστε το αρχείο με το όνομα login_page.inc.php Η σελίδα αυτή θα χρησιμοποιήσει την προέκταση.inc.php για να δείξει ότι πρόκειται για αρχείο συμπερίληψης που περιέχει κώδικα PHP. 9

1.2 Δημιουργία των Συναρτήσεων Σύνδεσης Μαζί με τη σελίδα σύνδεσης που αποθηκεύσαμε στο σενάριο login_page.inc.php, θα είναι κοινές και κάποιες άλλες λειτουργίες σε αρκετά σενάρια που θα ακολουθήσουν. Πολλές σελίδες ανακατευθύνουν το χρήστη σε κάποια άλλη σελίδα. Η ανακατεύθυνση χρησιμοποιεί τη συνάρτηση header() Επειδή αυτή η συνάρτηση θα στείλει το φυλλομετρητή στη σελίδα όνομα_σελίδας.php το σενάριο θα πρέπει να τερματίζεται με τη συνάρτηση exit() 10

Η τιμή location (θέση) στην κλήση της header() πρέπει να είναι απόλυτη διεύθυνση URL (πχ. www.example.com/όνομα_σελίδας.php). Μπορείτε να ενσωματώσετε αυτή την τιμή με κώδικα ή να την προσδιορίσετε δυναμικά, όπως θα κάνει η πρώτη συνάρτηση του επόμενου σεναρίου. Το υπόλοιπο τμήμα του κώδικα του σεναρίου που ακολουθεί θα επικυρώνει τα δεδομένα της φόρμας σύνδεσης (διαδικασία 3 βημάτων): 1. Επαληθεύουμε ότι πληκτρολογήθηκε διεύθυνση ηλ.ταχυδρομείου 2. Επαληθεύουμε ότι πληκτρολογήθηκε κωδικός πρόσβασης 3. Επαληθεύουμε ότι η διεύθυνση ηλ.ταχυδρομείου και ο κωδικός πρόσβασης που δόθηκαν είναι ίδια με τα αποθηκευμένα στη βάση δεδομένων. 11

1.2.1 Δημιουργήστε τις συναρτήσεις σύνδεσης 1. Δημιουργήστε μια νέα σελίδα PHP 2. Ξεκινήστε τον ορισμό μιας νέας συνάρτησης Η συνάρτηση absolute_url() επιστρέφει μια απόλυτη διεύθυνση URL που αντιστοιχεί στην τοποθεσία που εκτελεί αυτά τα σενάρια. Το όφελος της συνάρτησης αυτής είναι ότι μπορείτε να αναπτύξετε τον κώδικά σας σε ένα διακομιστή και να τον μεταφέρετε σε άλλο διακομιστή χωρίς να χρειαστεί να τον τροποποιήσετε καθόλου 12

3. Ξεκινήστε τον ορισμό της διεύθυνσης URL 4. Αφαιρέστε τυχόν καθέτους από το τέλος της διεύθυνσης URL. 5. Προσθέστε τη συγκεκριμένη σελίδα στη διεύθυνση URL και ολοκληρώστε τη συνάρτηση. 13

6. Ξεκινήστε μια νέα συνάρτηση Αυτή η συνάρτηση επικυρώνει τα στοιχεία σύνδεσης χρήστη και δέχεται τρία ορίσματα. 7. Επικυρώστε τη διεύθυνση ηλ.ταχυδρομείου και τον κωδικό πρόσβασης. 14

8. Αν δεν προέκυψαν σφάλματα εκτελέστε το ερώτημα προς τη βάση δεδομένων. Το ερώτημα επιλέγει από τη βάση δεδομένων τις τιμές user_id και first_name του χρήστη που η αποθηκευμένη διεύθυνση ηλ.ταχυδρομείου είναι ίδια με την υποβληθείσα. 15

9. Ελέγξτε τα αποτελέσματα του ερωτήματος 16

10. Ολοκληρώστε τη συνθήκη που ξεκινήσατε στο 8 και τη συνάρτηση. 11. Ολοκληρώστε τη σελίδα. 12. Αποθηκεύστε το αρχείο με το όνομα login_functions.inc.php (μαζί με τα αρχεία header.html, footer.html και style.css) 17

1.3 Χρήση Μπισκότων Τα μπισκότα παρέχουν στο διακομιστή έναν τρόπο αποθήκευσης πληροφοριών στον υπολογιστή του χρήστη. Είναι μια μέθοδος με την οποία μια τοποθεσία μπορεί να θυμάται ή να «παρακολουθεί» ένα χρήστη που την επισκέπτεται. Σε ένα μπισκότο αποθηκεύονται οι πληροφορίες που παρέχετε εσείς. Το μέγεθος των μπισκότων περιορίζεται σε 4kb και κάθε φυλλομετρητής μπορεί να θυμάται ένα πεπερασμένο αριθμό μπισκότων από κάθε τοποθεσία (50). 18

1.3.1 Δημιουργία Μπισκότων Το πιο σημαντικό πράγμα σχετικά με τα μπισκότα είναι ότι πρέπει να στέλνονται από το διακομιστή στον πελάτη πριν από οποιαδήποτε άλλη πληροφορία. Αν ο διακομιστής επιχειρήσει να στείλει ένα μπισκότο αφού ο φυλλομετρητής έχει ήδη λάβει κώδικα HTML θα προκύψει σφάλμα και το μπισκότο δε θα σταλεί. Τα μπισκότα στέλνονται μέσω της συνάρτησης setcookie(): setcookie (όνομα, τιμή); setcookie ( name, Nicole ); Τα ονόματα των μπισκότων όπως και κάθε όνομα μεταβλητής της PHP, δεν πρέπει να περιέχουν κενά διαστήματα ή σημεία στίξης και ισχύει η διάκριση πεζών κεφαλαίων. 19

1.3.2 Στείλτε Ένα Μπισκότο 1. Δημιουργήστε ένα νέο έγγραφο PHP. 2. Επικυρώστε τη φόρμα Το σενάριο αυτό κάνει δυο πράγματα: εμφανίζει τη φόρμα και χειρίζεται τη διαδικασία υποβολής της. Αυτή η συνθήκη ελέγχει αν η φόρμα έχει υποβληθεί. 20

3. Αν ο χρήστης καταχώρησε τις σωστές πληροφορίες συνδέστε τον. 4. Ανακατευθύνετε το χρήστη σε άλλη σελίδα. 21

5. Ολοκληρώστε τη συνθήκη $check και κλείστε τη σύνδεση με τη βάση δεδομένων. 6. Ολοκληρώστε την κύρια συνθήκη υποβολής και συμπεριλάβετε τη σελίδα σύνδεσης. 7. Αποθηκεύστε το αρχείο με όνομα login.php 22

1.3.3 Προσπέλαση Μπισκότων Για να ανακτήσετε μια τιμή από ένα μπισκότο, αρκεί να αναφερθείτε στην υπερκαθολική μεταβλητή $_COOKIE, χρησιμοποιώντας ως κλειδί το κατάλληλο όνομα μπισκότου. Προσπελάστε ένα μπισκότο: 1. Δημιουργήστε ένα έγγραφο PHP. Ο χρήστης αφού συνδεθεί με επιτυχία θα ανακατευθυνθεί σε αυτή τη σελίδα όπου θα δει ένα προσωπικό χαιρετισμό. 23

2. Ελέγξτε αν υπάρχει μπισκότο. 3. Ανακατευθύνετε το χρήστη εφόσον δεν έχει συνδεθεί. 4. Συμπεριλάβετε την κεφαλίδα της σελίδας. 24

5. Καλωσορίστε το χρήστη χρησιμοποιώντας το μπισκότο. 6. Ολοκληρώστε τη σελίδα της HTML. 7. Αποθηκεύστε το αρχείο με το όνομα loggedin.php 25

9. Για μα δείτε τα μπισκότα που έχουν δημιουργηθεί αλλάξτε κατάλληλα τις ρυθμίσεις για τα μπισκότα στο φυλλομετρητή σας και δοκιμάστε ξανά το σενάριο σύνδεσης. 26

1.3.4 Ρύθμιση Παραμέτρων Μπισκότων Αν και για τη συνάρτηση setcookie() η μεταβίβαση του ονόματος και της τιμής είναι αρκετά, πρέπει να γνωρίζετε και τα υπόλοιπα ορίσματα. Η συνάρτηση δέχεται μέχρι πέντε επιπλέον παραμέτρους (συνολικά δηλαδή επτά) κάθε μια από τις οποίες αλλάζει τον ορισμό του μπισκότου. Το όρισμα λέξη καθορίζει τη διάρκεια ζωής του μπισκότου σε δευτερόλεπτα από την εποχή του Unix. Αν δεν καθοριστεί διάρκεια ζωής το μπισκότο λειτουργεί μέχρι ο χρήστης να κλείσει το φυλλομετρητή του. 27

Τα ορίσματα διαδρομή και υπολογιστής_υπηρεσίας περιορίζουν το μπισκότο σε ένα συγκεκριμένο φάκελο της τοποθεσίας (διαδρομή) ή σε ένα συγκεκριμένο υπολογιστή υπηρεσίας. Η παράμετρος ασφάλεια δηλώνει ότι το μπισκότο πρέπει να σταλεί μόνο μέσω μιας ασφαλούς σύνδεσης HTTPS. Στην PHP 5.2 προστέθηκε και το όρισμα αποκλειστικά_http. Πρόκειται για μια λογική τιμή που επιτρέπει την προσπέλαση του μπισκότου μόνο μέσω του πρωτοκόλλου HTTP. Η επιβολή αυτού του περιορισμού κάνει το μπισκότο πιο ασφαλές αλλά δεν υποστηρίζεται από όλους τους φυλλομετρητές. 28

Καθορίστε τις παραμέτρους ενός μπισκότου: 1. Ανοίξτε το σενάριο login.php 2. Τροποποιήστε τις δυο γραμμές setcookie() ώστε να περιλαμβάνουν χρόνο λήξης 60 λεπτών. 3. Αποθηκεύστε το σενάριο στον κατάλογο της τοποθεσίας στο διακομιστή και δοκιμάστε το στο φυλλομετρητή. 29

1.3.5 Διαγραφή Μπισκότων Παρόλο που τα μπισκότα λήγουν αυτόματα όταν ο χρήστης κλείνει το φυλλομετρητή ή όταν φτάσει η ημερομηνία λήξης τους, κάποιες φορές θα χρειαστεί να τα διαγράψετε. (πχ. Σε τοποθεσίες με δυνατότητες σύνδεσης χρηστών τα τυχόν μπισκότα πρέπει να διαγράφονται όταν αποσυνδέεται ο αντίστοιχος χρήστης). Αν στείλετε ένα μπισκότο που αποτελείται μόνο από ένα όνομα χωρίς τιμή, θα έχετε το ίδιο αποτέλεσμα με τη διαγραφή του υπάρχοντος μπισκότου με το ίδιο όνομα. 30

Διαγράψτε ένα μπισκότο: 1. Δημιουργήστε ένα νέο έγγραφο PHP. 2. Ελέγξτε αν υπάρχει μπισκότο με το όνομα user_id, αν δεν υπάρχει ανακατευθύνετε το χρήστη. 31

3. Διαγράψτε τα μπισκότα αν υπάρχουν 4. Πληκτρολογήστε τον υπόλοιπο κώδικα της σελίδας PHP. 5. Αποθηκεύστε το αρχείο ως logout.php 32

Δημιουργήστε το σύνδεσμο αποσύνδεσης: 1. Ανοίξτε το αρχείο header.html 2. Αλλάξτε τον πέμπτο και τελευταίο σύνδεσμο ως εξής: Η παραπάνω συνθήκη θα πρέπει να εμφανίζει ένα σύνδεσμο logout αν ο χρήστης είναι συνδεδεμένος και ένα σύνδεσμο login αν ο χρήστης είναι αποσυνδεδεμένος. 33

3. Αποθηκεύστε το αρχείο μέσα στο φάκελο includes και δοκιμάστε τη διαδικασία σύνδεσης/αποσύνδεσης στο φυλλομετρητή σας. 34

1.4 Χρήση Περιόδων Εργασίας Οι περίοδοι εργασίας είναι μια απλή μέθοδος διάθεσης δεδομένων σε πολλές σελίδες μιας τοποθεσίας Ιστού. Τα δεδομένα των περιόδων εργασίας αποθηκεύονται στο διακομιστή, όχι στο φυλλομετρητή, και για τον εντοπισμό των δεδομένων εγγραφής ενός συγκεκριμένου χρήστη χρησιμοποιείται το αναγνωριστικό περιόδου εργασίας. Οι περίοδοι εργασίας είναι πιο ασφαλείς αφού όλες οι πληροφορίες παραμένουν στο διακομηστή. Στις περιόδους εργασίας μπορείτε να αποθηκεύσετε περισσότερα δεδομένα από ότι στα μπισκότα. Αν και μερικοί χρήστες απενεργοποιούν τα μπισκότα οι περίοδοι εργασίας μπορούν να λειτουργήσουν και ανεξάρτητα από αυτά. 35

1.4.1 Περίοδοι Εργασίας ή Μπισκότα; Οι περίοδοι εργασίας έχουν τα παρακάτω πλεονεκτήματα σε σχέση με τα μπισκότα: Είναι γενικά πιο ασφαλείς Επιτρέπουν την αποθήκευση περισσοτέρων δεδομένων Μπορούν να χρησιμοποιηθούν χωρίς μπισκότα Τα μπισκότα πλεονεκτούν στα εξής σε σχέση με τις περιόδους εργασίας: Υλοποιούνται πιο εύκολα Απαιτούν λιγότερους πόρους του διακομιστή Γενικά για την αποθήκευση και την ανάκτηση λίγων μόνο πληροφοριών χρησιμοποιήστε μπισκότα. 36

1.4.2 Ορισμός Μεταβλητών των Περιόδων Εργασίας Ο πιο σημαντικός κανόνας για τις περιόδους εργασίας είναι ότι κάθε σελίδα που θέλει να τις χρησιμοποιήσει πρέπει να ξεκινάει με την κλήση της συνάρτησης session_start(). Η συνάρτηση αυτή ενημερώνει την PHP να ξεκινήσει μια νέα περίοδο εργασίας ή να προσπελάσει μια υπάρχουσα. Την πρώτη φορά που χρησιμοποιείται προσπαθεί να στείλει ένα μπισκότο για αυτό και πρέπει να καλείται πριν από την αποστολή οποιωνδήποτε δεδομένων στο φυλλομετρητή. Αφού ξεκινήσει η περίοδος εργασίας μπορείτε να τις αναθέσετε τιμές. 37

Ξεκινήστε μια περίοδο εργασίας: 1. Ανοίξτε το αρχείο login.php 2. Αντικαταστήστε τις γραμμές 12-14 που καλούν τη setcookie() με τις παρακάτω: Αφού πριν από το σημείο του σεναρίου δεν υπάρχουν εντολές echo() και συμπερίληψης αρχείων HTML, ούτε κενά διαστήματα, μπορούμε να χρησιμοποιήσουμε τη session_start() με ασφάλεια. 3. Αποθηκεύστε τη σελίδα ως login.php 38

1.4.3 Προσπέλαση Μεταβλητών των Περιόδων Εργασίας Αφού ξεκινήσει μια περίοδος εργασίας και αφού καταγραφούν μεταβλητές σε αυτή, μπορείτε να δημιουργήσετε άλλα σενάρια που θα προσπελάζουν αυτές τις μεταβλητές. Για αυτό το σκοπό κάθε σενάριο πρέπει πρώτα να ενεργοποιεί τις περιόδους εργασίας με την session_start(). Η συνάρτηση αυτή δίνει στο τρέχον σενάριο πρόσβαση στην περίοδο εργασίας που έχει ήδη ξεκινήσει ή δημιουργεί μια νέα περίοδο εργασίας. Αν το αναγνωριστικό της τρέχουσας περιόδου εργασίας δεν βρεθεί και δημιουργηθεί νέο, δε θα είναι διαθέσιμα τα δεδομένα της παλιάς περιόδου εργασίας. 39

Προσπελάστε περιόδους εργασίας: 1. Ανοίξτε το σενάριο loggedin.php 2. Προσθέστε μια κλήση της συνάρτησης session_start(): Κάθε σενάριο PHP που ορίζει ή προσπελάζει μεταβλητές περιόδου εργασίας είναι απαραίτητο να χρησιμοποιεί τη συνάρτηση session_start(). 40

3. Αντικαταστήστε τις αναφορές στη μεταβλητή $_COOKIE με αναφορές $_SESSION 4. Αποθηκεύστε το αρχείο ως loggedin.php 41

5. Στο αρχείο header.html αντικαταστήστε την αναφορά στην $_COOKIE με την αναφορά στη $_SESSION. 6. Αποθηκεύστε το αρχείο-κεφαλίδα στο φάκελο includes 42

1.4.4 Διαγραφή Μεταβλητών Περιόδου Εργασίας Όταν χρησιμοποιείτε περιόδους εργασίας πρέπει να φροντίζετε και για τη διαγραφή των δεδομένων τους. Για να διαγράψετε μια μεταβλητή της περιόδου εργασίας μπορείτε να χρησιμοποιήσετε τη συνάρτηση unset() Για να διαγράψετε όλες τις μεταβλητές της περιόδου εργασίας ορίστε πάλι ολόκληρο το μητρώο $_SESSION Για να αφαιρέσετε όλα τα δεδομένα της περιόδου εργασίας χρησιμοποιήστε τη συνάρτηση: 43

Διαγράψτε μια περίοδο εργασίας: 1. Ανοίξτε το αρχείο logout.php 2. Αμέσως μετά την αρχική ετικέτα της PHP ξεκινήστε την περίοδο εργασίας: session_start(); 3. Αλλάξτε τη συνθήκη ώστε να ελέγχει αν υπάρχει μεταβλητή περιόδου εργασίας. 4. Αντικαταστήστε τις γραμμές setcookie() με τις: 44

5. Αφαιρέστε από το μήνυμα την αναφορά στη μεταβλητή $_COOKIE. 6. Αποθηκεύστε το αρχείο με το όνομα logout.php και δοκιμάστε το στο φυλλομετρητή Ιστού σας. 45

1.5 Βελτίωση της Ασφάλειας της Περιόδου Εργασίας Με τις περιόδους εργασίας πρέπει να είστε προσεκτικοί σε δυο πράγματα: 1. Το αναγνωριστικό περιόδου εργασία που αποτελεί σημείο αναφοράς στα δεδομένα της περιόδου εργασίας. 2. Τα ίδια τα δεδομένα της περιόδου εργασίας στο διακομιστή. Το αναγνωριστικό περιόδου εργασίας είναι το κλειδί για τα δεδομένα της περιόδου. Εξ ορισμού η PHP αποθηκεύει το αναγνωριστικό σε ένα μπισκότο, που από πλευρά ασφάλειας είναι καλύτερα. Στην PHP μπορείτε να χρησιμοποιήσετε περιόδους εργασίας χωρίς μπισκότα, αλλά η εφαρμογή σας θα είναι ευάλωτη σε πειρατεία περιόδου εργασίας. 46

Μια μέθοδος αποτροπής της πειρατείας είναι να αποθηκεύσετε ένα είδος αναγνωριστικού χρήστη στην περίοδο εργασίας και μετά να τη διπλοελέγχετε τακτικά. Η τιμή HTTP_USER_AGENT (συνδυασμός του χρησιμοποιούμενου φυλλομετρητή και λειτουργικού συστήματος) είναι κατάλληλη για αυτό το σκοπό, επειδή για να έχει κάποιος τη δυνατότητα να υποκλέψει την περίοδο εργασίας ενός άλλου χρήστη, πρέπει να χρησιμοποιεί ακριβώς τον ίδιο φυλλομετρητή και λειτουργικό σύστημα. 47

Χρησιμοποιήστε πιο ασφαλείς περιόδους εργασίας: 1. Ανοίξτε το αρχείο login.php 2. Αφού αναθέσετε τιμές στις άλλες μεταβλητές της περιόδου εργασίας, αποθηκεύστε και την τιμή HTTP_USER_AGENT Με τη συνάρτηση md5() μπορείτε να κρυπτογραφήσετε την τιμή της περιόδου εργασίας. 3. Αποθηκεύστε το αρχείο στον κατάλογο της τοποθεσίας. 4. Ανοίξτε το σενάριο loggedin.php 48

5. Αλλάξτε τη συνθήκη!isset($_session[ user_id ]) σε: Η συνθήκη αυτή ελέγχει αν έχει οριστεί η μεταβλητή $_SESSION[ agent ] και αν η κρυπτογραφημένη με τη συνάρτηση md5() τιμή της μεταβλητής διαφέρει από τη τιμή της αποθηκευμένης μεταβλητής. 6. Αποθηκεύστε το αρχείο στον κατάλογο της τοποθεσίας και δοκιμάστε το στο φυλλομετρητή σας συνδεόμενοι στην τοποθεσία. 49

2. Τεχνικές Ασφάλειας Η πιο σημαντική έννοια που πρέπει να κατανοήσετε όσον αφορά την ασφάλεια των εφαρμογών σας, είναι ότι δεν υπάρχουν μόνο δύο σαφείς καταστάσεις, δηλαδή μία τοποθεσία ιστού είναι είτε ασφαλής είτε μη ασφαλής. Όταν προγραμματίζετε, σκεφτείτε τι μπορείτε να κάνετε ώστε η τοποθεσία σας να είναι περισσότερο ασφαλής και τι έχετε κάνει που καθιστά την τοποθεσία σας λιγότερο ασφαλή. Η βελτίωση της ασφάλειας κοστίζει σε ευκολία χρήσης και σε απόδοση. Η αυξημένη ασφάλεια συνήθως συνεπάγεται περισσότερο κώδικα, περισσότερους ελέγχους και περισσότερες απαιτήσεις που θέτει ο διακομιστής. 50

2.1 Αποκλεισμός Ανεπιθύμητης Αλληλογραφίας Ανεξάρτητα από τον τρόπο αποστολής, τη μορφοποίηση και την εμφάνισή του όταν το παραλαμβάνετε, ένα μήνυμα ηλ. ταχυδρομείου αποτελείται από δύο μέρη: την κεφαλίδα και το σώμα. Η κεφαλίδα περιλαμβάνει πληροφορίες όπως οι διευθύνσεις αποστολέα και παραλήπτη, το θέμα, η ημερομηνία κ.α. Κάθε στοιχείο της κεφαλίδας είναι σε ξεχωριστή γραμμή και έχει τη μορφή όνομα:τιμή. Το σώμα του μηνύματος είναι το περιεχόμενο του μηνύματος. Αν εξετάσετε τη σύνταξη της συνάρτησης mail() θα δείτε ότι ένα από τα ορίσματα πηγαίνει κατευθείαν στο σώμα του μηνύματος και τα υπόλοιπα στην κεφαλίδα του. 51

Για να στείλει κάποιος χρήστης μήνυμα ανεπιθύμητης αλληλογραφίας (spam) στη διεύθυνσή σας, αρκεί να προσθέσει το μήνυμα στο τμήμα σχολίων της φόρμας. Επίσης, μπορεί ταυτόχρονα να στείλει ένα μήνυμα ανεπιθύμητης αλληλογραφίας και σε οποιονδήποτε άλλο χρήστη προσθέτοντας στην κεφαλίδα του μηνύματος το κείμενο Bcc: talaiporos@example.org ακολουθούμενο από κάποιο χαρακτήρα τερματισμού γραμμής. Υπάρχουν μερικές τεχνικές προφύλαξης που μπορείτε να εφαρμόσετε, όπως η επικύρωση των διευθύνσεων ηλ. ταχυδρομείου με τη χρήση κανονικών παραστάσεων. 52

Τώρα που γνωρίζετε τι πρέπει να καταχωρίσει ένας κακόβουλος χρήστης για να στείλει ένα μήνυμα spam ελέγξτε αν στις τιμές της φόρμας υπάρχουν αυτοί οι χαρακτήρες. Αν κάποια τιμή περιέχει κάποιον απ' τους χαρακτήρες της λίστας, μη τη χρησιμοποιείτε. 53

2.1.1 Ελέγξτε την Ανεπιθύμητη Αλληλογραφία 1. Ανοίξτε το αρχείο email.php. 2. Αφού ελέγξετε αν υποβλήθηκε η φόρμα, ξεκινήστε τον ορισμό μιας συνάρτησης. 3. Δημιουργήστε έναν κατάλογο με "κακόβουλες" συμβολοσειρές που κανονικά δεν πρέπει να υποβάλλονται μέσω φόρμας. 54

4. Διατρέξτε τον πίνακα με ένα βρόχο. Αν εντοπιστεί κάποια επικίνδυνη συμβολοσειρά, επιστρέψτε μια κενή συμβολοσειρά. 55

5. Αντικαταστήστε τυχόν χαρακτήρες αλλαγής γραμμής με κενά διαστήματα. Ο χαρακτήρας αλλαγής γραμμής είναι απαραίτητος για την αποστολή μηνύματος spam, γι' αυτό το λόγο όταν εντοπίζονται αντικαθίστανται με κενό διάστημα. Αυτό σημαίνει ότι μπορεί να αλλοιωθεί η μορφοποίηση της υποβαλλομενης τιμής, αλλά το τίμημα είναι λογικό για τον αποκλεισμό της ανεπιθύμητης αλληλογραφίας. Η συνάρτηση str_replace() ελέγχει την τιμή του τρίτου ορίσματος και αντικαθιστά τις παρουσίες των χαρακτήρων του πρώτου ορίσματος με το χαρακτήρα ή τους χαρακτήρες του δεύτερου ορίσματος. 56

6. Επιστρέψτε την τιμή και ολοκληρώστε τη συνάρτηση. 7. Αφού την ορίσετε, καλέστε τη συνάρτηση spam_scrubber(). Η συνάρτηση array_map() δέχεται δύο υποχρεωτικά ορίσματα. Το πρώτο είναι το όνομα της συνάρτησης που θέλετε να καλέσετε (scam_scrubber), το δεύτερο όρισμα είναι ένα μητρώο. Αυτό που κάνει η συνάρτηση array_map() είναι να καλεί τη συνάρτηση spam_scrubber() μία φορά για κάθε στοιχείο του μητρώου, στέλνοντας την τιμή του στοιχείου αυτού στη συνάρτηση. 57

8. Αλλάξτε τον κώδικα επικύρωσης της φόρμας ώστε να χρησιμοποιεί αυτό το νέο μητρώο. 9. Αλλάξτε τον κώδικα δημιουργίας της μεταβλητής $body ώστε να χρησιμοποιεί τις καθαρές τιμές. 58

10. Αλλάξτε την κλίση της συνάρτησης mail() ώστε να χρησιμοποιεί την καθαρή διεύθυνση ηλεκ. ταχυδρομείου. 11. Αποθηκεύστε το σενάριο με όνομα email.php. 59

2.2 Επικύρωση Δεδομένων Κατά Τύπο Μέχρι εδώ ο κώδικας επικύρωσης φορμών ήταν αρκετά απλός και μάλιστα τις περισσότερες φορές έλεγχε μόνο αν κάποια μεταβλητή είχε τιμή ή όχι. Η PHP υποστηρίζει πολλούς τύπους δεδομένων: συμβολοσειρές, αριθμούς, μητρώα κ.λπ. Για κάθε τύπο υπάρχει μία συνάρτηση που ελέγχει αν κάποια μεταβλητή ανήκει σε αυτόν. 60

Η PHP επιτρέπει να αλλάξετε τον τύπο μιας μεταβλητής ακόμα και αφού της έχει ανατεθεί τιμή. Αυτό είναι γνωστό ως μετατροπή τύπου (typecasting) και το υλοποιείτε γράφοντας τον τύπο πριν από το όνομα της μεταβλητής μέσα σε παρενθέσεις. Ανάλογα με τον τύπο προέλευσης και προορισμού η PHP θα μετατρέψει κατάλληλα την τιμή της μεταβλητής. Η μετατροπή των αριθμητικών τιμών είναι απλή, αλλά για τους άλλους τύπους μεταβλητών ισχύουν πιο πολύπλοκοι κανόνες. 61

2.2.1 Χρησιμοποιήστε Mετατροπή Tύπου 1. Ξεκινήστε ένα νέο έγγραφο PHP. 62

2. Ελέγξτε αν έχει υποβληθεί η φόρμα. 3. Αλλάξτε τον τύπο όλων των μεταβλητών. 4. Ελέγξτε αν οι μεταβλητές έχουν τις κατάλληλες τιμές και στη συνέχεια υπολογίστε και τυπώστε τα αποτελέσματα. 63

5. Ολοκληρώστε τις συνθήκες. 6. Ξεκινήστε τη φόρμα της HTML. 64

7. Ολοκληρώστε τη φόρμα της HTML. 8. Ολοκληρώστε τη σελίδα της HTML. 65

9. Αποθηκεύστε το αρχείο με το όνομα calculator.php. 66

2.3 Αποφυγή Επιθέσεων XSS Πολλές δυναμικές εφαρμογές ιστού παίρνουν τις πληροφορίες που υποβάλλει ο χρήστης, τις αποθηκεύουν σε μια βάση δεδομένων και τις επανεμφανίζουν σε κάποια άλλη σελίδα. Ένα τέτοιο παράδειγμα είναι ένα φόρουμ. Το λιγότερο που μπορεί να συμβεί στην περίπτωση που κάποιος χρήστης πληκτρολογήσει κώδικα HTML στα δεδομένα είναι να χαλάσει η διάταξη και η αισθητική της σελίδας. Ακόμα χειρότερα, ο κώδικας JavaScript είναι και αυτός απλό κείμενο αλλά με ειδική σημασία για τους φυλλομετρητές - εκτελέσιμο. Αν στη φόρμα καταχωρηθεί κακόβουλος κώδικας και σταλεί ξανά στο φυλλομετρητή θα μπορούσε να εμφανίσει αναδυόμενα παράθυρα, να υποκλέψει μπισκότα ή να ανακατευθύνει τον χρήστη σε άλλες τοποθεσίες. Τέτοιου είδους επιθέσεις είναι γνωστές ως επιθέσεις XSS (cross-site scripting). 67

Για να αντιμετωπίσετε τις επιθέσεις XSS αποκλείετε τον επικίνδυνο κώδικα PHP, HTML ή JavaScript. Η PHP διαθέτει κάποιες συναρτήσεις χειρισμού HTML και άλλου κώδικα που πειρέχεται σε συμβολοσειρές. Μεταξύ αυτών είναι οι εξής: Η συνάρτηση htmlspecialchars(), που μετατρέπει τους χαρακτήρες &, ', '', <, > στις αντίστοιχες οντότητες της HTML. Η συνάρτηση htmlentities() που μετατρέπει σε οντότητες HTML όσους χαρακτήρες αντιστοιχούν σε τέτοιες οντότητες. Η συνάρτηση strip_tags() που αφαιρεί όλες τις ετικέτες HTML και PHP. 68

Οι τρεις αυτές συναρτήσεις παρατίθενται με τη σειρά, με πρώτη αυτή που έχει τη μικρότερη επίδραση. Το ποια θα χρησιμοποιήσετε εξαρτάται από την εκάστοτε εφαρμογή. 69

2.3.1 Χειριστείτε Κώδικα HTML 1. Δημιουργήστε ένα νέο έγγραφο PHP. 70

2. Ελέγξτε αν έχει υποβληθεί η φόρμα και τυπώστε τα δεδομένα στην αρχική τους μορφή. 3. Εφαρμόστε τη συνάρτηση htmlentities() και τυπώστε τα αποτελέσματα. 71

4. Εφαρμόστε τη συνάρτηση strip_tags() και τυπώστε τα αποτελέσματα. 5. Ολοκληρώστε την ενότητα κώδικα της PHP. 72

6. Εμφανίστε τη φόρμα της HTML. 7. Ολοκληρώστε τη σελίδα. 8. Αποθηκεύστε τη σελίδα με όνομα xss.php 73

9. Εμφανίστε τον πηγαίο κώδικα της σελίδας για να δείτε την επίδραση αυτών των συναρτήσεων. 74

2.4 Αποφυγή Επιθέσεων με "ενέσεις" SQL Όπως υπονοεί το όνομα, πρόκειται για προσπάθειες προσθήκης κακόβουλου κώδικα στα ερωτήματα SQL μιας τοποθεσίας. Ένας σκοπός αυτών των επιθέσεων είναι η δημιουργία εσφαλμένων συντακτικά ερωτημάτων που θα αποκαλύψουν κάτι σχετικά με το σενάριο ή τη βάση δεδομένων στο μήνυμα σφάλματος που θα εμφανιστεί. Επιπρόσθετα, σκοπός του εισβολέα είναι να καταφέρει να τροποποιήσει, να καταστρέψει, ή να αποκαλύψει τα αποθηκευμένα δεδομένα. Ευτυχώς, οι επιθέσεις αυτού του τύπου αποτρέπονται εύκολα. 75

Ξεκινήστε επικυρώνοντας όλα τα δεδομένα που θα χρησιμοποιηθούν σε ερωτήματα. Μετά, χρησιμοποιήστε μια συνάρτηση όπως η mysqli_real_escape_string() που κάνει τα δεδομένα ασφαλή για χρήση στα ερωτήματα. Τέλος, μην εμφανίζετε πολλές λεπτομέρειες στα μηνύματα σφαλμάτων των ενεργών τοποθεσιών. Μια εναλλακτική αντί για την παραπάνω συνάρτηση είναι η χρήση έτοιμων εντολών. Όταν δεν χρησιμοποιούνται έτοιμες εντολές, ολόκληρο το ερώτημα μαζί με τη σύνταξη της SQL και τις συγκεκριμένες τιμές, στέλνεται στη MySQL ως μια επιμήκης συμβολοσειρά. Η MySQL αναλύει συντακτικά το ερώτημα και το εκτελεί. 76

Με ένα έτοιμο ερώτημα πρώτα στέλνεται η σύνταξη της SQL στη MySQL όπου αναλύεται για να εξασφαλιστεί η ορθότητά της. Στη συνέχεια στέλνονται ξεχωριστά οι τιμές. (Η MySQL συναρμολογεί το ερώτημα μ' αυτές τις τιμές και το εκτελεί) Τα πλεονεκτήματα των έτοιμων εντολών είναι σημαντικά: μεγαλύτερη ασφάλεια και πιθανόν καλύτερη απόδοση. Έτοιμες εντολές μπορείτε να δημιουργήσετε από οποιοδήποτε ερώτημα INSERT, UPDATE, DELETE ή SELECT. Ξεκινήστε με τον ορισμό του ερωτήματος επισημαίνοντας τα δεσμευτικά θέσης με αγγλικά ερωτηματικά. 77

Ως παράδειγμα, δείτε το ερώτημα SELECT του σεναρίου edit_user.php. Αυτό το ερώτημα μπορεί να γραφεί ως έτοιμη εντολή. Στη συνέχεια, ετοιμάστε την εντολή στη MySQL αναθέτοντας το αποτέλεσμα του ερωτήματος σε μια μεταβλητή της PHP. 78

Σε αυτό το σημείο, η MySQL θα αναλύσει συντακτικά το ερώτημα αλλά δεν θα το εκτελέσει. Κατόπιν, δεσμεύστε τα δεσμευτικά θέσης σε μεταβλητές της PHP, δηλαδή δηλώστε ότι μια μεταβλητή θα χρησιμοποιηθεί στη θέση ενός ερωτηματικού, κάποια άλλη στη θέση του επόμενου κ.ο.κ. Στο παράδειγμα που ακολουθεί, βλέπουμε ότι παρόλο που και η διεύθυνση ηλεκ. ταχυδρομείου και ο κώδικας πρόσβασης είναι συμβολοσειρές, δεν τοποθετούνται μέσα σε εισαγωγικά. Αυτή είναι μια άλλη διαφορά ανάμεσα στις έτοιμες εντολές και τα τυπικά ερωτήματα. 79

Αφού δεσμεύσετε την εντολή, μπορείτε να αναθέσετε τιμές στις μεταβλητές της PHP και μετά να εκτελέσετε την εντολή. 80

2.4.1 Χρησιμοποιήστε Έτοιμες Εντολές 1. Δημιουργήστε ένα νέο σενάριο PHP. 81

2. Ελέγξτε αν έχει υποβληθεί η φόρμα και συνδεθείτε στη βάση δεδομένων forum. 3. Ορίστε και προετοιμάστε το ερώτημα. Ορίζετε το ερώτημα χρησιμοποιώντας δεσμευτικά θέσης στη θέση των τιμών που θα ανατεθούν αργότερα. Στη συνέχεια η συνάρτηση mysqli_prepare() στέλνει το ερώτημα στη MySQL και το αποτέλεσμα ανατίθεται στη μεταβλητή $stmt. 82

4. Δεσμεύστε τις κατάλληλες μεταβλητές και δημιουργήστε μία λίστα τιμών προς ανάθεση. 83

5. Εκτελέστε το ερώτημα. 6. Τυπώστε τα αποτελέσματα της εκτέλεσης και ολοκληρώστε το βρόχο. 84

7. Ολοκληρώστε την εντολή και κλείστε τη σύνδεση με τη βάση δεδομένων. 8. Ολοκληρώστε τον κώδικα PHP. 85

9. Δημιουργήστε τη φόρμα. 86

10. Ολοκληρώστε τη σελίδα. 11.Αποθηκεύστε το αρχείο με όνομα post_message.php. 87

2.5 Κρυπτογράφηση Βάσης Δεδομένων Η MySQL διαθέτει πολλές ενσωματωμένες συναργήτσεις κρυπτογράφησης και αποκρυπτογράφησης. Αν πρέπει να αποθηκεύσετε τα δεδομένα σε κρυπτογραφημένη μορφή που μπορεί να αποκρυπτογραφηθεί, θα χρησιμοποιήσετε τις συναρτήσεις AES_ENCRYPT() και AES_DECRYPT(). Η συναρτήσεις αυτές δέχονται δύο ορίσματα: τη συμβολοσειρά που θα κρυπτογραφηθεί ή θα αποκρυπτογραφηθεί και ένα όρισμα που ονομάζεται salt. 88

Το salt είναι μια συμβολοσειρά που βοηθά ώστε η κρυπτογράφηση να είναι τυχαία. Η μόνη απαίτηση είναι ότι για την κρυπτογράφηση και για την αποκρυπτογράφηση πρέπει να χρησιμoποιηθεί ακριβώς το ίδιο salt. Για να προσθέσουμε μια εγγραφή σε έναν πίνακα, κρυπτογραφώντας ταυτόχρονα τα δεδομένα, το ερώτημα μπορεί να έχει την παρακάτω μορφή: 89

Τα κρυπτογραφημένα δεδομένα που επιστρέφει η συνάρτηση AES_ENCRYPT() θα είναι σε δυαδική μορφή. Για να αποθηκεύσουμε τα δεδομένα σε έναν πίνακα, η αντίστοιχη στήλη πρέπει να οριστεί ως δυαδικού τύπου. Η συνάρτηση AES_ENCRYPT() θεωρείται ως η ασφαλέστερη επιλογή κρυπτογράφησης. 90

2.5.1 Κρυπτογραφήστε και Αποκρυπτογραφήστε Δεδομένα 1. Προσπελάστε τη MySQL και επιλέξτε τη βάση δεδομένων test. 2. Δημιουργήστε έναν νέο πίνακα με το όνομα encode. Ο πίνακας encode θα περιέχει ένα πεδίο id και ένα πεδίο card_number. Τα δεδομένα αυτού του πεδίου θα κρυπτογραφηθούν με τη συνάρτηση AES_ENCRYPT() ώστε να είναι δυνατή η αποκρυπτογράφησή τους. 91

3. Προσθέστε μια νέα εγγραφή. Εδώ προσθέτουμε στον πίνακα μια νέα εγγραφή χρησιμοποιώντας τη συνάρτηση AES_ENCRYPT() με salt το ell10tt, για να κρυπτογραφήσουμε τον αριθμό κάρτας. 4. Ανακτήστε την εγγραφή σε μη κρυπτογραφημένη μορφή. 92

5. Εμφανίστε τα περιεχόμενα του πίνακα χωρίς να εφαρμόσετε αποκρυπτογράφηση. 93

2.5.2 Ασφαλής Αποθήκευση salt Tο πιο σημαντικό ζήτημα είναι η προστασία του salt της κρυπτογράφησης που αποτελεί το κλειδί για τη διαδικασία. Για να μπορέσει ένα σενάριο της PHP να χρησιμοποιήσει salt στα ερωτήματά του, η PHP πρέπει να έχει πρόσβαση σ' αυτό. Μια λύση είναι να αποθηκεύσετε το salt στο σενάριο που εγκαθιστά τη σύνδεση με τη βάση δεδομένων. Η αποθήκευση του salt, ωστόσο, σε μορφή απλού κειμένου στο διακομιστή, το αφήνει πιο εκτεθειμένο σε υποκλοπές. 94

Μια εναλλακτική λύση είναι να αποθηκεύσετε το salt σε έναν πίνακα της βάσης δεδομένων. Έτσι, όταν το ερώτημα θέλει να χρησιμοποιήσει αυτή την τιμή, θα μπορεί να την επιλέξει. Η διαδικασία μπορεί να απλοποιηθεί με τις οριζόμενες από τον χρήση μεταβλητές της MySQL. Για να δημιουργήσετε απλώς μια οριζόμενη από τον χρήστη μεταβλητή, χρησιμοποιήστε την παρακάτω εντολή SQL: 95

Για να ορίσετε μια μεταβλητή με βάση μια τιμή αποθηκευμένη σ' έναν πίνακα, χρησιμοποιείτε μια επέκταση αυτής της σύνταξης: Αφού την ορίσετε, μπορείτε να χρησιμοποιήσετε τη μεταβλητή @var σε άλλα ερωτήματα: 96

2.5.3 Χρησιμοποιήστε ένα Salt Αποθηκευμένο στη Βάση Δεδομένων 1. Ξεκινήστε τον πελάτη mysql και επιλέξτε τη βάση δεδομένων test. 2. Αδειάστε τον πίνακα encode. 97

3. Δημιουργήστε και συμπληρώστε με δεδομένα έναν πίνακα aes_salt. Στη μοναδική στήλη του πίνακα αυτού θα αποθηκευτεί το salt της κρυπτογράφησης. 4. Ανακτήστε την αποθηκευμένη τιμή του salt και χρησιμοποιήστε τη για να προσθέσετε μια νέα εγγραφή στον πίνακα encode. 98

5. Αποκρυπτογραφήστε τον αποθηκευμένο αριθμό κάρτας. 99