PHP Ασφάλεια Συνεδρία

ψήφοι
125

Ποιες είναι μερικές οδηγίες για τη διατήρηση υπεύθυνο ασφαλείας συνεδρία με την PHP; Υπάρχουν πληροφορίες σε όλο το web και είναι καιρός όλα προσγειώθηκε σε ένα μέρος!

Δημοσιεύθηκε 02/08/2008 στις 03:41
πηγή χρήστη
Σε άλλες γλώσσες...                            


13 απαντήσεις

ψήφοι
88

Υπάρχουν μερικά πράγματα που πρέπει να κάνετε για να διατηρήσετε τη συνεδρία σας ασφαλή:

  1. Χρήση SSL όταν έλεγχο ταυτότητας των χρηστών ή την εκτέλεση ευαίσθητες λειτουργίες.
  2. Αναγέννηση του id συνεδρία κάθε φορά που αλλάζει το επίπεδο ασφαλείας (όπως τη σύνδεση). Μπορείτε να αναγεννηθεί ακόμη και το id σύνοδο κάθε αιτήματος, αν το επιθυμείτε.
  3. Έχετε συνεδρίες φορά έξω
  4. Μην χρησιμοποιείτε εγγραφείτε globals
  5. τα στοιχεία ταυτότητας Κατάστημα στο διακομιστή. Δηλαδή, δεν στέλνουν στοιχεία, όπως το όνομα χρήστη στο cookie.
  6. Ελέγξτε το $_SERVER['HTTP_USER_AGENT']. Αυτό προσθέτει ένα μικρό εμπόδιο για την εισβολή σε περίοδο. Μπορείτε επίσης να ελέγξετε τη διεύθυνση IP. Αλλά αυτό προκαλεί προβλήματα για τους χρήστες που έχουν αλλαγή της διεύθυνσης IP λόγω εξισορρόπηση φορτίου σε πολλές συνδέσεις στο διαδίκτυο κλπ (πράγμα που συμβαίνει στο περιβάλλον μας εδώ).
  7. Ασφαλίστε την πρόσβαση στις συνεδρίες σχετικά με το σύστημα αρχείων ή να χρησιμοποιήσετε το χειρισμό προσαρμοσμένο συνεδρία
  8. Για τις ευαίσθητες επιχειρήσεις θεωρούν απαιτούν συνδεδεμένους χρήστες να δώσει και πάλι τα στοιχεία authenication τους
Απαντήθηκε 11/08/2008 στις 03:38
πηγή χρήστη

ψήφοι
15

Μια κατευθυντήρια γραμμή είναι να καλέσετε session_regenerate_id κάθε φορά που αλλάζει το επίπεδο ασφάλειας μιας συνεδρίας. Αυτό βοηθά στην πρόληψη της πειρατείας συνόδου.

Απαντήθηκε 02/08/2008 στις 03:43
πηγή χρήστη

ψήφοι
11

Μου δύο (ή περισσότερα) cents:

  • Μην εμπιστεύεσαι κανέναν
  • Φίλτρο εισόδου, εξόδου διαφυγής (μπισκότο, τα δεδομένα συνεδρία εισάγονται σας πάρα πολύ)
  • Αποφύγετε XSS (κρατήστε HTML σας καλά σχηματισμένα, ρίξτε μια ματιά στο PHPTAL ή HTMLPurifier )
  • Άμυνα σε βάθος
  • Μην εκθέτετε τα δεδομένα

Υπάρχει ένα μικρό αλλά καλό βιβλίο για το θέμα αυτό: Βασικές PHP Ασφαλείας από τον Chris Shiflett .

Βασικές PHP Ασφάλεια http://shiflett.org/images/essential-php-security-small.png

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

Μπορείτε να χρησιμοποιήσετε την τεχνική που αναφέρονται παραπάνω (IP & UserAgent), που περιγράφονται εδώ: Πώς να αποφύγετε την κλοπή ταυτότητας

Απαντήθηκε 06/04/2010 στις 17:05
πηγή χρήστη

ψήφοι
11

Νομίζω ότι ένα από τα σημαντικότερα προβλήματα (η οποία απευθύνεται σε PHP 6) είναι register_globals. Αυτή τη στιγμή μία από τις πρότυπες μεθόδους που χρησιμοποιούνται για να αποφύγετε register_globalsείναι η χρήση των $_REQUEST, $_GETή $_POSTσυστοιχίες.

Ο «σωστός» τρόπος για να το κάνουμε (από 5,2, αν και είναι ένα μικρό αμαξάκι εκεί, αλλά σταθερά από 6, η οποία έρχεται σύντομα) είναι μέσω των φίλτρων .

Έτσι, αντί να:

$username = $_POST["username"];

θα κάνετε:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

ή ακόμα και απλά:

$username = filter_input(INPUT_POST, 'username');
Απαντήθηκε 02/08/2008 στις 03:55
πηγή χρήστη

ψήφοι
9

Αυτό το έγγραφο σταθεροποίηση συνεδρία έχει πολύ καλή δείκτες, όπου επίθεση μπορεί να έρθει. Δείτε επίσης τη σελίδα καθήλωση συνόδου στην Wikipedia .

Απαντήθηκε 05/03/2009 στις 23:33
πηγή χρήστη

ψήφοι
5

Χρησιμοποιώντας διεύθυνση IP δεν είναι πραγματικά η καλύτερη ιδέα από την εμπειρία μου. Για παράδειγμα; το γραφείο μου έχει δύο διευθύνσεις IP που συνηθίσουν ανάλογα με το φορτίο και θα τρέχει συνεχώς σε θέματα χρησιμοποιώντας διευθύνσεις IP.

Αντ 'αυτού, έχω επιλέξει για την αποθήκευση των συνόδων σε ξεχωριστή βάση δεδομένων για τους τομείς στους διακομιστές μου. Με αυτό τον τρόπο κανείς στο σύστημα αρχείων έχει πρόσβαση σε αυτό πληροφορίες συνεδρία. Αυτό ήταν πολύ χρήσιμο με το phpBB πριν από 3,0 (που έχουμε από το σταθερό αυτό), αλλά εξακολουθεί να είναι μια καλή ιδέα νομίζω.

Απαντήθηκε 06/08/2008 στις 21:44
πηγή χρήστη

ψήφοι
3

php.ini

session.cookie_httponly = 1
change session name from default PHPSESSID

eq Apache Προσθήκη κεφαλίδας:

X-XSS-Protection    1
Απαντήθηκε 13/10/2011 στις 03:40
πηγή χρήστη

ψήφοι
3

Έθεσα συνεδρίες μου σαν αυτό-

σχετικά με την σελίδα σύνδεσης:

$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR']);

(Φράση που ορίζονται σε μια σελίδα ρυθμίσεων)

τότε στην επικεφαλίδα που είναι σε όλο το υπόλοιπο του site:

session_start();
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR'])) {       
    session_destroy();
    header('Location: http://website login page/');
    exit();     
}
Απαντήθηκε 19/07/2011 στις 22:40
πηγή χρήστη

ψήφοι
3

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

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

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

Απαντήθηκε 03/08/2008 στις 14:14
πηγή χρήστη

ψήφοι
3

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

Εδώ είναι ένα καλό φροντιστήριο για setTimer () και clearTimer ().

Απαντήθηκε 02/08/2008 στις 04:16
πηγή χρήστη

ψήφοι
2

Πρέπει να είστε βέβαιοι ότι τα δεδομένα συνόδου είναι ασφαλή. Με την εξέταση php.ini σας ή με τη χρήση phpinfo () μπορείτε να βρείτε τις ρυθμίσεις συνεδρία. _session.save_path_ σας λέει όπου αποθηκεύονται.

Ελέγξτε την άδεια του φακέλου και των γονέων του. Δεν θα πρέπει να είναι δημόσια (/ tmp) ή να είναι προσβάσιμα από άλλες ιστοσελίδες στο κοινό κεντρικό υπολογιστή σας.

Υποθέτοντας ότι θέλετε ακόμα να χρησιμοποιήσετε το php συνεδρία, μπορείτε να ορίσετε php να χρησιμοποιήσετε ένα άλλο φάκελο με την αλλαγή _session.save_path_ ή να αποθηκεύσετε τα δεδομένα στη βάση δεδομένων αλλάζοντας _session.save_handler_.

Ίσως να είναι σε θέση να καθορίσει _session.save_path_ στο php.ini σας (ορισμένοι πάροχοι θα επιτρέπει) ή για apache + mod_php, σε ένα αρχείο .htaccess στην ιστοσελίδα ριζικό φάκελο σας: php_value session.save_path "/home/example.com/html/session". Μπορείτε επίσης να ορίσετε κατά το χρόνο εκτέλεσης με _session_save_path () _.

Ελέγξτε φροντιστήριο Chris Shiflett του ή Zend_Session_SaveHandler_DbTable να ρυθμίσετε και εναλλακτικές χειριστή συνεδρία.

Απαντήθηκε 18/08/2008 στις 18:12
πηγή χρήστη

ψήφοι
2

Εάν χρησιμοποιείτε session_set_save_handler () , μπορείτε να ορίσετε το δικό σας πρόγραμμα χειρισμού συνεδρία. Για παράδειγμα, μπορείτε να αποθηκεύσετε συνεδρίες σας στη βάση δεδομένων. Ανατρέξτε στις php.net σχόλια για παραδείγματα ενός χειριστή συνεδρία της βάσης δεδομένων.

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

Απαντήθηκε 09/08/2008 στις 04:28
πηγή χρήστη

ψήφοι
2

Θα ελέγχει τόσο IP και παράγοντα χρήστη για να δούμε αν αλλάξουν

if ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']
    || $_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'])
{
    //Something fishy is going on here?
}
Απαντήθηκε 04/08/2008 στις 22:38
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more