Ασφάλεια σε ένα site

Τεχνικές και μόνο Συζητήσεις για WEB hosting servers, Mail servers, DNS servers. Όχι αναζήτηση υπηρεσιών εδώ!

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

Απάντηση
ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από ioannisls » 03 Σεπ 2014 16:22

Θα ήθελα να ξεκινήσω τη δημιουργία ενός tutorial όσον αφορά την ασφάλεια μίας ιστοσελίδας, κάτι το οποίο φαντάζομαι θέλει και χρειάζεται ο κάθε ιδιοκτήτης ενός site. Δυστυχώς όμως δεν έχω καθόλου γνώσεις πάνω σε SSL και bots ή το οτιδήποτε άλλο μπορεί να βοηθήσει. Οπότε θα ήθελα τη συνδρομή των χρηστών, να κάνουμε μία εκτενή συζήτηση πάνω στο συγκεκριμένο θέμα και ύστερα να δημιουργήσω το tutorial.

Και ξεκινάω κάνοντας δύο ερωτήσεις για αρχή:
1ον) πιστοποιητικό SSL. Εγώ για το δικό μου site αγόρασα της COMODO που ήταν και το πιο φθηνό. και αρχίζω της υποερωτήσεις:

1-1) βρήκα από site παροχής υπηρεσιών και αντιγράφω
Τί είναι το πιστοποιητικό ασφαλείας (ssl certificate);
Πρόκειται ουσιαστικά για ένα σύστημα ασφάλειας των πληροφοριών (συνήθως σχετικών με πληρωμές) που μεταδίδονται από ένα site προς τον χρήστη-αγοραστή. Οι πληροφορίες μεταδίδονται κρυπτογραφημένες, ώστε να μην μπορούν κάποιοι τρίτοι να τις παρακολουθήσουν ή να τις υποκλέψουν.
Ανάλογα με το πόσο ισχυρό είναι αυτό το σύστημα ασφάλειας, ανεβαίνει και το κόστος ενός SSL πιστοποιητικού
Δηλαδή; ποιο αναλυτικά πέρα από μία συναλλαγή οικονομικής φύσεως, προστατεύει το κώδικα html, css, php, js να μην είναι ορατός στο χρήστη;

1-2) Παραθέτω ξανά ερωτοαπάντηση από το ίδιο site.
Πώς καταλαβαίνω ότι ένα site έχει SSL;
Εάν κάποιο site έχει πιστοποιητικό τότε ανάλογα θα έχει:
Ένα εικονίδιο κλειδαριάς στο δεξί μέρος της μπάρας διεύθυνσης (address bar) του browser
Αντί για το http μπροστά από την διεύθυνση, θα έχει https που σημαίνει ότι είναι secure το site, π.χ.https://www.pointer.gr
Σφραγίδα (λογότυπο) των εταιριών που παρέχουν το SSL, π.χ Geotrust, συνήθως στην κάτω δεξιά πλευρά ενός site
Πρασινίζει ολόκληρη η address bar
Ωραία, το έχω δει σε πολλά site. Αλλά στο δικό μου όχι, και ας έχω αγοράσει SSL certificate, τι δεν έκανα σωστά; φταίει που δεν έχω κάποια συναλλαγή οικονομικής φύσεως; αλλά έχω donate button της paypal. όπως επίσης το domain μου είναι της μορφής http και όχι https.

2ον) τα bots απ' ότι διαβάζω είναι κάποια αρχεία txt των οποίων ο κώδικας εμποδίζει κάποια spamαρίσματα. αναπτύξτε μου.

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από alou » 03 Σεπ 2014 17:53

Απλά θα σου πω ότι:

1. Το SSL δεν έχει καμμία (άμμεση τουλάχιστον) σχέση με την ασφάλεια του site, αλλά με την ασφάλεια των δεδομένων του που διακινούνται. Το SSL certificate έχει να κάνει μόνο με την εμπιστοσύνη του χρήστη.

2. Τα bots είναι προγράμματα που τρέχουν σε άλλο server και μπορεί να είναι προγραμματισμένα για ένα σωρό καλόβουλες ή κακόβουλες λειτουργίες.

Πέρα από κάποιες γενικότητες, η ασφάλεια ενός site δεν είναι κάποιο checklist, διαφοροποιείται σε κάθε περίπτωση και εξαρτάται από δεκάδες παράγοντες, κανέναν από τους οποίους δεν έχεις αναφέρει.

Αν έχεις αγοράσει SSL certificate, θα πρέπει αφενός να το εγκαταστήσεις στον server και αφ'ετέρου να δρομολογείς όλα (ή όσα πρέπει) τα request σε https:// ώστε να έχει νόημα ύπαρξης.

Η πράσινη μπάρα δεν υπάρχει σε όλα τα certificate, υπάρχουν διάφορα grades με διαφορετική πιστοποίηση και αντίστοιχο κόστος.

Άβαταρ μέλους
getpaidgr
Δημοσιεύσεις: 198
Εγγραφή: 21 Μάιος 2010 13:36
Τοποθεσία: Ναύπλιο
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από getpaidgr » 05 Σεπ 2014 12:41

Γιατί πάντως να δημιουργήσεις ένα tutorial για ssl από τη στιγμή που δεν το κατέχεις; Θα μου πεις ειλικρινώς το παραδέχεσαι. Εκτός αν η θεματολογία του site ή youtube channel σου είναι τα tutorial.

Διαφορετικά νομίζω πως μια μικρή επαφή είναι απαραίτητο να την έχεις πριν επιλέξεις να διδάξεις τους άλλους.
Getpaid.gr - Η ελληνική κοινότητα για την οικονομική αξιοποίηση του διαδικτύου
Investorblog - Χρηματιστηριακό blog
Silver-art.gr - Eshop με ασημένια αντικείμενα και κοσμήματα

ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από ioannisls » 08 Σεπ 2014 10:37

Απεναντίας δεν μπαίνω στη διαδικασία να κάνω κάποιο tutorial εκτός και αν το χρειάζομαι εγώ. Απεναντίας ότι tutorial και να έχω κάνει ποτέ δεν το έχω ανεβάσει σε site γενικά, γιατί αφορούσε μικρή μερίδα ανθρώπων. Από εκεί και πέρα ... ναι δεν το κατέχω, αλλά έχω όρεξη και μαθαίνω ... και για αυτό ζητάω τη συμμετοχή και των άλλων χρηστών. Εγώ μαθαίνω ... γράφω και αναλύω αυτά που μαθαίνω, με διορθώνουν οι χρήστες ή προσθέτουν πράγματα. Και από εκεί και πέρα το tutorial που θέλω να φτιάξω και έχω όρεξη (αν και όχι πολύ χρόνο) είναι για το freestuff και μόνο και αποκλειστικά. κάτι σας αυτό http://www.freestuff.gr/forums/viewtopi ... ap&t=57993

Τεσπα,
http://luckyweek.eu/
Στατιστικά για το στοιχηματικό ποδόσφαιρο και τα τυχερά παιχνίδια

Άβαταρ μέλους
getpaidgr
Δημοσιεύσεις: 198
Εγγραφή: 21 Μάιος 2010 13:36
Τοποθεσία: Ναύπλιο
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από getpaidgr » 08 Σεπ 2014 11:03

οκ, δεκτό! Καλό κουράγιο και συνέχεια :)

Θεωρούσα πως είναι για site... Και η συμβουλή - απορία ήταν στρατηγική....

Βεβαίως μαθαίνουμε πολλά και από αυτούς που δεν ξέρουν, αλλά ψάχνουν με υπευθυνότητα και συγκεντρώνουν - αναμεταδίδούν...

Συγχαρητηρια και καλή συνέχεια σε ό,τι και αν κάνεις.
Getpaid.gr - Η ελληνική κοινότητα για την οικονομική αξιοποίηση του διαδικτύου
Investorblog - Χρηματιστηριακό blog
Silver-art.gr - Eshop με ασημένια αντικείμενα και κοσμήματα

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από korgr » 08 Σεπ 2014 11:13

Όταν λες ασφάλεια, εννοείς μόνο μετάδοση δεδομένων με SSL κλπ;
Γιατί ασφάλεια είναι και η προστασία από hackers βλέπε XSS Attacks, SQL Injections κλπ

ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από ioannisls » 09 Σεπ 2014 00:56

Εννοώ ότι μπορεί να λέγεται ασφάλεια ... αν και όπως το λες και αν ενδιαφέρεσαι θα ήθελα να ξεκινήσω το tutoral με μία ερώτηση για να δημιουργήσω κατηγορίες ασφάλειας. π.χ. 1η) Ασφάλεια μετάδοσης δεδομένων (SSL) 2η) Ασφάλεια βάσης δεδομένων (SQL Injections) 3η) XSS Attacks (Βασικά με ένα search στη google αυτά βρήκα να αναφέρονται και γενικά)
http://luckyweek.eu/
Στατιστικά για το στοιχηματικό ποδόσφαιρο και τα τυχερά παιχνίδια

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27617
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από cordis » 09 Σεπ 2014 01:31

Βάλε και το brute force attacks
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από ioannisls » 09 Σεπ 2014 10:51

ΑΣΦΑΛΕΙΑ ΕΝΟΣ WEBSITE

Παρακάτω θα αναλύσουμε διάφορα θέματα, τα οποία αφορούν την ασφάλεια ενός website ενώ θα τα χωρίσουμε σε 4 κατηγορίες:
1ον) Ασφάλεια μετάδοσης δεδομένων (πιστοποιητικά ασφαλείας SSL)
2ον) Ασφάλεια βάσης δεδομένων (SQL Injections)
3ον) XSS Attacks
4ον) Brute force Attacks

1ον) Ασφάλεια μετάδοσης δεδομένων (πιστοποιητικά ασφαλείας SSL)

Το πρωτόκολλο SSL (Secure Sockets Layer) αναπτύχθηκε από την εταιρεία Netscape και σχεδιάστηκε για να παρέχει ασφάλεια κατά την μετάδοση ευαίσθητων δεδομένων στο διαδίκτυο. Η έκδοση 3.0 του πρωτοκόλλου κυκλοφόρησε από την Netscape το 1996 και αποτέλεσε την βάση για την μετέπειτα ανάπτυξη του πρωτοκόλλου TLS (Transport Layer Security), το οποίο πλέον τείνει να αντικαταστήσει το SSL. Τα δύο αυτά πρωτόκολλα χρησιμοποιούνται ευρέως για ηλεκτρονικές αγορές και χρηματικές συναλλαγές μέσω του διαδικτύου.

Το SSL χρησιμοποιεί μεθόδους κρυπτογράφησης των δεδομένων που ανταλλάσσονται μεταξύ δύο συσκευών (συνηθέστερα Ηλεκτρονικών Υπολογιστών) εγκαθιδρύοντας μία ασφαλή σύνδεση μεταξύ τους μέσω του διαδικτύου. Το πρωτόκολλο αυτό χρησιμοποιεί το TCP/IP για τη μεταφορά των δεδομένων και είναι ανεξάρτητο από την εφαρμογή που χρησιμοποιεί ο τελικός χρήστης. Για τον λόγο αυτό μπορεί να παρέχει υπηρεσίες ασφαλούς μετάδοσης πληροφοριών σε πρωτόκολλα ανώτερου επιπέδου όπως για παράδειγμα το HTTP, το FTP, το telnet κοκ.

Γενικά
Η μετάδοση πληροφοριών μέσω του διαδικτύου γίνεται ως επί το πλείστον χρησιμοποιώντας τα πρωτόκολλα TCP/IP (Transfer Control Protocol / Internet Protocol). Το SSL λειτουργεί πριν το TCP/IP και μετά τις εφαρμογές υψηλού επιπέδου, όπως είναι για παράδειγμα το HTTP (προβολή ιστοσελίδων), το FTP (μεταφορά αρχείων) και το IMAP (email). Άρα λοιπόν αυτό που ουσιαστικά κάνει το SSL είναι να παίρνει τις πληροφορίες από τις εφαρμογές υψηλότερων επιπέδων, να τις κρυπτογραφεί και στην συνέχεια να τις μεταδίδει στο Internet προς τον Η/Υ που βρίσκεται στην απέναντι πλευρά και τις ζήτησε.

Εικόνα

Το SSL προσφέρει συνοπτικά τις ακόλουθες υπηρεσίες:
- Πιστοποίηση του server από τον client.
- Πιστοποίηση του client από τον server.
- Εγκαθίδρυση ασφαλούς κρυπτογραφημένου διαύλου επικοινωνίας μεταξύ των δύο μερών
Οι κρυπτογραφικοί αλγόριθμοι που υποστηρίζονται από το πρωτόκολλο είναι οι εξής: DES - Data Encryption Standard, DSA - Digital Signature Algorithm, KEA - Key Exchange Algorithm, MD5 - Message Digest, RC2/RC4, RSA, SHA-1 - Secure Hash Algorithm, SKIPJACK, Triple-DES.

Τρόπος λειτουργίας
Το πρωτόκολλο SSL χρησιμοποιεί έναν συνδυασμό της κρυπτογράφησης δημοσίου και συμμετρικού κλειδιού. Η κρυπτογράφηση συμμετρικού κλειδιού είναι πολύ πιο γρήγορη και αποδοτική σε σχέση με την κρυπτογράφηση δημοσίου κλειδιού, παρ' όλα αυτά όμως η δεύτερη προσφέρει καλύτερες τεχνικές πιστοποίησης. Κάθε σύνδεση SSL ξεκινά πάντα με την ανταλλαγή μηνυμάτων από τον server και τον client έως ότου επιτευχθεί η ασφαλής σύνδεση, πράγμα που ονομάζεται χειραψία (handshake). Η χειραψία επιτρέπει στον server να αποδείξει την ταυτότητά του στον client χρησιμοποιώντας τεχνικές κρυπτογράφησης δημοσίου κλειδιού και στην συνέχεια επιτρέπει στον client και τον server να συνεργαστούν για την δημιουργία ενός συμμετρικού κλειδιού που θα χρησιμοποιηθεί στην γρήγορη κρυπτογράφηση και αποκρυπτογράφηση των δεδομένων που ανταλλάσσονται μεταξύ τους. Προαιρετικά η χειραψία επιτρέπει επίσης στον client να αποδείξει την ταυτότητά του στον server. Αναλυτικότερα, η διαδικασία χειραψίας έχει ως εξής:

- Αρχικά ο client στέλνει στον server την έκδοση του SSL που χρησιμοποιεί, τον επιθυμητό αλγόριθμο κρυπτογράφησης, μερικά δεδομένα που έχουν παραχθεί τυχαία και οποιαδήποτε άλλη πληροφορία χρειάζεται ο server για να ξεκινήσει μία σύνδεση SSL.
- Ο server απαντά στέλνοντας παρόμοιες πληροφορίες με προηγουμένως συμπεριλαμβανομένου όμως και του ψηφιακού πιστοποιητικού του, το οποίο τον πιστοποιεί στον client. Προαιρετικά μπορεί να ζητήσει και το ψηφιακό πιστοποιητικό του client.
- Ο client λαμβάνει το ψηφιακό πιστοποιητικό του server και το χρησιμοποιεί για να τον πιστοποιήσει. Εάν η πιστοποίηση αυτή δεν καταστεί δυνατή, τότε ο χρήστης ενημερώνεται με ένα μήνυμα σφάλματος και η σύνδεση SSL ακυρώνεται. Εάν η πιστοποίηση του server γίνει χωρίς προβλήματα, τότε η διαδικασία της χειραψίας συνεχίζεται στο επόμενο βήμα.
- Ο client συνεργάζεται με τον server και αποφασίζουν τον αλγόριθμο κρυπτογράφησης που θα χρησιμοποιηθεί στην ασφαλή σύνδεση SSL. Επίσης ο client δημιουργεί το συμμετρικό κλειδί που θα χρησιμοποιηθεί στον αλγόριθμο κρυπτογράφησης και το στέλνει στον server κρυπτογραφημένο, χρησιμοποιώντας την τεχνική κρυπτογράφησης δημοσίου κλειδιού. Δηλαδή χρησιμοποιεί το δημόσιο κλειδί του server που αναγράφεται πάνω στο ψηφιακό του πιστοποιητικό για να κρυπτογραφήσει το συμμετρικό κλειδί και να του το στείλει. Στην συνέχεια ο server χρησιμοποιώντας το ιδιωτικό του κλειδί μπορεί να αποκρυπτογραφήσει το μήνυμα και να αποκτήσει το συμμετρικό κλειδί που θα χρησιμοποιηθεί για την σύνδεση.
- Ο client στέλνει ένα μήνυμα στον server ενημερώνοντάς τον ότι είναι έτοιμος να ξεκινήσει την κρυπτογραφημένη σύνδεση.
- Ο server στέλνει ένα μήνυμα στον client ενημερώνοντάς τον ότι και αυτός είναι έτοιμος να ξεκινήσει την κρυπτογραφημένη σύνδεση.
- Από εδώ και πέρα η χειραψία έχει ολοκληρωθεί και τα μηνύματα που ανταλλάσσουν τα δύο μηχανήματα (client - server) είναι κρυπτογραφημένα.
Η διαδικασία της χειραψίας φαίνεται πιο παραστατικά στο σχήμα που ακολουθεί.
Εικόνα

Επιβάρυνση από το SSL
Η χρήση του πρωτοκόλλου SSL αυξάνει τα διακινούμενα πακέτα μεταξύ των δύο μηχανών και καθυστερεί την μετάδοση των πληροφοριών επειδή χρησιμοποιεί μεθόδους κρυπτογράφησης και αποκρυπτογράφησης. Ειδικότερα οι διάφορες καθυστερήσεις εντοπίζονται στα εξής σημεία:
- Στην αρχική διαδικασία χειραψίας όπου κανονίζονται οι λεπτομέρειες της σύνδεσης και ανταλλάσσονται τα κλειδιά της συνόδου.
- Στην διαδικασία κρυπτογράφησης και αποκρυπτογράφησης που γίνεται στους δύο υπολογιστές με αποτέλεσμα να δαπανώνται υπολογιστικοί πόροι και χρόνος.
- Στην καθυστέρηση μετάδοσης των κρυπτογραφημένων δεδομένων αφού αυτά αποτελούνται από περισσότερα bytes σε σχέση με την αρχική μη κρυπτογραφημένη πληροφορία.
Λόγω αυτών των επιβαρύνσεων που εισάγει το πρωτόκολλο SSL, χρησιμοποιείται πλέον μονάχα σε περιπτώσεις όπου πραγματικά χρειάζεται ασφαλής σύνδεση (πχ μετάδοση κωδικών χρήστη ή αριθμών πιστωτικών καρτών μέσω του διαδικτύου) και όχι σε περιπτώσεις απλής επίσκεψης σε μία ιστοσελίδα.

Προχωρημένα πιστοποιητικά SSL
Στα πιο ακριβά και ποιο "εξελιγμένα" πακέτα πιστοποιητικών ασφαλείας στο browser μας θα έχουμε μία εικόνα σαν τη παρακάτω

Εικόνα

Συνηθισμένα πιστοποιητικά SSL
Τα ποιο φθηνά και συνηθισμένα (ως προς αγορά) πιστοποιητικά ασφαλείας, έχουν την παρακάτω εικόνα στον browser

Εικόνα

Προβολή πιστοποιητικού ασφαλείας
Για να δείτε τις λεπτομέρειες ενός πιστοποιητικού ασφαλείας SSL, πηγαίνετε σε ένα "ασφαλές" site, κάντε κλικ στο λουκέτο και επιλέξτε "Προβολή Πιστοποιητικού".
Θα έχουμε μία εικόνα όπως η παρακάτω (από browser σε browser υπάρχουν κάποιες διαφορές)

Εικόνα


Βιβλιογραφία:
el.wikipedia.org/wiki/SSL
https://www.globalsign.com/ssl-informat ... icate.html
Τελευταία επεξεργασία από το μέλος ioannisls την 09 Σεπ 2014 12:36, έχει επεξεργασθεί 1 φορά συνολικά.

ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από ioannisls » 09 Σεπ 2014 10:55

για να τα πάρουμε ένα - ένα αν και επί το πλείστον μέχρι εδώ είναι copy - paste. Να προσθέσουμε κάποια στοιχεία; π.χ. για να μου λυθεί και εμένα η απορία. στο site μου έχω ενεργοποιημένο ssl αλλά δεν μου έχει τπτ από τα παραπάνω. σε παραπάνω μήνυμα ο alou μου λέει:
Αν έχεις αγοράσει SSL certificate, θα πρέπει αφενός να το εγκαταστήσεις στον server και αφ'ετέρου να δρομολογείς όλα (ή όσα πρέπει) τα request σε https:// ώστε να έχει νόημα ύπαρξης.
τι εννοεί με αυτό ακριβώς;

ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από ioannisls » 09 Σεπ 2014 12:36

2ον) Ασφάλεια βάσης δεδομένων (SQL Injections)
Η ασφάλεια της βάσης δεδομένων μπορώ να θεωρήσω ότι είναι μία από τις σημαντικότερες προεταιρεότητες ασφάλειας που πρέπει να παρέχουμε στο site μας. Διαβάζοντας διάφορα άρθρα θεωρώ ότι καλύτερος τρόπος για να μάθουμε να προστατευτούμε από τέτοιου είδους επιθέσεις είναι να μάθουμε πως λειτουργεί κατ' αρχάς.

Γενικά
Ο όρος SQL, προήλθε απ’ τα αρχικά Structured Query Language τα οποία στην ελληνική ορολογία θα μπορούσαν να μεταφραστούν ως δομημένη γλώσσα ερωτημάτων (ή αναζήτησης). Σε γενικές γραμμές η SQL μας δίνει τη δυνατότητα να έχουμε πρόσβαση σε μια βάση δεδομένων ώστε :
- Να εκτελούμε ερωτήματα
- Να αναζητούμε δεδομένα
- Να εισάγουμε νέες εγγραφές, να διαγράφουμε παλαιότερες ή να ενημερώνουμε τις υπάρχουσες

Με βάση τη λίστα που είχε δημοσιεύσει το OWASP (Open Web Application Security Project) για το 2010, σχετικά με τα 10 πιο επικίνδυνα κενά ασφαλείας σε web εφαρμογές [1] οι επιθέσεις τύπου "injection" βρίσκονται στη θέση με το νούμερο 1. Μέσα στην οικογένεια αυτή ανήκει και η γνωστή σε πολλούς επίθεση SQL Injection.

Τι είναι SQL injection: Η τεχνική της επίθεσης SQL Injection τα τελευταία χρόνια χρησιμοποιείται όλο και περισσότερο από αρκετούς επίδοξους crackers. Μέσα απ’ αυτή την επίθεση δίνεται η δυνατότητα σε κάποιον κακόβουλο επιτιθέμενο να "τρέξει" εντολές SQL ενάντια σε ένα server – στόχο και στη συνέχεια να αποσπάσει αρκετά ευαίσθητες πληροφορίες (όπως για παράδειγμα κωδικοί πρόσβασης, ονόματα χρηστών, emails, αριθμοί πιστωτικών καρτών κ.α) μέσα από την βάση δεδομένων στην οποία και επιτίθεται.

Παράδειγμα επίθεσης:
Ας δούμε το εξής (ευπαθές) block κώδικα PHP για login σε μια εφαρμογή, όπου χρησιμοποιούνται οι τιμές που δίνουν οι χρήστες σε μια web φόρμα (username και password) για την είσοδο τους στο σύστημα:

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

<?php
$username = $_POST&#91;'username'&#93;;
$password = $_POST&#91;'password'&#93;;
$qry = "SELECT userid FROM users" .
       " WHERE username='$username' AND password='$password'";
$result = mysql_query&#40;$qry&#41;;
if &#40;mysql_numrows&#40;$result&#41; > 0&#41; &#123;
    //log in user...
&#125;
?>
Οι τιμές username και password δίνονται με χρήση μιας τυπικής web login φόρμας (με τη μέθοδο HTTP POST). Αν ο κακόβουλος χρήστης στο password πεδίο δώσει την τιμή:

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

bar' OR 1=1 OR username='
τότε από τον παραπάνω κώδικα PHP έχουμε την εκτέλεση της επερώτησης:

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

SELECT userid FROM users WHERE 
username='foo' AND password='bar' OR 1=1 OR username='';
η οποία όμως ισχύει για κάθε εγγραφή του πίνακα (αφού πάντοτε 1=1) και έτσι το $result θα έχει πάντοτε εγγραφές, ανεξάρτητα από το τι έχει εισαχθεί στα πεδία username και password. Στη συνέχεια η μεταβλητή $results ελέγχεται για το αν περιέχει εγγραφές (που με τον τρόπο αυτόν θα περιέχει), τότε κάνει login τον χρήστη.

Έτσι ενδέχεται η πρόσβαση στην εφαρμογή (login) από άτομα που δεν είναι εξουσιοδοτημένα για κάτι τέτοιο.

Σε αυτό το παράδειγμα και στο προηγούμενο, είδαμε πως ένας κακόβουλος χρήστης μπορεί να προσπαθήσει να αλλάξει μια SQL επερώτηση με τρόπο που δεν έχει προβλεφθεί από τον προγραμματιστή. Φυσικά η επερώτηση θα μπορούσε να αλλαχθεί με διαφορετικούς τρόπους από ότι στα συγκεκριμένα παραδείγματα (τυπική περίπτωση είναι για παράδειγμα η προσπάθεια χρήσης κλάδων UNION της SQL).

Αυτόματα εργαλεία
Υπάρχουν δωρεάν προγράμματα τα οποία επιτρέπουν στον οποιοδήποτε να "χακάρει" ένα site. Αυτά τα προγράμματα είναι προσβάσιμα σε όλους καθώς είναι δωρεάν.
Το μόνο που χρειάζεται να κάνεις είναι να "στοχεύσεις" ενα url ενός site, να τσεκάρεις μερικά κουτιά και άμεσα να έχεις σημαντικά στοιχεία όπως κωδικούς και νούμερα πιστωτικών καρτών.

Πως να προστατεύσετε το site σας από τέτοιες επιθέσεις
- Αποφύγετε τη χρήση δυναμικών βάσεων δεδομένων, εκτός και αν είναι αναγκαίο.
- Αναβαθμίστε το σύστημα σας με το που γίνει διαθέσιμο
- Τσεκάρετε με δωρεάν προγράμματα το κώδικα σας (Mozilla Add-on SQL Inject Me)

- Χρησιμοποιείστε mysql_real_escape
Αυτό το PHP function εξάγει ειδικούς χαρακτήρες για χρήση στα SQL queries και σε προστατεύει από επιθέσεις. έτσι για παράδειγμα το query μας θα μοιάζει κάπως έτσι

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

<?php
$q = "SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string&#40; $_GET&#91;'username'&#93; &#41;. " ' AND `password`= ' " .mysql_real_escape_string&#40; $_GET&#91;'password'&#93; &#41;. " ' "; 
?>




Βιβλιογραφία:
http://openspot.antithesis.gr/archives/33
digilib.lib.unipi.gr/dspace/bitstream/unipi/5387/1/Siampos.pdf
digilib.lib.unipi.gr/dspace/bitstream/unipi/5303/1/Strigkos.pdf
ghostinthelab.wordpress.com/2011/08/24/sql-injection-η-διασημότερη-επίθεση-απέναντι-σε-web/
blog.pluralsight.com/sql-injection-attacks
php.wonderhowto.com/how-to/protect-your-php-website-from-sql-injection-hacks-0133507/

ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από ioannisls » 09 Σεπ 2014 13:02

όσον αφορά το δεύτερο, έχω και άλλες απορίες, αλλά βασικότερη είναι αν μπορεί κάποιος να κάνει εγκατάσταση το SQL Inject Me και να με βοηθήσει να κατανοήσω τα αποτελέσματα
http://luckyweek.eu/
Στατιστικά για το στοιχηματικό ποδόσφαιρο και τα τυχερά παιχνίδια

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

Ασφάλεια σε ένα site

Δημοσίευση από gvre » 09 Σεπ 2014 15:50

ioannisls έγραψε: - Χρησιμοποιείστε mysql_real_escape
Σταματήστε να χρησιμοποιείτε mysql_* functions :)

ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Ασφάλεια σε ένα site

Δημοσίευση από ioannisls » 09 Σεπ 2014 15:54

θα μπορούσες να αναλύσεις αυτό που θες να πεις φίλε "gvre"?
http://luckyweek.eu/
Στατιστικά για το στοιχηματικό ποδόσφαιρο και τα τυχερά παιχνίδια

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

Ασφάλεια σε ένα site

Δημοσίευση από gvre » 09 Σεπ 2014 15:57

Δες εδώ (μεγάλο κουτί στην κορυφή).

http://php.net/manual/en/function.mysql-connect.php

Απάντηση

Επιστροφή στο “Apache, IIS, DNS Servers”

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

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