In der Webentwicklung ist Sicherheit für Entwickler immer ein zentrales Problem. Mit der kontinuierlichen Eskalation von Angriffsmethoden sind XSS (Cross-Site Scripting Attack) und CSRF (Cross-Site-Anfrage-Fälschung) zu den beiden häufigsten Angriffsformen geworden. Daher ist eine angemessene Sicherheitskonfiguration der Schlüssel zur Verhinderung solcher Angriffe. Als weit verbreitete Programmiersprache bietet PHP eine umfassende Möglichkeit, Sicherheit einzurichten. In diesem Artikel wird untersucht, wie XSS- und CSRF -Angriffe effektiv durch die Sicherheitskonfiguration der Init -Funktion verhindern können.
XSS bezieht sich auf einen Angreifer, der einen böswilligen JavaScript -Code in eine Webseite einfügt, um Benutzer dazu zu veranlassen, diese böswilligen Codes auszuführen, wodurch die sensiblen Informationen der Benutzer (z. B. Cookies, Sitzungsdaten usw.) gestohlen werden. XSS -Angriffe können böswillige Skripte in nicht autorisierten Benutzernbrowsern ausführen, was zu Leckagen und Missbrauch von Informationen führt.
CSRF-Angriffe sind, wenn ein Angreifer protokollierte Benutzer dazu induziert, auf böswillige Websites zuzugreifen, wodurch unbefugte Anfragen ohne Wissen des Benutzers initiiert werden. Auf diese Weise kann der Angreifer die Identität des Opfers verwenden, um verschiedene Operationen auszuführen (z. B. Passwörter, Geld übertragen usw.).
In PHP können wir XSS- und CSRF -Angriffe effektiv verhindern, indem wir globale Sicherheitseinstellungen in der Init -Funktion vornehmen. Die Init -Funktion wird normalerweise während der Initialisierung der Anwendung ausgeführt und ist ein idealer Ort, um die Anwendungskonfiguration einzurichten und globale Sicherheitsmaßnahmen zu behandeln.
Ausgabecodierung:
Alle Dateneingaben eines Benutzers sollten in HTML bei Ausgabe auf der Seite codiert werden. Dies verhindert, dass der vom Benutzer eingegebene böswillige JavaScript -Code vom Browser ausgeführt wird.
function init() {
// Legen Sie die Standardausgabe -Codierung ein,verhindern XSS Angriff
ini_set('html_errors', 0);
}
// Führen Sie bei der Ausgabe von Benutzerdaten durch HTML Entitätskodierung
function safeOutput($data) {
return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
}
// Beispiel:Inhaltseingabe durch den Benutzer ausgeben
echo safeOutput($_GET['user_input']);
Im obigen Code entgeht die Funktion HTMLSpecialChars Sonderzeichen (z. B. < , > , & usw.) von der Benutzereingabe zu HTML -Entitäten, wodurch der Browser vermieden wird, der ihn in HTML- oder JavaScript -Code analysiert.
Inline JavaScript deaktivieren:
Einige Browser können die Ausführung des Inline -JavaScript -Codes ermöglichen, obwohl die Eingabe des Benutzers entkommen ist. Um den Schutz weiter zu stärken, kann die Ausführung von Inline -Skripten durch HTTP -Header verhindert werden.
function init() {
// aufstellen Content Security Policy(CSP)Headerinformationen,Beschränken Sie die Quelle von Skripten
header("Content-Security-Policy: script-src 'self' https://gitbox.net;");
}
Im obigen Code beschränken wir die Quelle des Skripts, indem wir die Informationen über die Inhaltssicherheitspolitik einstellen, und ermöglichen nur, dass JavaScript-Skripte aus dem aktuellen Domänennamen und Gitbox.net geladen werden, um das Laden externer böswilliger Skripte zu vermeiden.
CSRF -Token erzeugen und überprüfen:
Der Schlüssel zu einem CSRF -Angriff ist die Forge -Anfragen. Durch die Verwendung von CSRF -Token können Angreifer die Forderungen effektiv verhindern. Jedes Mal, wenn ein Benutzer eine Seite besucht, generiert der Server ein eindeutiges CSRF -Token und einbettet ihn in das Formular ein. Wenn das Formular eingereicht wird, überprüft der Server, ob das Token mit dem Token in der Benutzersitzung übereinstimmt, wodurch die Legitimität der Anfrage bestätigt wird.
function generateCSRFToken() {
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
return $_SESSION['csrf_token'];
}
function verifyCSRFToken($token) {
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
if (empty($_SESSION['csrf_token']) || $token !== $_SESSION['csrf_token']) {
die('CSRF token validation failed');
}
}
Generieren Sie im Formular das CSRF -Token und reichen Sie es als verstecktes Feld ein:
// erzeugen Token
$csrfToken = generateCSRFToken();
?>
<form method="POST" action="https://gitbox.net/submit_form.php">
<input type="hidden" name="csrf_token" value="<?php echo $csrfToken; ?>">
<!-- Andere Formfelder -->
<input type="submit" value="Submit">
</form>
Wenn das Formular eingereicht wird, überprüft der Server, ob die in der Anfrage in der Anfrage in Übereinstimmung mit dem in der Sitzung gespeicherten Token übereinstimmt, um die Legitimität der Anfrage zu gewährleisten.
Überprüfen Sie den Referer -Header:
CSRF-Angriffe basieren normalerweise darauf, dass Benutzer während der Anmeldung grenzüberschreitende Anfragen stellen. Sie können das Risiko von CSRF-Angriffen weiter verringern, indem Sie den Referenten- Header in der Anfrage überprüfen, um sicherzustellen, dass die Anfrage von einer vertrauenswürdigen Seite stammt.
function checkReferer() {
$referer = $_SERVER['HTTP_REFERER'] ?? '';
if (empty($referer) || strpos($referer, 'gitbox.net') === false) {
die('Invalid referer');
}
}
Durch die angemessene Sicherheitskonfiguration in der Init -Funktion können wir XSS- und CSRF -Angriffe effektiv verhindern. Ausgangscodierung, Einrichten von Inhaltssicherheitsrichtlinien, Generieren und Überprüfung von CSRF -Token sowie die Überprüfung von Referatoren -Top -Maßnahmen sind wirksame Möglichkeiten, um vor diesen Angriffen zu schützen. Hoffentlich helfen Ihnen die Beispiele und Best Practices in diesem Artikel, sicherere PHP -Anwendungen aufzubauen, die Benutzer vor potenziellen Sicherheitsbedrohungen schützen.