Mehr Sicherheit in PHP mit strip_tags()

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Werbung

Jetzt auf elektrisches Fahren umstellen, Umwelt schonen und 1.500km kostenlosen Strom von Tesla bekommen. https://ts.la/carsten15473.

ObeyTheSyntax

Mitglied
11 Dezember 2013
41
5
8
21
Straubing
Hi,

ich habe gesehen, dass in vielen Skripten mit der superglobalen Variable $_GET gearbeitet, die Sicherheit dabei aber vernachlässigt wird.
Jeder hat Zugriff auf Parameter in der URL und kann sie beliebig verändern. Dabei sollte man aber auch bedenken, dass nicht jeder gute Absichten verfolgt, das heißt man kann das Ganze für z. B. einen JavaScript-Angriff benutzen.

Dem kann man aber einfach entgegenwirken, indem man die Funktion strip_tags() verwendet. Sie entfernt HTML-Tags, sodass nur der eigentliche Inhalt der Tags bei der Ausgabe erscheint.

Beispiel:

PHP:
$variable = strip_tags($_GET["variable"]);
anstatt

PHP:
$variable = $_GET["variable"]);

Hier erfahrt ihr mehr über strip_tags():
http://php.net/manual/de/function.strip-tags.php

Wie gesagt, ein kleiner Arbeitsaufwand für viel mehr Sicherheit ;)
 
Zuletzt bearbeitet:
B

bdt600

Guest
Eigentlich wollte ich in diesem Forum ja nichts mehr schreiben, aber so einen Haufen Blödsinn kann ich einfach nicht stehen lassen!!!
Das
PHP:
if($_POST["variable"] == ...)
stellt keinerlei Gefahr dar und wird durch
PHP:
if(strip_tags($_POST["variable"]) == ...)
in keinster Weise besser! Da wird ein Vergleich zweier Werte durchgeführt, da kann in $_POST["variable"] drin stehen was will, da passiert absolut nix!!!
Für eine bessere Übersichtlichkeit würde ich empfehlen, würde ich die Nutzereingabe als Variable definieren und diese Variable dann in die if-Condition einbauen.
Auch das ist absoluter Quatsch! Es spricht absolut nichts gegen
PHP:
if (isset($_POST["variable"]) && $_POST["variable"] == "blub")
Wo lernt man so ein gefährliches Halbwissen?!?!?!?
 

ObeyTheSyntax

Mitglied
11 Dezember 2013
41
5
8
21
Straubing
Eigentlich wollte ich in diesem Forum ja nichts mehr schreiben, aber so einen Haufen Blödsinn kann ich einfach nicht stehen lassen!!!
Das
PHP:
if($_POST["variable"] == ...)
stellt keinerlei Gefahr dar und wird durch
PHP:
if(strip_tags($_POST["variable"]) == ...)
in keinster Weise besser! Da wird ein Vergleich zweier Werte durchgeführt, da kann in $_POST["variable"] drin stehen was will, da passiert absolut nix!!!
In $_POST["variable"] kann nicht drinstehen was will, weil nur ein paar Zeichen für eine SQL Injection notwendig sind, falls denn die If-Condition damit in Verbindung steht - wenn man auch in diesem Fall mit strip_tags() nicht viel erreichen wird, weil die Funktion eher bei Angriffen per JavaScript hilfreich ist.

Auch das ist absoluter Quatsch! Es spricht absolut nichts gegen
PHP:
if (isset($_POST["variable"]) && $_POST["variable"] == "blub")
Hab ich auch nicht gesagt ^^
 
B

bdt600

Guest
Dein Prinzip ist aber falsch. Und bevor ich z.B. bei einem Login den Wert durch strip_tags jage, würde ich dann doch wohl eher sowas wie mysqli_real_escape_string nehmen

Du wechselt immer hin und her! Worum soll es gehen, umdie Ausgabe von Werten oder das Speichern in einer DB. Du würfelst das völlig durcheinander!
 
B

bdt600

Guest
Da kann auch nichts passieren, so wie du es am Anfang geschrieben hast!!!! Es kommt doch ganz darauf an, was du mit dem Wert machen willst und dementsprechend muss das Script damit umgehen. Deine pauschale Ausage am Anfang ist deshalb einfach Quatsch!
 

scbawik

Senior HTML'ler
14 Juli 2011
2.542
448
83
strip_tags macht erst Sinn, wenn man die Benutzereingaben ausgeben will. Außerdem birgt HTML für die PHP-Anwendung keine Gefahr, nur für den Benutzer der es angezeigt bekommt:
?input=%3Ca%20href=%22http://www.html.de/%22%3Eein%20gefährlicher%20link%3C/a%3E
PHP:
<?php echo $_GET['input'] ?>
würde dem Benutzer '<a href="http://www.html.de/">ein gefährlicher link</a>' anzeigen.
mit
PHP:
<?php echo strip_tags($_GET['input']) ?>
nur noch 'ein gefährlicher link'.
Eine SQL-Injection ist damit aber immer noch möglich
?user_name=%22%20OR%201=1%20OR%20%22
PHP:
<?php mysql_query('SELECT * FROM user WHERE user_name="'.strip_tags($_GET['user_name']).'" AND password="'.strip_tags($_GET['password']).'"'); ?>
würde zu
'SELECT * FROM user WHERE user_name="" OR 1=1 OR "" AND password=""'

Ansonsten hat @bdt600 recht, ein
PHP:
if($_GET['user_name'] == 'Benutzername')
birgt keine Gefahr.
 

Dominic28

Mitglied
18 August 2012
173
8
18
Also ich denke das Thema ist für diejenigen, die dieses Tutorial irgendwann mal per Google finden, ziemlich verwirrend.
Inhalte die man in der Datenbank speichert kann man gerne durch strip_tags jagen um Javascript beim späteren Auslesen zu vermeiden; Für einfache Vergleiche oder Überprüfungen ist dies aber, wie schon gesagt, nicht nötig.

Vielleicht solltest du das Thema nochmal überarbeiten...