Easy Hack: Πώς να αποκτήσετε δεδομένα μέσω της συμπερίληψης σεναρίων μεταξύ ιστότοπων. Αξιοποίηση στο μέγιστο των τρωτών σημείων XSSs προειδοποίηση nscript

Τι είναι η ευπάθεια XSS; Πρέπει να την φοβάμαι;

Το Cross Site Scripting (XSS για συντομία) είναι μια ευρεία ευπάθεια που επηρεάζει πολλές εφαρμογές ιστού. Επιτρέπει σε έναν εισβολέα να εισάγει κακόβουλο κώδικα σε έναν ιστότοπο με τέτοιο τρόπο ώστε το πρόγραμμα περιήγησης του χρήστη που επισκέπτεται τον ιστότοπο να εκτελέσει τον κώδικα.

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

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

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

XSS: Ένα ευάλωτο στην ένεση

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

Σχήμα 1. Φόρμα εισαγωγής δεδομένων

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

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

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

Σχήμα 2. Ένα οπτικό διάγραμμα σεναρίων μεταξύ τόπων

Το απλούστερο παράδειγμα είναι ένα στοιχειώδες σενάριο που εμφανίζει ένα παράθυρο ειδοποιήσεων. Μοιάζει με αυτό:

Πίνακας 1. Σενάριο που καλεί το αναδυόμενο παράθυρο

Αυτό το σενάριο καλεί ένα παράθυρο με τις λέξεις "ΑΥΤΟ ΕΙΝΑΙ ΕΥΘΥΝΗΤΗΤΑ XSS !!!". Το πρόγραμμα περιήγησης του χρήστη αντιλαμβάνεται και εκτελεί αυτό το σενάριο ως μέρος του νόμιμου κώδικα του ιστότοπου.

Τύποι ευπάθειας XSS

Δεν είναι όλες οι ευπάθειες XSS ίδιες, υπάρχουν πολλοί τύποι. Εδώ είναι οι τύποι και πώς αλληλεπιδρούν:

Σχήμα 3. Τύποι ευπάθειας XSS


Ευπάθειες που προκαλούνται από τον κώδικα του διακομιστή (Java, PHP, .NET κ.λπ.):

Παραδοσιακές επιθέσεις XSS:

  1. Αντανακλάται (αδρανές). Μια αντανακλαστική επίθεση XSS ενεργοποιείται όταν ένας χρήστης κάνει κλικ σε έναν ειδικά προετοιμασμένο σύνδεσμο. Αυτές οι ευπάθειες εμφανίζονται όταν τα δεδομένα που παρέχονται από ένα πρόγραμμα-πελάτη ιστού, πιο συχνά σε παραμέτρους αιτήματος HTTP ή σε μορφή HTML, εκτελούνται απευθείας από σενάρια διακομιστή για να αναλύσουν και να εμφανίσουν μια σελίδα αποτελεσμάτων για αυτόν τον πελάτη, χωρίς κατάλληλη επεξεργασία.
  2. Αποθηκευμένο (επίμονο). Το αποθηκευμένο XSS είναι δυνατό όταν ένας εισβολέας είναι σε θέση να εισάγει κακόβουλο κώδικα σε έναν διακομιστή που εκτελείται στο πρόγραμμα περιήγησης κάθε φορά που έχει πρόσβαση στην αρχική σελίδα. Ένα κλασικό παράδειγμα αυτής της ευπάθειας είναι τα φόρουμ όπου επιτρέπονται τα σχόλια HTML.

Ευπάθειες που προκαλούνται από κώδικα πελάτη (JavaScript, Visual Basic, Flash κ.λπ.):

Επίσης γνωστά ως μοντέλα DOM:

  1. Αντανακλάται (αδρανές). Το ίδιο όπως στην περίπτωση του διακομιστή, μόνο σε αυτήν την περίπτωση η επίθεση είναι δυνατή λόγω του γεγονότος ότι ο κώδικας επεξεργάζεται από το πρόγραμμα περιήγησης.
  2. Αποθηκευμένο (επίμονο). Παρόμοιο με το αποθηκευμένο XSS από την πλευρά του διακομιστή, μόνο σε αυτήν την περίπτωση το κακόβουλο στοιχείο αποθηκεύεται στην πλευρά του πελάτη χρησιμοποιώντας χώρο αποθήκευσης του προγράμματος περιήγησης.

Ευπάθειες υποδομής (πρόγραμμα περιήγησης, προσθήκες, διακομιστές κ.λπ.):

Πολύ σπάνιο, αλλά πιο επικίνδυνο:

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

Ευπάθειες που προκαλούνται από τον χρήστη:

  1. Self-XSS. Συχνά συμβαίνει ως αποτέλεσμα της κοινωνικής μηχανικής, όταν ένας χρήστης εκτελεί κατά λάθος κακόβουλο κώδικα στο πρόγραμμα περιήγησής του.

Ποιος είναι ο κίνδυνος του XSS;

Πώς μπορείτε να προστατεύσετε τον ιστότοπό σας από το XSS; Πώς να ελέγξετε τον κώδικα για ευπάθειες; Υπάρχουν τεχνολογίες όπως το τείχος προστασίας Sucuri που έχουν σχεδιαστεί ειδικά για την αποφυγή τέτοιων επιθέσεων. Αλλά εάν είστε προγραμματιστής, σίγουρα θα θελήσετε να μάθετε περισσότερα σχετικά με τον τρόπο εντοπισμού και αποκατάστασης τρωτών σημείων XSS. Θα το συζητήσουμε στο επόμενο μέρος του άρθρου σχετικά με το XSS.

Όλοι γνωρίζουν εδώ και πολύ καιρό ότι πιο συχνά, χρησιμοποιώντας το XSS, ένας εισβολέας προσπαθεί να στείλει ένα cookie σε ένα θύμα, να διαβάσει μάρκες CSRF, να πραγματοποιήσει μια επίθεση ηλεκτρονικού ψαρέματος (δημιουργώντας μια πλαστή φόρμα σύνδεσης), να εκτελέσει κάποια ενέργεια εκ μέρους ενός χρήστη και κάποιες άλλες παρόμοιες επιθέσεις (ίσως αυτό δεν συμβαίνει) όλες τις δυνατότητες, αλλά αυτές είναι όλες οι πιο δημοφιλείς που γνωρίζω αυτήν τη στιγμή).

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

  • διαβάστε και στείλτε cookies.
  • διαβάστε και στείλτε τις υπόλοιπες πληροφορίες (διεύθυνση IP, εγκατεστημένες προσθήκες, έκδοση και τύπος προγράμματος περιήγησης, υποστήριξη flash, υποστήριξη silverlight κ.λπ.) [προαιρετικά]
  • παίρνουμε πληροφορίες για το εσωτερικό δίκτυο, διαπερνούμε το δρομολογητή [προαιρετικό]
  • διαβάστε και στείλτε διαφορετικά διακριτικά [προαιρετικά]
  • εφαρμόζουμε ηλεκτρονικό ψάρεμα [προαιρετικό].
  • κάντε κάτι "με το χέρι" "από τον χρήστη [προαιρετικό].
  • συνεχίζουμε να τον κατασκοπεύουμε και να εξάγουμε πληροφορίες έως ότου έκλεισε την καρτέλα ή έφυγε από τον ιστότοπο.

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

Ερχόμαστε στο στόχο.

Θα ξεκινήσω από μακριά: μέσω JavaScript είναι δυνατό να αλλάξετε τη διαδρομή στη γραμμή διευθύνσεων χωρίς να φορτώσετε ξανά τη σελίδα. Για παράδειγμα, εάν ένας χρήστης έχει φορτώσει μια σελίδα στο

http://site.com/some/path/to/page/


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

http://site.com/new-url/

http: //site.com/new-url/


Παρεμπιπτόντως, αυτή η λειτουργία είναι μερικές φορές αρκετά χρήσιμη όταν είναι απαραίτητο να αποκρύψετε από τους χρήστες (ή πιο προσεκτική κατηγορία χρηστών - διαχειριστές) τη διεύθυνση URL αφού κάνει κλικ στον σύνδεσμο που περιείχε το Reflected XSS, έτσι ώστε αργότερα, μετά τη φόρτωση της σελίδας, στη γραμμή διευθύνσεων, δεν βρήκα τίποτα.

http: //site.com/search.php?q\u003d123

http://site.com/search.php?q\u003d123

http: //site.com/search.php?q\u003d123


θα του στερήσουμε αυτήν την ευκαιρία.

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

Ορίζουμε την ιδέα.

Η γενική αρχή της λειτουργίας έχει ως εξής: όταν ένας χρήστης επισκέπτεται μια σελίδα με XSS, το σενάριο δημιουργεί ένα iframe με την ίδια διεύθυνση με τη σελίδα και το "επισυνάπτει" στο πρώτο πλάνο, ο χρήστης παίρνει την εντύπωση ότι η σελίδα φορτώνεται κανονικά, επειδή το iframe μπορεί να δει μόνο τον κώδικα σελίδες.

Και το βοηθητικό σενάριο ελέγχει τη λογική του spy bot, δηλαδή παρακολουθεί πότε αλλάζει η διεύθυνση στο πλαίσιο για να την αλλάξει στη γραμμή διευθύνσεων, αλλά αν υπάρχει διαφορετικός τομέας στη νέα διεύθυνση του πλαισίου, τότε μπορείτε να το ανοίξετε σε μια νέα vlkadka, ή θα πρέπει να φορτώσετε ξανά τη σελίδα για να μην καεί.
Έτσι, για να σταματήσει η εκτέλεση του XSS αυτή τη στιγμή, ο χρήστης πρέπει είτε να ανανεώσει τη σελίδα χειροκίνητα (εάν το XSS αντανακλάται και μεταδόθηκε με τη μέθοδο POST, σε άλλες περιπτώσεις η ενημέρωση δεν θα αποθηκευτεί και παρεμπιπτόντως, ορισμένα προγράμματα περιήγησης μπορούν τώρα να στείλουν ξανά το αίτημα POST κατά την ενημέρωση της σελίδας) κλείστε την καρτέλα ή μεταβείτε σε άλλο τομέα (αν και σε αυτήν την περίπτωση μπορείτε να αποφύγετε την απώλεια ελέγχου)

Εάν μεταβεί σε έναν υποτομέα του επιτιθέμενου τομέα, τότε η επιλογή του εισβολέα, δηλαδή, το XSS θα λειτουργήσει, αλλά υπάρχει μια μικρή πιθανότητα ο χρήστης να δει μια ασυμφωνία μεταξύ της διεύθυνσης. Νομίζω ότι εδώ σύμφωνα με την κατάσταση, για παράδειγμα, εάν επιτέθηκε ο τομέας google.ru, ο χρήστης πήγε στην υπηρεσία αρχείων cloud της Google, η οποία συνήθως βρίσκεται στον υποτομέα drive.google.ru, τότε η πιθανότητα ότι θα παρατηρήσει την αλίευση όταν κοιτάζει στη γραμμή διευθύνσεων είναι αρκετά υψηλή , εάν χρησιμοποιούσε αυτήν την υπηρεσία συχνά... Διαφορετικά, μπορείτε να το διακινδυνεύσετε. Αλλά πρέπει να λάβουμε υπόψη ότι δεν θα είμαστε σε θέση να διαβάσουμε τα δεδομένα του από ένα πλαίσιο με έναν υποτομέα, καθώς η Πολιτική Cross Origin δεν θα το επιτρέψει. Αλλά μπορούμε ήρεμα να ανεβούμε τον κύριο τομέα εκ μέρους του σε λειτουργία μυστικότητας (παρακάτω θα αναφερθούμε περισσότερο σε αυτό με περισσότερες λεπτομέρειες).

Μόνο αυτή η μέθοδος έχει περιορισμούς, δηλαδή - δεν θα λειτουργήσει εάν υπάρχει μια κεφαλίδα στις απαντήσεις του διακομιστή ιστού του ιστότοπου Επιλογές X-Frameμε το νόημα ΑΡΝΟΥΜΑΙ... Αλλά προσωπικά, έχω γνωρίσει τέτοιες ιστοσελίδες μερικές φορές, τώρα ακόμη και τις μισές ΙΔΙΟΤΗΤΑδεν εκτίθεται, πόσο μάλλον τον πλήρη περιορισμό ΑΡΝΟΥΜΑΙ.

Αναλύουμε την ιδέα.

Τώρα πολλοί πιθανότατα θυμόταν ένα υπέροχο πράγμα όπως το BeEF, το οποίο έχει επίσης πολλά ενδιαφέροντα πράγματα. Παρεμπιπτόντως, υπάρχει επίσης μια επιλογή για αναγκαστική ανακατεύθυνση χρήστη στο πλαίσιο, αλλά η διεύθυνση στη γραμμή διευθύνσεων δεν αλλάζει, η οποία μπορεί να κάψει γρήγορα το γραφείο και αυτή η επιλογή εξυπηρετεί λίγο για άλλους σκοπούς.
Σε γενικές γραμμές, το BeEF'e έχει σχεδόν όλα όσα χρειάζεστε και ακόμη και πολλές επιπλέον λειτουργίες, αλλά προσωπικά ήθελα επιπλέον λειτουργικότητα, δηλαδή:

  • τη δυνατότητα παρακολούθησης του κώδικα των σελίδων που είναι διαθέσιμοι στον επιτιθέμενο χρήστη σε πραγματικό χρόνο ·
  • τη δυνατότητα παρακολούθησης όλων όσων πληκτρολογεί σε αυτόν τον ιστότοπο (από σύνδεση και κωδικό πρόσβασης, hotkeys και μηνύματα), δηλαδή, keylogger στο JS,
  • τη δυνατότητα παροχής εντολών JS στο bot σας σε πραγματικό χρόνο, αφού δείτε τον κώδικα των ληφθεισών σελίδων,
  • τη δυνατότητα να αφήσετε εντολές στο bot τοπικά, ώστε να τις «παραλαμβάνει» και να τις εκτελεί χωρίς την άμεση συμμετοχή μας.
  • χαμηλότερη πιθανότητα να καεί το bot ή την ικανότητα του bot να "κρυφτεί" από τα αδιάκριτα μάτια.

Όπως αναφέρθηκε παραπάνω - αποφάσισα να δανειστώ από την BeEF'a cool ιδέα της ουράς εκτέλεσης εντολών. Για παράδειγμα, αναλύσαμε τις σελίδες που έριξε το bot όταν ένας προνομιούχος χρήστης ανέβηκε στον πίνακα ελέγχου του με αποθηκευμένο XSS, αφήνουμε την εντολή στον κώδικα bot - JS, όπως την επόμενη φορά που θα εισέλθει ο χρήστης, πατήστε αυτό το κουμπί, γράψτε αυτήν την τιμή εδώ και ούτω καθεξής. Όταν αυτός ο χρήστης επισκέπτεται στη συνέχεια τη σελίδα, το bot διαβάζει τις εντολές και τις εκτελεί και δεν χρειάζεται να είμαστε στο τιμόνι του - είναι πολύ βολικό.

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

Ας εφαρμόσουμε την ιδέα.

Κατ 'αρχήν, μπορείτε να παραλείψετε αυτό το μέρος του άρθρου, καθώς περιγράφει απλώς τη διαδικασία υλοποίησης του επιθυμητού bot και μερικές από τις λεπτομέρειες του, σε περίπτωση που κάποιος θέλει να το ξανακάνει ή να το τελειώσει μόνοι του. Αν και το bot στην αρχή του κώδικα θα έχει μεταβλητές μέσω των οποίων μπορείτε να ορίσετε ορισμένες ρυθμίσεις.
Πρώτον, ο αλγόριθμος των ενεργειών bot από τη στιγμή της φόρτωσης:

1) Έλεγχος κεφαλίδας Επιλογές X-Frame: DENY(εάν υπάρχει, τυλίξτε τα καλάμια) ·
2) Ενσωμάτωση πλαισίου και ρύθμιση όλων των στοιχείων του bot.
3) Κατάργηση του σεναρίου και όλων των ιχνών στον κώδικα HTML.
4) Δημιουργία επαφής με την πλευρά του διακομιστή και έναρξη της αποστολής δεδομένων, αντίδραση σε απαντήσεις (λήψη εντολών από τον διακομιστή).

Το πρώτο σημείο δεν ήταν εντελώς πλήρες, δηλαδή, το bot ελέγχει μόνο την πρώτη σελίδα και την κεφαλίδα του root. Το γεγονός είναι ότι συνήθως αυτές οι κεφαλίδες ενσωματώνονται από τον διακομιστή ιστού για όλες τις σελίδες ταυτόχρονα και είναι πολύ σπάνιο ότι όλα γίνονται "χειροκίνητα" για μια ξεχωριστή σελίδα. Και αυτός ο τίτλος είναι πολύ σπάνιος. Λοιπόν, δεν υπάρχει τίποτα το ιδιαίτερο να πούμε για το δεύτερο και το τρίτο, όλα θα είναι χαμηλότερα.

Υπάρχει ένα σχετικά σημαντικό σημείο ότι πριν προσθέσετε τον κώδικα δέσμης ενεργειών bot στον κώδικά σας, πρέπει να απαλλαγείτε αμέσως από τα σημάδια XSS στη γραμμή διευθύνσεων (από τον κώδικα JS), καθώς αυτό μειώνει τις πιθανότητες ανίχνευσης και, το πιο σημαντικό, αποτρέπει την επανάληψη που συμβαίνει κατά την προσθήκη μιας διεύθυνσης στο πλαίσιο με τον ίδιο κωδικό XSS, ο οποίος με τη σειρά του δημιουργεί ένα άλλο πλαίσιο με τον εαυτό του, και ούτω καθεξής.

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

Λειτουργία ελέγχου ενημέρωσης καρέ. Δοκίμασα αρκετούς τρόπους για να λύσω οικονομικά αυτό το πρόβλημα κρεμώντας τους χειριστές συμβάντων contentWindowή contentDocument, αλλά τίποτα δεν πέτυχε, οπότε έπρεπε να γράψω μια συνάρτηση που θα ελέγχει τη διεύθυνση του καρέ και θα τη συγκρίνει με αυτήν που είχε αποθηκευτεί προηγουμένως, και με βάση αυτό, θα αποφασίσει εάν το πλαίσιο έχει ενημερωθεί (αν η διεύθυνση έχει αλλάξει) και στη συνέχεια ονομάζεται αναδρομικά.

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

Αποστολή του κώδικα HTML της σελίδας.

Εδώ το σχήμα είναι αρκετά απλό - μετά από κάθε επαναφόρτωση του πλαισίου (συμπεριλαμβανομένης της πρώτης φόρτωσης), το bot στέλνει στον διακομιστή ολόκληρο τον κώδικα HTML της σελίδας μαζί με την τρέχουσα διεύθυνσή του, ώστε αργότερα να μπορείτε να διακρίνετε εάν ο κώδικας ανήκει στις απαιτούμενες σελίδες.

Η λογική της αποθήκευσης σελίδων εφαρμόζεται στον διακομιστή - ο διακομιστής για κάθε τομέα δημιουργεί ένα φάκελο με το όνομα αυτού του τομέα και αποθηκεύουμε όλα τα δεδομένα εκεί. Οι κωδικοί σελίδας αποθηκεύονται και ενημερώνονται συνεχώς στις πιο πρόσφατες εκδόσεις, αλλά κάθε νέα μέρα δημιουργείται ένα νέο αντίγραφο της σελίδας, ώστε να μπορείτε να ελέγχετε το ιστορικό εκδόσεων, εάν είναι απαραίτητο. Δηλαδή, για /news.phpΤην 1η Σεπτεμβρίου, η κατάσταση θα ενημερωθεί και ήδη στις 2 Σεπτεμβρίου, θα δημιουργηθεί ένα αντίγραφο, σχετικό μόνο για εκείνη την ημέρα και έτσι κάθε μέρα ξανά (εάν ο χρήστης επισκέπτεται αυτήν τη σελίδα κάθε μέρα). Το όνομα της σελίδας αποτελείται από την ημερομηνία και τη διαδρομή προς αυτήν τη σελίδα σε σχέση με τη ρίζα του ιστότοπου (δηλαδή, χωρίς τομέα).

Keylogger σε JavaScript.

Η ιδέα έχει ήδη υλοποιηθεί από ορισμένους ενθουσιώδεις, αλλά για μένα οι εξελίξεις τους δεν ταίριαζαν, αν μόνο επειδή οι περισσότεροι από αυτούς ήταν αρκετά απλοί, δηλαδή, ανίχνευσαν τον κώδικα του πατημένου πλήκτρου και μέσω String.fromCharCodeμεταφράζεται σε σύμβολα. Αλλά αυτή η μέθοδος έχει ορισμένα μειονεκτήματα - τα πλήκτρα ελέγχου όπως shift, control, space κ.λπ., δεν μεταφράζονται σε καμία μορφή (συχνά απλώς ένας άδειος χαρακτήρας), η αλληλεπίδραση των αλφαριθμητικών πλήκτρων με το πλήκτρο shift καταγράφεται εσφαλμένα, καθώς αυτό πρέπει να εφαρμοστεί μέσω προγραμματισμού και Επίσης, όλα τα πατημένα πλήκτρα εμφανίζονται με κεφαλαία γράμματα, τα οποία μπορούν επίσης να διορθωθούν μέσω προγραμματισμού.

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