In PHP werden die Daten häufig verarbeitet und entkommen, um potenzielle Sicherheitsanfälligkeiten zu verhindern, insbesondere wenn sie mit einer Datenbank interagieren oder HTML-Inhalte generieren. Eine der üblichen Fluchtmethoden besteht darin, die Funktion addCSlashes zu verwenden. Bei Verarbeitungsdaten verwenden viele Entwickler jedoch häufig AddCsLashes als allgemeine Lösung und verarbeiten sie direkt, um die von den Benutzern eingegebenen Daten zu verarbeiten. Funktioniert ADDCSlashes für alle Fälle? Gibt es eine andere geeignetere Methode?
AddCsLashes ist eine String -Funktion in PHP, die bestimmten Zeichen in einer Zeichenfolge entgeht. Seine Funktion ist es, Zeichen zu entkommen, die zu dem in der Zeichenfolge festgelegten Zeichen in eine Backslash -Plus -Zeichenform basieren, die auf dem angegebenen Zeichensatz basiert. Zum Beispiel:
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"Hello, World!"</span></span><span>;
</span><span><span class="hljs-variable">$escaped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">addcslashes</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-string">'l'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$escaped</span></span><span>; </span><span><span class="hljs-comment">// Ausgabe: He\l\lo, Wor\l\d!</span></span><span>
</span></span>Im obigen Beispiel entkommt addcslashes allen Buchstaben l in \ l .
Während addCSlashes verwendet werden können, um bestimmten Zeichen in einer Zeichenfolge zu entkommen, ist es nicht zum Umgang mit HTML -Formdaten geeignet, insbesondere in Bezug auf die Sicherheit. Die Gründe sind wie folgt:
HTML -Injektion kann nicht verhindern : AddCsLashes entkommt einfach den Zeichen, sondern verarbeitet HTML -Tags nicht. Wenn die Formulardaten böswillige <Script> -Tags oder andere HTML-Elemente enthalten, können ADDCSlashes die Ausführung dieser Inhalte nicht verhindern, was zu einem XSS-Anfälligkeit (Cross-Site-Skriptangriff) führen kann.
Das Entweichen von Charakteren ist zu einfach : AddCsLashes wird hauptsächlich verwendet, um Kontrollzeichen oder Sonderzeichen wie Zitate, Backslashes usw. zu entkommen, berücksichtigt jedoch nicht einige allgemeine Sicherheitsprobleme. Beispielsweise können AddCsLashes nicht effektiv vor böswilligen JavaScript -Code oder SQL -Injektion schützen, die möglicherweise in die Benutzereingabe enthalten sein.
Für Datenbankabfragen nicht zutreffend : Wenn Sie Formulardaten in der Datenbank speichern, ist AddCSlashes kein Ersatz für die entsprechende SQL Escape -Methode. Für eine MySQL -Datenbank sollten beispielsweise parametrisierte Abfragen verwendet werden, anstatt der Eingabe manuell zu entkommen.
Für die Verarbeitung von HTML -Formulardaten finden Sie hier einige geeignete Methoden:
Wenn Sie die vom Benutzer direkt an der Webseite eingegebenen Daten ausgeben müssen, um XSS -Angriffe zu verhindern, sollten Sie die Funktion HTMLSpecialChars oder HTMLentities verwenden. Sie können sich speziellen HTML -Zeichen entziehen, um zu verhindern, dass bösartige HTML oder JavaScript ausgeführt werden.
<span><span><span class="hljs-variable">$user_input</span></span><span> = </span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'user_input'</span></span><span>];
</span><span><span class="hljs-variable">$safe_input</span></span><span> = </span><span><span class="hljs-title function_ invoke__">htmlspecialchars</span></span><span>(</span><span><span class="hljs-variable">$user_input</span></span><span>, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$safe_input</span></span><span>; </span><span><span class="hljs-comment">// Ausgabe安全的 HTML</span></span><span>
</span></span>HTMLSpecialChars werden < , > , & , " und ' in HTML -Entitäten konvertieren, um zu vermeiden, dass der Browser in HTML -Elemente analysiert wird.
Der Parameter ent_quotes stellt sicher, dass sowohl doppelte als auch einzelne Zitate entkommen werden.
Verwenden Sie für SQL -Abfragen niemals AddCSlashes , um Eingabedaten zu entkommen. Die vom Datenbanktreiber bereitgestellte parametrisierte Abfragemethode sollte verwendet werden, um die Fluchtprobleme automatisch zu behandeln und die SQL -Injektion zu verhindern.
Wenn Sie beispielsweise MySQLI oder PDO verwenden, können Sie die folgende Methode verwenden:
Verwenden Sie MySQLI:
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE username = ?"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$user_input</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>Verwenden Sie PDO:
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE username = :username"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bindParam</span></span><span>(</span><span><span class="hljs-string">':username'</span></span><span>, </span><span><span class="hljs-variable">$user_input</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">PARAM_STR</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>Auf diese Weise verarbeitet die Datenbank die Eingabedaten automatisch und vermeidet die Sicherheitsrisiken, die durch manuelles Entkommen entstehen.
Für eine bestimmte Eingabevalidierung müssen Sie möglicherweise reguläre Ausdrücke verwenden, um die Benutzereingabe zu begrenzen. Beschränken Sie beispielsweise Benutzernamen, um nur Buchstaben und Zahlen zuzulassen:
<span><span><span class="hljs-variable">$user_input</span></span><span> = </span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>];
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">"/^[a-zA-Z0-9]+$/"</span></span><span>, </span><span><span class="hljs-variable">$user_input</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Valid username!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Invalid username!"</span></span><span>;
}
</span></span>Dieser Ansatz stellt sicher, dass die Benutzereingabe dem erwarteten Format entspricht, aber HTML- oder SQL -Sicherheitsschutz nicht vollständig ersetzt.
AddCsLashes eignet sich nicht zur Verarbeitung von HTML -Formdaten, da sein Fluchtmechanismus einfach ist und nicht ausreichend Sicherheit hat. Für Daten, die von Benutzern eingegeben wurden, sollte die richtige Art und Weise verwendet werden, um sie zu verarbeiten:
HTMLSpecialChars oder HTMLENTitäten , um XSS -Angriffe zu verhindern;
Parametrisierte Abfrage zur Verhinderung der SQL -Injektion;
Verwenden Sie geeignete reguläre Ausdrücke , um das Format der Benutzereingabe zu überprüfen.
Diese Methoden verbessern die Anwendungssicherheit effektiv und vermeiden häufige Schwachstellen. Daher sollten Entwickler die anwendbaren Szenarien verschiedener Funktionen verstehen und die am besten geeignete Möglichkeit auswählen, Benutzereingabedaten zu verarbeiten.
Verwandte Tags:
HTML addcslashes