Πέρασε αρκετός καιρός απο το προηγούμενο post σχετικά με PhP, και έτσι είπα να επανέλθω με ακόμα ένα άρθρο για php security. Ως γνωστόν η ασφάλεια είναι ένα απο τα σημαντικότερα πράγματα που πρέπει να προσέξουμε στο web development αφού οι συνέπειες μιας πιο ανάλαφρης αντιμετώπισης του θέματος μπορεί να είναι τουλάχιστον καταστροφικές. Παρακάτω θα προσπαθήσω να αναλύσω μερικές παραμέτρους που δέν ανέπτυξα στο προηγούμενο άρθρο για το θέμα:
Register_Globals
Θα ξεκινήσουμε με κάτι απλό που έχει ειπωθεί αρκετές φορές – μια και που είναι αρκετά παλιά “τρύπα” – το register globals. Το register_globals είναι ένα directive στο php.ini το οποίο κάνει register ως μεταβλητές οτιδήποτε υπάρχει στο $_COOKIE, το $_SESSION, το $_POST και το $_GET. Με άλλα λόγια αν για παράδειγμα κάποιος καλέσει ένα url και προσθέσει στο τέλος “?a=1″, μέσα στην εφαρμογή θα υπάρχει η μεταβλητή $a που θα έχει τιμή 1.
Με μια πρώτη ματιά δέν φαίνεται να υπάρχει πρόβλημα, ωστόσο φανταστείτε τί μπορεί να γίνει στο παρακάτω παράδειγμα αν ο χρήστης έχει προσθέσει στο url το εξής: “?admin=1″
if ( isset( $_SESSION['admin']) && $_POST['security_code'] == '12345' ){
$admin = true;
}
eval
Η eval() είναι μια function που εξ’ορισμού θέλει πολύ προσοχή αφού η λάθος χρήση της μπορεί να επιτρέψει σε κάποιον να τρέξει οτιδήποτε στον server μας. Το σημαντικό είναι να μήν χρησιμοποιούμε ποτέ δεδομένα απο τον χρήστη($_POST, $_GET) μέσα στην eval() ή αν το κάνουμε αυτό τουλάχιστον να είμαστε σίγουροι πως ο χρήστης δέν μπορεί να “βγεί” απο την εντολή που θέλουμε (αυτό κυρίως γίνεται με την εισαγωγή ενός ελληνικού ερωτηματικού)
Remote file inclusion
Ακόμα ένα σημαντικό θέμα είναι το remote file inclusion. Στα περισσότερα default setup της php είναι ενεργοποιημένο, και αυτό που κάνει είναι να επιτρέπει να κάνουμε include scripts απο άλλους servers. Για το συγκεκριμένο vurnerability έχουν γραφτεί αρκετά exploits τα οποία μπορούν να δώσουν full access στον server. Για να σιγουρευτείτε οτι δέν έχετε πρόβλημα πρέπει αφενός να μήν χρησιμοποιείτε ποτέ στην include δεδομένα που σας δίνει ο χρήστης (αυτό είναι γενικά πρόβλημα, όχι μόνο για τα remote file inclusions) ενώ παράλληλα φροντίστε στο php.ini το directive allow_url_include να είναι Off.
Session fixation
Το session fixation είναι ένα σχετικά χαμηλού ρίσκου vurnerability, το οποίο ουσιαστικά επιτρέπει σε κάποιον “κακόβουλο” να πάρει πρόσβαση με τα στοιχεία κάποιου χρήστη της εφαρμογής μας. Για το συγκεκριμένο θέμα μπορούμε να κάνουμε δύο κινήσεις. Το πρώτο να έχουμε διαφορετικά path για τα session ανα domain (αλλάζοντας το session.save_path στο htaccess του κάθε site) και το δεύτερο είναι το να χρησιμοποιούμε συχνά μέσα στην εφαρμογή μας την εντολή session_regenerate_id(). Βέβαια η απόλυτη λύση – η οποία βοηθάει γενικότερα – είναι το να έχουμε custom session handler, ωστόσο αυτό είναι κάπως advanced θέμα.
Error reporting
Ένα απλό αλλα εξίσου σημαντικό θέμα είναι πως στον production server πρέπει να μήν εμφανίζονται τα λάθη της php γιατί εφόσον εμφανίζονται κάνουμε την ζωή του hacker πολύ πιο εύκολη
. Ο τρόπος να το λύσουμε αυτό είναι απλά να αλλάξουμε το directive display_errors σε Off. Φυσικά για να μπορούμε να παρακολουθούμε τα προβλήματα που έχει η εφαρμογή μας σε production περιβάλλον μπορούμε να χρησιμοποιήσουμε log files (directive: log_errors) ή ακόμα και να δημιουργήσουμε custom error handlers.
PhP Security scripts
Για το τέλος άφησα μερικά scripts που έχω ανακαλύψει και μπορούν να σας βοηθήσουν στο να ανακαλύπτετε security προβλήματα με τις εφαρμογές σας.
Ελπίζω να σας άρεσε η συνέχεια του άρθρου για την ασφάλεια σε php, αν πιστεύετε οτι μου διέφυγε κάτι αφήστε ένα σχόλιο
-
http://Autocompare.gr Paraskevas
-
http://blogged.gr/ paranic



