2 Stimmen

Sind htmlentities und PDO Prepared Statements ausreichend, um XSS und SQLi zu stoppen?

Wenn ich Eingaben überprüfe, konvertiere ich Zeichen, einschließlich Anführungszeichen, in ihre HTML-Entitäten. Wenn ich sie in eine Datenbank einfüge, verwende ich PDO-Vorbereitungssätze und übergebe die Variablen an die execute-Methode.

Reicht das aus, um SQLi- und XSS-Angriffe zu verhindern?

Außerdem, was ist der beste Weg, um hotlinked Bilder zuzulassen? Da sie Schrägstriche enthalten usw. Ich dachte daran, die Bilder darauf zu überprüfen, ob sie gültige Header enthalten.

Danke

2voto

VolkerK Punkte 93746

Htmlentities() kann ausreichen oder auch nicht - je nachdem, wo Sie den Parameter einfügen.

Zum Beispiel

$p = 'javascript:alert(document.URL)';
echo '';

[

druckt

](', htmlentities($p), ')

und hat die JavaScript-Injektion nicht verhindert.
Und selbst wenn htmlentities() die richtige Funktion ist, müssen Sie sie "auf die richtige Weise" anwenden, siehe
http://shiflett.org/blog/2005/dec/google-xss-example

1voto

MightyE Punkte 2659

Genauer gesagt verhindern gebundene Parameter SQL-Injectionen (ein vorbereiteter SQL-Befehl, bei dem Benutzereingaben direkt in den SQL-Stream eingefügt werden, ist unzureichend. Benutzereingaben müssen ein gebundener Parameter sein)

htmlentities (oder htmlspecialchars) reichen in den meisten Fällen aus, um XSS zu verhindern (es gibt immer noch einige Sonderfälle, z. B. wenn Sie Benutzereingaben in einem </code>-Kontext platzieren, einschließlich eines <code>onsomething</code>-Ereignisbehandlers). Diese Funktionen verhindern, dass der Benutzer seinen eigenen Skriptkontext eingeben kann.</p> </x-turndown>

0voto

2ndkauboy Punkte 9136

Ich würde dringend empfehlen, Zeichen nicht in ihre Entitäten umzuwandeln. Verwenden Sie Unicode für Ihre Tabellen und Sie können jedes Zeichen speichern. Darüber hinaus können Sie problemlos nach Werten in der Datenbank suchen, ohne falsche Ergebnisse zu erhalten. Wenn Sie z. B. nach "uml" suchen, würden Sie auch jeden String zurückgeben, der ein deutsches Umlaut enthält, z. B. ü, den Sie später mit PHP filtern müssen.

Sie könnten einfach alle Tags mit strip_tags() filtern oder einfach Tags mit einem Regex entfernen, bevor Sie die Daten einfügen.</p></x-turndown>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X