Zu den häufigsten Sicherheitsbedrohungen bei der Erstellung von PHP-Websites gehören: SQL-Injection, Manipulation von GET- und POST-Variablen, Pufferüberlaufangriffe, Cross-Site-Scripting-Angriffe, Datenmanipulation im Browser und Remote-Formularübermittlung.
1. SQL-Injection-Angriffe verhindern
Bei SQL-Injection-Angriffen fügen Benutzer Informationen zu Datenbankabfragen hinzu, indem sie Formulare oder GET-Abfragezeichenfolgen manipulieren.
Stellen Sie sich zum Beispiel eine einfache Login-Datenbank vor. Jeder Datensatz in dieser Datenbank verfügt über ein Benutzernamenfeld und ein Passwortfeld. Erstellen Sie ein Anmeldeformular, um Benutzern die Anmeldung zu ermöglichen.
Die Lösung für dieses Problem besteht darin, die in PHP integrierte mysql_real_escape_string()-Funktion als Wrapper um jede Benutzereingabe zu verwenden.
Diese Funktion maskiert Zeichen in einer Zeichenfolge, sodass die Zeichenfolge keine Sonderzeichen wie Apostrophe übergeben kann und MySQL auf der Grundlage der Sonderzeichen arbeiten kann. Listing 7 zeigt den Escape-Code.
2. Verhindern Sie, dass Benutzer Variablen manipulieren
Nur weil ein Benutzer ein gültiges Passwort hat, heißt das nicht, dass er sich an die Regeln hält – er hat viele Möglichkeiten, Schaden anzurichten. Beispielsweise könnte eine Anwendung es Benutzern ermöglichen, spezielle Inhalte anzuzeigen.
Zum Beispiel template.php?pid=33 oder template.php?pid=321. Der Teil der URL nach dem Fragezeichen wird als Abfragezeichenfolge bezeichnet. Da die Abfragezeichenfolge direkt in der URL platziert wird, wird sie auch als GET-Abfragezeichenfolge bezeichnet.
Stimmt hier etwas nicht?
Erstens besteht die implizite Annahme, dass die GET-Variable pid vom Browser sicher ist.
Was wird passieren?
Die meisten Benutzer sind nicht schlau genug, um semantische Angriffe zu konstruieren. Wenn sie jedoch pid=33 im URL-Speicherortfeld des Browsers bemerken, könnten sie Probleme verursachen.
Wenn sie eine andere Zahl eingeben, ist das wahrscheinlich in Ordnung; wenn sie jedoch etwas anderes eingeben, wie einen SQL-Befehl oder den Namen einer Datei (wie /etc/passwd) oder einen anderen Unfug wie „Einen Wert eingeben“. bis zu 3.000 Zeichen lang, und was passiert?
Denken Sie in diesem Fall an die Grundregel: Vertrauen Sie Benutzereingaben nicht.
Anwendungsentwickler wissen, dass von template.php akzeptierte persönliche Identifikatoren (PIDs) numerisch sein sollten. Sie können daher die Funktion is_numeric() von PHP verwenden, um sicherzustellen, dass nicht numerische PIDs nicht akzeptiert werden.
Alles, was Sie tun müssen, ist strlen() zu verwenden, um zu prüfen, ob die Länge der Variablen ungleich Null ist. Wenn ja, verwenden Sie einen rein numerischen regulären Ausdruck, um sicherzustellen, dass das Datenelement gültig ist. Wenn die PID Buchstaben, Schrägstriche, Punkte oder etwas enthält, das einer Hexadezimalzahl ähnelt, erfasst diese Routine dies und blockiert die Seite für Benutzeraktivitäten.
3. Pufferüberlaufangriff
Ein Pufferüberlaufangriff versucht, den Speicherzuordnungspuffer in einer PHP-Anwendung (oder genauer gesagt in Apache oder dem zugrunde liegenden Betriebssystem) zum Überlaufen zu bringen.
Denken Sie daran, dass Sie Ihre Webanwendung möglicherweise in einer Hochsprache wie PHP schreiben, aber letztendlich C aufrufen (im Fall von Apache). Wie die meisten Low-Level-Sprachen gelten in C strenge Regeln für die Speicherzuweisung.
Pufferüberlaufangriffe senden eine große Datenmenge an den Puffer, was dazu führt, dass ein Teil der Daten in benachbarte Speicherpuffer überläuft, wodurch der Puffer zerstört oder die Logik neu geschrieben wird. Dies kann zu einem Denial-of-Service, zur Beschädigung von Daten oder zur Ausführung von Schadcode auf dem Remote-Server führen.
Die einzige Möglichkeit, Pufferüberlaufangriffe zu verhindern, besteht darin, die Länge aller Benutzereingaben zu überprüfen.
Beachten Sie, dass Pufferüberlaufangriffe nicht auf lange Zahlen- oder Buchstabenfolgen beschränkt sind. Möglicherweise sehen Sie auch lange hexadezimale Zeichenfolgen (die oft wie xA3 oder xFF aussehen).
Denken Sie daran, dass das Ziel jedes Pufferüberlaufangriffs darin besteht, einen bestimmten Puffer zu überfluten und Schadcode oder Anweisungen in den nächsten Puffer zu platzieren, wodurch Daten beschädigt oder Schadcode ausgeführt wird.
Der einfachste Weg, mit einem Hex-Pufferüberlauf umzugehen, besteht darin, zu verhindern, dass Eingaben eine bestimmte Länge überschreiten.
Wenn Sie es mit einem Formulartextbereich zu tun haben, der längere Einträge in der Datenbank zulässt, gibt es auf Client-Seite keine Möglichkeit, die Länge der Daten einfach zu begrenzen. Nachdem die Daten PHP erreicht haben, können Sie reguläre Ausdrücke verwenden, um alle hexadezimalen Zeichenfolgen zu löschen.
4. Cross-Site-Scripting-Angriff
Bei einem Cross-Site-Scripting-Angriff (XSS) gibt ein böswilliger Benutzer häufig Informationen in ein Formular ein (oder über andere Benutzereingabemethoden) und diese Eingaben werden schädliche clientseitige Token in Prozesse oder Datenbanken eingefügt.
Stellen Sie sich zum Beispiel vor, Sie hätten auf Ihrer Website ein einfaches Gästebuchprogramm, das es Besuchern ermöglicht, ihren Namen, ihre E-Mail-Adresse und eine kurze Nachricht zu hinterlassen.
Ein böswilliger Benutzer könnte diese Gelegenheit nutzen, um etwas anderes als eine kurze Nachricht einzufügen, beispielsweise ein Bild, das für andere Benutzer ungeeignet ist, oder JavaScript, das den Benutzer auf eine andere Website umleitet oder Cookie-Informationen stiehlt.
Glücklicherweise bietet PHP die Funktion „strip_tags()“, mit der alle von HTML-Tags umgebenen Inhalte entfernt werden können. Die Funktion „strip_tags()“ ermöglicht auch die Bereitstellung einer Liste der zulässigen Tags.
Die Verwendung von strip_tags() für öffentliche Benutzereingaben ist aus Sicherheitsgründen notwendig. Wenn sich das Formular in einem geschützten Bereich befindet (z. B. einem Content-Management-System) und Sie darauf vertrauen, dass Benutzer ihre Aufgaben korrekt ausführen (z. B. HTML-Inhalte für eine Website erstellen), ist die Verwendung von strip_tags() möglicherweise unnötig und beeinträchtigt die Produktivität.
Es gibt noch eine weitere Frage: Wenn Sie Benutzereingaben akzeptieren möchten, z. B. Kommentare zu Beiträgen oder Gastregistrierungsartikeln, und diese Eingaben anderen Benutzern anzeigen müssen, müssen Sie die Antwort in PHPs htmlspecialchars() einfügen. in Funktion.
Diese Funktion wandelt die kaufmännischen Und-Symbole
5. Datenmanipulation im Browser
Es gibt eine Art Browser-Plug-in, mit dem Benutzer Kopfzeilenelemente und Formularelemente auf der Seite manipulieren können. Mit Tamper Data, einem Mozilla-Plug-in, ist es einfach, einfache Formulare mit vielen versteckten Textfeldern zu manipulieren, um Anweisungen an PHP und MySQL zu senden.
Bevor der Benutzer im Formular auf „Senden“ klickt, kann er „Manipulationsdaten“ starten. Beim Absenden des Formulars wird ihm eine Liste der Formulardatenfelder angezeigt.
Manipulationsdaten ermöglichen es dem Benutzer, diese Daten zu manipulieren, bevor der Browser die Formularübermittlung abschließt.
Der einfachste Weg, sich gegen dieses Tool zu verteidigen, besteht darin, anzunehmen, dass jeder Benutzer Tamper Data (oder ein ähnliches Tool) verwenden könnte.
Geben Sie nur die Mindestmenge an Informationen an, die das System zur Verarbeitung des Formulars benötigt, und übermitteln Sie das Formular an eine spezielle Logik. Beispielsweise sollte das Registrierungsformular nur an die Registrierungslogik übermittelt werden.
Was wäre, wenn Sie eine gemeinsame Formularverarbeitungsfunktion erstellt hätten und viele Seiten diese gemeinsame Logik verwenden?
Was wäre, wenn Sie versteckte Variablen verwenden, um den Fluss zu steuern?
Zum Beispiel kann in einer versteckten Formularvariablen angegeben werden, in welche Datenbanktabelle geschrieben werden soll oder welches Datei-Repository verwendet werden soll. Es gibt 4 Optionen:
Ändern Sie nichts und beten Sie, dass sich keine böswilligen Benutzer im System befinden.
Funktion neu schreiben, um sicherere dedizierte Formularverarbeitungsfunktionen zu verwenden und die Verwendung versteckter Formularvariablen zu vermeiden.
Verwenden Sie md5() oder andere Verschlüsselungsmechanismen, um Tabellennamen oder andere vertrauliche Informationen in versteckten Formularvariablen zu verschlüsseln. Vergessen Sie nicht, sie auf der PHP-Seite zu entschlüsseln.
Verschleieren Sie die Bedeutung von Werten durch die Verwendung von Abkürzungen oder Spitznamen und konvertieren Sie diese Werte dann in PHP-Formularverarbeitungsfunktionen. Wenn Sie beispielsweise auf die Benutzertabelle verweisen möchten, können Sie mit u oder einer beliebigen Zeichenfolge (z. B. u8y90×0jkL) darauf verweisen.
Die letzten beiden Optionen sind nicht perfekt, aber sie sind viel besser, als wenn der Benutzer die Middleware-Logik oder das Datenmodell leicht erraten muss.
6. Remote-Formularübermittlung
Der Vorteil des Webs besteht darin, dass es Informationen und Dienste teilen kann. Die Kehrseite ist das Teilen von Informationen und Dienstleistungen, denn manche Leute machen Dinge ohne Skrupel.
Nehmen Sie ein Formular als Beispiel. Jeder kann eine Website besuchen und über Datei > Speichern unter im Browser eine lokale Kopie des Formulars erstellen. Anschließend kann er den Aktionsparameter so ändern, dass er auf eine vollständig qualifizierte URL verweist (nicht auf formHandler.php, sondern auf http://www.yoursite.com/formHandler.php, da sich das Formular auf dieser Site befindet) und tun, was er möchte Wenn Sie Änderungen vornehmen, klicken Sie auf „Senden“ und der Server empfängt diese Formulardaten als legalen Kommunikationsfluss.
Zunächst sollten Sie $_SERVER['HTTP_REFERER'] überprüfen, um festzustellen, ob die Anfrage von Ihrem eigenen Server kommt. Diese Methode kann die meisten böswilligen Benutzer blockieren, nicht jedoch die raffiniertesten Hacker. Diese Leute sind schlau genug, die Referrer-Informationen im Header zu manipulieren, damit die Remote-Kopie des Formulars so aussieht, als wäre sie von Ihrem Server übermittelt worden.
Eine bessere Möglichkeit, die Remote-Formularübermittlung zu handhaben, besteht darin, ein Token basierend auf einer eindeutigen Zeichenfolge oder einem Zeitstempel zu generieren und dieses Token in die Sitzungsvariable und das Formular einzufügen. Überprüfen Sie nach dem Absenden des Formulars, ob die beiden Token übereinstimmen. Wenn es nicht übereinstimmt, wissen Sie, dass jemand versucht, Daten von einer Remote-Kopie des Formulars zu senden.
Sicherheitszusammenfassung der PHP-Website-Entwicklung:
Verwenden Sie mysql_real_escape_string(), um SQL-Injection-Probleme zu verhindern.
Verwenden Sie reguläre Ausdrücke und strlen(), um sicherzustellen, dass GET-Daten nicht manipuliert wurden.
Verwenden Sie reguläre Ausdrücke und strlen(), um sicherzustellen, dass vom Benutzer übermittelte Daten die Speicherpuffer nicht überlaufen.
Verwenden Sie strip_tags() und htmlspecialchars(), um zu verhindern, dass Benutzer potenziell schädliche HTML-Tags übermitteln.
Verhindern Sie, dass das System durch Tools wie Tamper Data verletzt wird.
Verwenden Sie ein eindeutiges Token, um zu verhindern, dass Benutzer Formulare aus der Ferne an den Server senden.
Verwandte Empfehlungen:
Häufige PHP-Sicherheitsangriffe und -Lösungen
Lösungen für mehrere gängige Angriffsmethoden bei der PHP-Website-Entwicklung
PHP-Implementierungsbeispielcode zur Verhinderung von Cross-Site- und XSS-Angriffen
Das obige ist der detaillierte Inhalt vonGängige Angriffsmethoden auf PHP-Websites. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

TomodifyDatainaphpSession, startTheSessionwithSession_Start (), dann $ _SessionToSet, modify, orremovevariables.1) startTheSession.2) setOrmodifySessionvariabling $ _Session.3) removeVariables mit ()

Arrays können in PHP -Sitzungen gespeichert werden. 1. Starten Sie die Sitzung und verwenden Sie Session_Start (). 2. Erstellen Sie ein Array und speichern Sie es in $ _Session. 3. Abrufen Sie das Array durch $ _Session ab. 4. Optimieren Sie Sitzungsdaten, um die Leistung zu verbessern.

Die PHP -Sitzungsmüllsammlung wird durch einen Wahrscheinlichkeitsmechanismus ausgelöst, um abgelaufene Sitzungsdaten zu beseitigen. 1) Legen Sie die Auslöserwahrscheinlichkeit und die Sitzungslebenszyklus in der Konfigurationsdatei ein. 2) Sie können Cron-Aufgaben verwenden, um Hochlastanwendungen zu optimieren. 3) Sie müssen die Häufigkeit und Leistung von Müllsammlungen ausgleichen, um Datenverlust zu vermeiden.

Die Verfolgung von Benutzersitzungsaktivitäten in PHP wird durch Sitzungsverwaltung implementiert. 1) Verwenden Sie Session_start (), um die Sitzung zu starten. 2) Speichern Sie Daten über das $ _Session -Array. 3) Call Session_Destroy (), um die Sitzung zu beenden. Die Sitzungsverfolgung wird für die Analyse der Benutzerverhalten, die Sicherheitsüberwachung und die Leistungsoptimierung verwendet.

Die Verwendung von Datenbanken zum Speichern von PHP -Sitzungsdaten kann die Leistung und Skalierbarkeit verbessern. 1) Konfigurieren Sie MySQL, um Sitzungsdaten zu speichern: Richten Sie den Sitzungsprozessor in Php.ini oder PHP -Code ein. 2) Benutzerdefinierte Sitzungsprozessor implementieren: Definieren Sie Öffnung, Schließen, Lesen, Schreiben und andere Funktionen, um mit der Datenbank zu interagieren. 3) Optimierung und Best Practices: Verwenden Sie Indexierung, Zwischenspeicherung, Datenkomprimierung und verteilter Speicher, um die Leistung zu verbessern.

PhpSessionStrackUserDataacrossMultiplePageRequestsusesuseiquiTIdStoredInacookie.her'ShowtomagetheFectiv: 1) StartaSessionswithSession_start () und storateatain $ _Session.2) regeneratethessionSessionInoginWithSession_IDENT_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTEL

In PHP können durch Sitzungsdaten in den folgenden Schritten iteriert werden: 1. Starten Sie die Sitzung mit Session_Start (). 2. Iterieren Sie durch die Foreach-Schleife durch alle Schlüsselwertpaare im $ _Session-Array. 3. Wenn Sie komplexe Datenstrukturen verarbeiten, verwenden Sie is_array () oder is_object () Funktionen und verwenden Sie print_r (), um detaillierte Informationen auszugeben. 4. Bei der Optimierung von Traversal kann Paging verwendet werden, um eine gleichzeitige Verarbeitung großer Datenmengen zu vermeiden. Auf diese Weise können Sie PHP -Sitzungsdaten in Ihrem tatsächlichen Projekt effizienter verwalten und verwenden.

Die Sitzung realisiert die Benutzerauthentifizierung über den serverseitigen Statusverwaltungsmechanismus. 1) Erstellung der Sitzung und Erzeugung eindeutiger IDs, 2) IDs werden durch Cookies weitergeleitet, 3) Server speichert und greift auf Sitzungsdaten über IDs, 4) Benutzerauthentifizierung und Statusverwaltung zugeordnet und verbessert die Sicherheit und die Benutzererfahrung von Anwendungen.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),
