2010-12-09 13 views
1

Eine meiner GET-Variablen ermöglicht alle Zeichen, die eine URL durch Urlencoding versauen können. Problem ist, dass Tags an das Skript übergeben und im HTML angezeigt werden können, nicht gut! Vor allem, da es verwendet wird, um eine SELECT auf einer MySQL-Datenbank auszuführen.Eine GET-Zeichenfolge validieren, aber Sonderzeichen verwenden?

Also, was ich im Moment mit einem gehasht zusammen preg_replace, die alle Tags abstreift (unten)

$getstring = preg_replace("/(<\/?)(\w+)([^>]*>)/e","", $getstring); 

Ist das ausreichend oder gibt es ein klaffendes großes Loch ich verpaßt habe?

+0

Möchten Sie die Charaktere eliminieren oder ihnen entkommen? – tHeSiD

+0

Was ist mit 'strip_tags'? http://pt2.php.net/manual/en/function.strip-tags.php – acm

+0

strip_tags !!! vergaß darüber, wie peinlich :) guten Ruf! – Taylor

Antwort

2

htmlspecialchars() werden Sonderzeichen angezeigt werden kann. HTML-Tags werden als normaler Text angezeigt (d. H. Maskiert). Wenn jemand zu viel Zeit hat, können Sie sehen, was er versucht hat. Wenn Sie danach einige Tags filtern möchten, verwenden Sie die vorherigen Versuche, um Sie zu führen.

Wenn Sie einige Formatierungen zulassen möchten, verwenden Sie strip_tags mit einer Whitelist, um einige grundlegende Tags zuzulassen. Alternativ kann eine Auszeichnungssprache wie (hier verwendet) oder ReMarkable nützlich sein, abhängig vom technischen Niveau des Benutzers.

Es klingt, als ob Sie auch anfällig für SQL-Injection sind. Sie sollten wo immer möglich parametrisierte Abfragen verwenden, indem Sie mysqli (die Frage hat das mysql-query-Tag) oder PDO verwenden. PDO::prepare() sollten Sie auf dem Laufenden sein.

+0

Wenn ich richtig verstanden habe, will er Tags behalten und anzeigen, also strip_tags schneidet es nicht ... wie für die Vorbereitung(), guter Punkt! – Catalin

+0

@Catalin: Taylor Regex ersetzt Tags durch die leere Zeichenfolge; Ich sehe nicht, wie das dazu beiträgt, sie zu behalten. –

+0

wahr, nicht aufgepasst, sry – Catalin

Verwandte Themen