Ich lerne PHP auf meinem eigenen, und ich habe bewusst die strip_tags () -Funktion werden. Ist dies der einzige Weg, die Sicherheit zu erhöhen?

StackOverflow https://stackoverflow.com/questions/2258808

  •  20-09-2019
  •  | 
  •  

Frage

Ich bin neu in PHP und ich folge ein Tutorial hier: Link-

Es ist ziemlich beängstigend, dass ein Benutzer PHP-Code in einem Eingabe schreiben kann und Schraube im Grunde Ihre Website, nicht wahr?

Nun, jetzt bin ich ein bisschen paranoid und ich möchte lieber Security Best Practices auf Anhieb als Versuch lernen, sie in zu stopfen, wenn ich in mir ein paar Gewohnheiten haben.

Da ich ganz neu in PHP bin (wörtlich nahm es vor zwei Tagen), kann ich einfach so ziemlich alles lernen, ohne verwirrt zu werden.

Was andere Art und Weise kann ich verhindern, dass Spielereien auf meiner Website? : D

War es hilfreich?

Lösung

Es gibt mehr Dinge im Auge zu behalten, wenn eine PHP-Anwendung entwickeln, strip_tags() hilft nur mit einem von denen. Eigentlich strip_tags(), während wirksam, vielleicht noch mehr als nötig. Umwandlung möglicherweise gefährliche Zeichen mit htmlspecialchars() sollte auch preferrable sein, abhängig von der Situation

es in der Regel läuft alles auf zwei einfache Regeln:. Filter alle Eingaben, die gesamte Ausgabe entkommen Jetzt müssen Sie verstehen, was genau Eingabe und Ausgabe darstellt.

Die Ausgabe ist einfach, alles, was Ihre Anwendung an den Browser sendet ausgegeben, so Verwendung htmlspecialchars() oder jede andere entweichende Funktion jedes Mal, wenn Ausgangsdaten, die Sie nicht selbst geschrieben haben.

Die Eingabe erfolgt alle Daten in Ihrem PHP-Code fest einprogrammiert: Dinge aus einem Formular über POST kommen, aus einem Abfrage-String über GET, von Cookies, alle, die muß in der am besten geeigneten Weise gefiltert werden, je auf Ihre Bedürfnisse. Auch Daten aus einer Datenbank kommen, sollten potentiell gefährlich angesehen werden; vor allem auf gemeinsamen Server, den Sie nie wissen, ob die Datenbank an anderer Stelle in einer Weise beeinträchtigt wurde, dass Ihre App beeinflussen könnten.

Es gibt verschiedene Möglichkeiten, um Filterdaten: weiße Listen nur ausgewählte Werte zu ermöglichen, Validierung anhand von expcted Eingabeformat und so weiter. Eine Sache, die ich nie vorschlagen, ist versuchen, die Daten zur Festsetzung Sie von den Benutzern erhalten. Haben sie nach deinen Regeln spielen, wenn Sie nicht bekommen, was Sie erwarten, lehnen die Anfrage anstatt zu versuchen, es zu bereinigen

Besondere Aufmerksamkeit, wenn Sie mit einer Datenbank umgehen müssen, um SQL-Injektionen zu bezahlen: diese Art von Angriff verlässt sich auf Sie nicht richtig Abfrage-Strings Konstruieren Sie an die Datenbank senden, so dass der Angreifer sie schmieden kann versuchen, schädliche Befehl auszuführen . Sie sollten immer eine Flucht Funktion wie mysql_real_escape_string() oder besser, verwenden Sie vorbereitete Anweisungen mit die mysqli Erweiterung oder mit PDO .

Es gibt mehr zu diesem Thema zu sagen, aber diese Punkte sollten Sie begonnen erhalten.

HTH

Bearbeiten : zu klären, durch „Filtern Eingang“ meine ich entscheiden, was gut und was schlecht ist, nicht Eingangsdaten in irgendeiner Weise verändern. Wie ich sagte, ich würde nie von Benutzerdaten, wenn sie die Ausgabe an den Browser.

ändern

Andere Tipps

strip_tags ist nicht das Beste, was wirklich zu verwenden, ist es nicht in allen Fällen schützt.

HTML Entschlacken: http://htmlpurifier.org/

Ist eine wirklich gute Option für eingehende Datenverarbeitung, es aber selbst noch sorgt nicht für alle Anwendungsfälle -. Aber es ist auf jeden Fall ein guter Ausgangspunkt

Ich muss sagen, dass die Tutorial erwähnt ist ein wenig irreführend, über Sicherheit :

  

Es ist wichtig zu beachten, dass Sie nie mit dem $ _GET direkt arbeiten wollen und $ _POST Werte. Immer wenn ihr Wert auf eine lokale Variable senden, und die Arbeit mit ihm dort. Es gibt verschiedene Auswirkungen auf die Sicherheit mit den Werten beteiligt, wenn Sie direkt Zugriff (oder   Ausgabe) $ _GET & $ _POST.

Das ist Unsinn. Wert auf eine lokale Variable zu kopieren ist kein sicherer als die $ _GET oder $ _POST Variablen direkt verwendet wird.

In der Tat gibt es nichts von Natur aus unsicher über alle Daten. Was zählt, ist , was Sie damit machen . Es gibt durchaus legitime Gründe, warum Sie einen $ _POST Variable, die ; rm -rf / enthält haben könnte. Das ist gut für die auf einer HTML-Seite ausgegeben wird oder in einer Datenbank gespeichert werden, zum Beispiel.

Das einzige Mal, es unsicher ist, wenn Sie einen Befehl wie system oder exec verwenden. Und das ist die Zeit, die Sie sorgen müssen, was Variablen Sie verwenden. In diesem Fall würden Sie wahrscheinlich so etwas wie ein verwenden, die weiße Liste, oder zumindest Ihre Werte durch escapeshellarg ausgeführt werden.

ähnlich ist es mit Anfragen an Datenbanken zu senden, das Senden von HTML-Browser, und so weiter. Entfliehen Sie das Datum direkt, bevor Sie es woanders senden, mit dem entsprechenden entweichende Methode für das Ziel.

strip_tags entfernt jedes Stück html. anspruchsvollere Lösungen auf Whitelisting (das heißt so dass bestimmte HTML-Tags) basieren. eine gute Bibliothek ist Whitelisting htmlpurifyer http://htmlpurifier.org/

und natürlich auch auf der Datenbank-Seite der Dinge verwenden Funktionen wie mysql_real_escape_string oder pg_escape_string

Nun, wahrscheinlich bin ich falsch, aber ... In der gesamten Literatur, die ich gelesen habe, die Leute sagen, es ist viel besser zu Einsatz htmlspellchars.

Auch vielmehr notwendig, um Gusseingabedaten. (Für int zum Beispiel, wenn Sie sicher, dass es der Benutzer-ID).

Nun, vorher, wenn Sie mit Datenbank -. Verwendung mysql_real_escape_string statt mysql_escape_string SQL-Injektionen zu verhindern (in einigen alten Büchern es geschrieben ist mysql_escape_string noch)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top