Schlüsselpunkte
allow_url_fopen
und allow_url_include
in der Datei php.ini deaktiviert werden. session_regenerate_id()
die Sitzungs -ID regelmäßig geändert und die Sitzungs -ID an einem Ort speichert, auf den nur Ihr Skript zugreifen kann. Sicherheit ist nicht nur eine Reihe von Operationen, sondern auch eine Denkweise, eine Art, Probleme zu betrachten und mit der Welt umzugehen. Es bedeutet "Ich weiß nicht, was sie tun werden, aber ich weiß, dass sie versuchen, mein System zu vermasseln" und dann proaktiv das Problem zu verhindern, anstatt in negative Emotionen zu geraten. Sie können jedoch keine statistischen Regeln verletzen. Niemand würde einen Artikel mit dem Titel "Coding for Security" lesen. Jeder möchte einen Artikel mit Zahlen wie: "8 Die häufigsten PHP -Sicherheitsangriffe und wie man sie vermeidet", "23 Dinge sagen nicht zu Supermodels" und "15 Gründe, um eine Strahlungsvergiftung zu vermeiden". Hier sind hier die "Top Ten PHP -Sicherheitslücken".
SQL -Injektion
Der Spitzenplatz ist SQL -Injektionsangriff. In diesem Fall gibt jemand SQL -Code -Snippets ein (klassische Beispiele löschen Datenbankanweisungen, obwohl es viele andere potenziell zerstörerische Operationen gibt) als Werte in Ihre URL- oder Webform. Mach dir keine Sorgen, wie er deinen Tabellennamen kennt. Sie kämpfen gegen einen finsteren und einfallsreichen Feind. Was können Sie also tun, um dies zu vermeiden? Zunächst müssen Sie skeptisch gegenüber allen Eingaben sein, die Sie vom Benutzer erhalten. Ich glaube, jeder ist freundlich? Schauen Sie sich die Familie Ihres Ehepartners an ... sie sind seltsam, seltsam und einige sogar gefährlich. Der Weg zur Verhinderung solcher Probleme besteht darin, PDO -Vorverarbeitungsanweisungen zu verwenden. Ich möchte PDO jetzt nicht im Detail diskutieren. Sagen Sie einfach, dass die Vorverarbeitungserklärung die Daten von den Anweisungen trennt. Dies verhindert, dass die Daten als etwas anderes als die Daten behandelt werden. Für weitere Informationen können Sie den von Timothy Boronczyk geschriebenen Artikel "Migration von MySQL -Erweiterung zu PDO" anzeigen.
Cross-Site-Skriptangriff (XSS)
verbrennen diese schwarzherzigen Menschen, die sich auf diese Täuschung verlassen, um zu überleben. Eltern, sprechen Sie heute mit den Kindern, damit sie keine bösen XSS -Angreifer werden! Die Essenz eines XSS -Angriffs besteht darin, Code (normalerweise JavaScript -Code, aber jeder Client -Code) in die Ausgabe Ihres PHP -Skripts zu injizieren. Diese Art von Angriff ist möglich, wenn Sie die an Sie gesendete Eingabe anzeigen. Sie können dies beispielsweise in einem Forum -Post tun. Ein Angreifer kann JavaScript -Code in seiner Nachricht veröffentlichen, die Ihrer Website unaussprechliche Schäden verursachen können. Bitte lassen Sie mich nicht ausführlich erklären; Für weitere Informationen und Ihren Schutz empfehle ich, diese hervorragenden Artikel über Phpmaster zu lesen:
Quellcode -Leck
Dies hat mit der Möglichkeit zu tun, die Dateinamen und Inhalte zu sehen, die Personen nicht sehen sollten, wenn die Apache -Konfiguration fehlschlägt. Ja, ich verstehe, das ist unwahrscheinlich, dass es passieren kann, aber es kann passieren und es ist einfach, sich selbst zu schützen. Warum also nicht? Wir alle wissen, dass PHP serverseitig ist - Sie können nicht nur den Quellcode betrachten, um den Code des Skripts anzuzeigen. Wenn Apache jedoch fehlschlägt und Ihre Skripte plötzlich im Klartext dienen, sehen die Leute den Quellcode, den sie nicht hätten sehen sollen. Einige dieses Codes können zugängliche Konfigurationsdateien auflisten oder vertrauliche Informationen enthalten, z. B. Datenbankanmeldeinformationen. Der Kern der Lösung ist, wie Sie die Verzeichnisstruktur Ihrer Anwendung einrichten. Das heißt, es ist kein Problem für schlechte Leute, einen Code zu sehen. Das Problem ist, welcher Code sehen kann, ob sensible Dateien in öffentlichen Verzeichnissen gespeichert werden. Speichern Sie wichtige Dateien außerhalb öffentlich zugänglicher Verzeichnisse, um die Folgen dieses Fehlers zu vermeiden. Weitere Informationen, einschließlich Ihres Beispiels für Verzeichnisstruktur, siehe Punkt 5 in diesem Artikel. Weitere Diskussionen zu diesem Thema finden Sie in dieser Forum -Diskussion.
Remote -Datei enthält
Bitte warten Sie und lassen Sie mich erklären: Remotedateieinschluss bedeutet, dass Remotedateien in Ihrer Anwendung enthalten sind. Sehr tiefgreifend, oder? Aber warum ist das ein Problem? Weil Remotedateien nicht vertrauenswürdig sind. Möglicherweise wurde es böswillig geändert, der Code enthält, den Sie nicht in Ihrer Anwendung ausführen möchten. Nehmen wir an, Ihre Website www.myplace.com enthält die Bibliothek www.goodpeople.com/script.php. Eines Nachts wurde www.goodpeople.com gehackt und der Dateiinhalt wurde durch böswilligen Code ersetzt, der Ihre Bewerbung zerstören würde. Dann besucht jemand Ihre Website, Sie stellen aktualisierten Code ein und dann - Bang! Wie stoppen Sie es? Glücklicherweise ist es relativ einfach, dieses Problem zu beheben. Sie müssen nur zu Ihrem Php.ini gehen und die Einstellungen dieser Flaggen überprüfen.
allow_url_fopen
- Gibt an, ob externe Dateien enthalten sein können. Die Standardeinstellung lautet "Ein", aber Sie sollten sie ausschalten. allow_url_include
- Gibt an, ob die Funktionen include()
, require()
, include_once()
und require_once()
Remote -Dateien verweisen können. Es wird standardmäßig ausgeschaltet, und das Ausschalten von allow_url_fopen
zwingt es auch, ausgeschaltet zu werden. Session Hijacking
Session Hijacking ist, wenn eine schlechte Person die Sitzungs -ID eines anderen stiehlt und verwendet, was dem Schlüssel zu einem sicheren Safe -Deflose ist. Wenn eine Sitzung zwischen dem Client und dem Webserver festgelegt wird, kann PHP die Sitzungs -ID in einem Cookie namens PHPSSID auf dem Client speichern. Sendet die ID mit der Seitenanforderung, um auf die persistenten Sitzungsinformationen auf dem Server zuzugreifen (dies füllt das Super Global Variable $_SESSION
Array). Wenn jemand den Sitzungsschlüssel stiehlt, ist das dann schlecht? Die Antwort lautet: Wenn Sie in dieser Sitzung keine wichtigen Aktionen ausführen, lautet die Antwort Nein. Wenn Sie diese Sitzung jedoch verwenden, um Benutzer zu authentifizieren, können einige gemeine Personen sich anmelden und sich in etwas einsetzen. Dies ist besonders schlecht, wenn der Benutzer wichtig ist und viele Berechtigungen hat. Wie stehlen Menschen diese Sitzungsausweise und was können wir, diejenigen von uns, die aufrecht und Angst vor Gott haben, tun? Sitzungs -IDs werden normalerweise durch XSS -Angriffe gestohlen, sodass die Verhinderung von XSS -Angriffen eine gute Sache ist, die einen doppelten Nutzen haben kann. Es ist auch wichtig, die Sitzungs -ID so häufig wie möglich zu ändern. Dies wird Ihr gestohlenes Zeitfenster verkürzen. In PHP können Sie die Funktion session_regenerate_id()
ausführen, um die Sitzungs -ID zu ändern und den Client zu benachrichtigen. Für Benutzer, die PHP 5.2 und später verwenden (Sie verwenden es?), Gibt es eine PHP.ini -Einstellung, die verhindert, dass JavaScript auf die Sitzungs -ID zugreifen (session.cookie.httponly
). Alternativ können Sie die Funktion session_set_cookie_parms()
verwenden. Wenn Sie freigegebene Hosting -Dienste verwenden (die Sitzungsinformationen in einem global zugänglichen Verzeichnis beispielsweise /tmp
speichern), kann die Sitzungs -ID auch Schwachstellen auf der Serverseite enthalten. Sie können dieses Problem blockieren, indem Sie einfach die Sitzungs -ID an einem Ort speichern, an den nur für Ihr Skript (auf der Festplatte oder in der Datenbank) zugegriffen werden kann.
Cross-Site-Anforderungserklärung
Cross-Site-Anfrage-Fälschung (CSRF), auch als Brett Mafrick oder Sean Spencers Strategie bezeichnet, beinhaltet einen eher uninformierten Benutzer dazu, einen zu senden, von dem wir sagen sollten, dass es für sich selbst am ungünstigsten ist. Anstatt mich weiterhin CSRF-Angriffe zu besprechen zu lassen, beziehen Sie sich auf das herausragende Beispiel für einen solchen Inhalt von PHPMaster: Verhinderung der von Martin Psinas verfassten Cross-Site-Anforderungsfälschung.
Katalog traversal
Diese Art von Angriff sucht, wie viele andere Angriffe, nach Websites mit schlechter Sicherheit, und wenn sie eine Website findet, wird Zugriff auf Dateien erzeugt, auf die der Eigentümer nicht öffentlich zugreifen will. Es wird auch ../
(Punkt, Punkt, Slash) Angriff, Kletternangriff und Backtracking -Angriff genannt. Es gibt verschiedene Möglichkeiten, diesen Angriff zu verhindern. Zunächst hoffe ich aufrichtig, dass es Ihnen nicht passieren wird. Manchmal hilft es, Feen und Einhörnern zu wünschen. Manchmal nicht. Der zweite Ansatz besteht darin, einen Whitelist zu verwenden, um zu definieren, welche Seiten für eine bestimmte Anfrage zurückgegeben werden können. Eine andere Möglichkeit besteht darin, Dateipfade in absolute Pfade zu konvertieren und sicherzustellen, dass sie Dateien im zulässigen Verzeichnis verweisen.
Zusammenfassung
Dies sind die Top 10 Probleme, die dazu führen können, dass Ihre PHP -Anwendung gehackt wird, wenn Sie sie versehentlich vermeiden. Ja, 10. Zählen Sie… 1,2,3… was? Sie haben nur 8 gezählt? OK, vielleicht 7. Nun, das zeigt, dass Sie leicht täuschen können und ich bin nicht einmal ein Bösewicht! Bilder aus Fotolien
Häufig gestellte Fragen für Schwachstellen für PHP -Sicherheitsanfälligkeiten (FAQ)
Wie kann man die SQL -Injektion in PHP verhindern?
Was ist ein Cross-Site-Skriptangriff (XSS) und wie kann man ihn verhindern?
Wie schützt ich meine PHP-Anwendung vor Angriffen von CSRF-Angriffen (Cross-Site Request Forgery)?
Was ist eine Datei mit Sicherheitsanfälligkeit und wie mindert sie?
PHP -Objektinjektion ist eine Sicherheitsanfälligkeit, die auftritt, wenn die Benutzereingabe zur Instanziierung einer Klasse verwendet wird. Ein Angreifer kann die Eingaben manipulieren, um eine Instanz jeder Klasse zu erstellen und seine Methoden auszuführen. Um dies zu verhindern, werden Daten niemals nicht vertrauenswürdige Quellen unverzweigt.
PHP -Sitzungen können durch die Verwendung sicherer Cookies, die Regenerierung von Sitzungs -IDs nach der Anmeldung und die Implementierung von Sitzungszeitüberschreitungen geschützt werden. Darüber hinaus werden die Sitzungsdaten auf der Serverseite gespeichert und nur die Sitzungs -ID wird verwendet, um sie zu verweisen.
Einige Best Practices für die PHP-Sicherheit sind: Die PHP-Version auf dem neuesten Stand, einrichten mit Sicherheitskonfigurationen, Überprüfung und Reinigen von Benutzereingaben, Verwenden von sicheren Hashing-Algorithmen mit Passwort und implementieren der korrekten Fehlerbehandlung.
PHP -Schwachstellen können durch Codeüberprüfung, Penetrationstests und Verwendung automatisierter Sicherheitstools erkannt werden. Die regelmäßige Überprüfung von Anwendungen für Sicherheitslücken ist ein entscheidender Bestandteil der Aufrechterhaltung sicherer PHP -Anwendungen.
Es gibt viele Ressourcen, um sich über PHP -Sicherheit zu informieren, einschließlich PHP -Handbüchern, Online -Tutorials, Sicherheitsblogs und Foren. Darüber hinaus bieten Organisationen wie OWASP einen umfassenden Leitfaden zur Sicherheit von Webanwendungen.
Das obige ist der detaillierte Inhalt vonPHP Master | Top 10 PHP Security Schwachstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!