Was sind die besten Funktionen zur Bereinigung von PHP-Eingaben?


161

Ich versuche, eine Funktion zu entwickeln, mit der ich alle meine Zeichenfolgen zur Desinfektion durchlaufen kann. Damit die Zeichenfolge, die daraus hervorgeht, für das Einfügen in die Datenbank sicher ist. Aber es gibt so viele Filterfunktionen , dass ich nicht sicher bin, welche ich verwenden soll / brauche.

Bitte helfen Sie mir, die Lücken auszufüllen:

function filterThis($string) {
    $string = mysql_real_escape_string($string);
    $string = htmlentities($string);
    etc...
    return $string;
}

4
Zum Einfügen ist es in Ordnung, nur mit mysql_real_escape_string gegen SQL-Injection zu bereinigen. Wenn Sie die SELECTed-Daten verwenden (in HTML-Ausgabe oder in einer PHP-Formel / Funktion), sollten Sie HTML-
Eigenschaften

Unter stackoverflow.com/questions/60174/… finden Sie eine Antwort zum Reinigen für das Einfügen von Datenbanken (es gibt ein Beispiel für PDO, das andere unten erwähnt haben).
Pat

Antworten:


433

Halt!

Du machst hier einen Fehler. Oh nein, Sie haben die richtigen PHP-Funktionen ausgewählt, um Ihre Daten ein bisschen sicherer zu machen. Das ist gut. Ihr Fehler liegt in der Reihenfolge der Operationen und wie und wo diese Funktionen verwendet werden sollen.

Es ist wichtig, den Unterschied zwischen der Bereinigung und Validierung von Benutzerdaten, dem Entkommen von Daten zur Speicherung und dem Entkommen von Daten zur Präsentation zu verstehen.

Benutzerdaten bereinigen und validieren

Wenn Benutzer Daten übermitteln, müssen Sie sicherstellen, dass sie etwas bereitgestellt haben, das Sie erwarten.

Desinfektion und Filterung

Wenn Sie beispielsweise eine Nummer erwarten, stellen Sie sicher, dass die übermittelten Daten eine Nummer sind . Sie können Benutzerdaten auch in andere Typen umwandeln. Alles, was übermittelt wird, wird anfangs wie eine Zeichenfolge behandelt. Wenn Sie also wissen, dass numerische Daten eine Ganzzahl oder ein Gleitkommawert sind, ist die Bereinigung schnell und problemlos.

Was ist mit Freiform-Textfeldern und Textbereichen? Sie müssen sicherstellen, dass in diesen Feldern nichts Unerwartetes vorhanden ist. Hauptsächlich müssen Sie sicherstellen, dass Felder, die keinen HTML-Inhalt enthalten sollten, kein HTML enthalten. Es gibt zwei Möglichkeiten, wie Sie mit diesem Problem umgehen können.

Zunächst können Sie versuchen , HTML-Eingaben mit zu umgehen htmlspecialchars. Sie sollten htmlentitiesHTML nicht zum Neutralisieren verwenden, da es auch die Codierung von akzentuierten und anderen Zeichen ausführt, von denen es glaubt, dass sie ebenfalls codiert werden müssen.

Zweitens können Sie versuchen , jegliches mögliche HTML zu entfernen . strip_tagsist schnell und einfach, aber auch schlampig. HTML Purifier erledigt viel gründlicher sowohl das Entfernen von HTML als auch das Durchführen einer selektiven Whitelist von Tags und Attributen.

Moderne PHP-Versionen werden mit der Filtererweiterung geliefert , die eine umfassende Möglichkeit bietet, Benutzereingaben zu bereinigen.

Validierung

Es ist nur die Hälfte des Auftrags, sicherzustellen, dass die übermittelten Daten frei von unerwarteten Inhalten sind. Sie müssen auch versuchen, sicherzustellen, dass die übermittelten Daten Werte enthalten, mit denen Sie tatsächlich arbeiten können.

Wenn Sie eine Zahl zwischen 1 und 10 erwarten, müssen Sie diesen Wert überprüfen. Wenn Sie eine dieser neuen ausgefallenen numerischen Eingaben aus der HTML5-Ära mit einem Drehfeld und Schritten verwenden, stellen Sie sicher, dass die übermittelten Daten mit dem Schritt übereinstimmen.

Wenn diese Daten aus einem Dropdown-Menü stammen, stellen Sie sicher, dass der übermittelte Wert im Menü angezeigt wird.

Was ist mit Texteingaben, die andere Anforderungen erfüllen? Beispielsweise sollten Datumseingaben über strtotimeoder die DateTime-Klasse validiert werden . Das angegebene Datum sollte zwischen den erwarteten Bereichen liegen. Was ist mit E-Mail-Adressen? Die zuvor erwähnte Filtererweiterung kann prüfen, ob eine Adresse wohlgeformt ist , obwohl ich ein Fan von bin die is_email Bibliothek .

Gleiches gilt für alle anderen Formularsteuerelemente. Haben Sie Optionsfelder? Validieren Sie anhand der Liste. Kontrollkästchen haben? Validieren Sie anhand der Liste. Haben Sie eine Datei hochgeladen? Stellen Sie sicher, dass die Datei vom erwarteten Typ ist, und behandeln Sie den Dateinamen wie ungefilterte Benutzerdaten.

Jeder moderne Browser verfügt über einen vollständigen Satz integrierter Entwicklertools, sodass jeder Ihr Formular problemlos bearbeiten kann. Ihr Code sollte davon ausgehen, dass der Benutzer alle clientseitigen Einschränkungen für den Formularinhalt vollständig aufgehoben hat !

Escape-Daten zur Speicherung

Nachdem Sie sichergestellt haben, dass Ihre Daten das erwartete Format haben und nur die erwarteten Werte enthalten, müssen Sie sich Sorgen machen, dass diese Daten gespeichert bleiben.

Jeder einzelne Datenspeichermechanismus verfügt über eine bestimmte Methode, um sicherzustellen, dass Daten ordnungsgemäß maskiert und codiert werden. Wenn Sie SQL erstellen, werden Daten in Abfragen über vorbereitete Anweisungen mit Platzhaltern übergeben .

Eine der besseren Möglichkeiten, mit den meisten SQL-Datenbanken in PHP zu arbeiten, ist die PDO-Erweiterung . Es folgt dem üblichen Muster, eine Anweisung vorzubereiten , Variablen an die Anweisung zu binden und dann die Anweisung und die Variablen an den Server zu senden . Wenn Sie noch nie mit PDO gearbeitet haben, finden Sie hier ein ziemlich gutes MySQL-orientiertes Tutorial .

Einige SQL-Datenbanken haben ihre eigenen speziellen Erweiterungen in PHP, einschließlich SQL Server , PostgreSQL und SQLite 3 . Jede dieser Erweiterungen verfügt über eine vorbereitete Anweisungsunterstützung, die auf dieselbe Weise wie PDO vorbereitet, gebunden und ausgeführt wird. Manchmal müssen Sie diese Erweiterungen anstelle von PDO verwenden, um nicht standardmäßige Funktionen oder Verhaltensweisen zu unterstützen.

MySQL hat auch eigene PHP-Erweiterungen. Zwei davon tatsächlich. Sie möchten immer nur das mit dem Namen mysqli verwenden . Die alte "mysql" -Erweiterung ist veraltet und in der modernen Zeit weder sicher noch vernünftig zu verwenden.

Ich persönlich bin kein Fan von Mysqli. Die Art und Weise, wie vorbereitete Anweisungen variabel gebunden werden, ist unflexibel und kann schmerzhaft sein. Verwenden Sie im Zweifelsfall stattdessen PDO.

Wenn Sie keine SQL-Datenbank zum Speichern Ihrer Daten verwenden, überprüfen Sie die Dokumentation der verwendeten Datenbankschnittstelle, um festzustellen, wie Daten sicher durch sie übertragen werden können.

Stellen Sie nach Möglichkeit sicher, dass Ihre Datenbank Ihre Daten in einem geeigneten Format speichert. Speichern Sie Zahlen in numerischen Feldern. Speichern Sie Daten in Datumsfeldern. Speichern Sie Geld in einem Dezimalfeld, nicht in einem Gleitkommafeld. Lesen Sie in der von Ihrer Datenbank bereitgestellten Dokumentation nach, wie verschiedene Datentypen ordnungsgemäß gespeichert werden.

Daten für die Präsentation entziehen

Jedes Mal, wenn Sie Benutzern Daten anzeigen, müssen Sie sicherstellen, dass die Daten sicher maskiert werden, es sei denn, Sie wissen, dass sie nicht maskiert werden sollten.

Wenn Sie HTML ausgeben, sollten Sie fast immer alle Daten übergeben, die ursprünglich vom Benutzer bereitgestellt wurden htmlspecialchars. Tatsächlich sollten Sie dies nur dann nicht tun, wenn Sie wissen, dass der Benutzer HTML bereitgestellt hat und dass Sie wissen, dass es bereits mithilfe einer Whitelist bereinigt wurde.

Manchmal müssen Sie Javascript mit PHP generieren. Javascript hat nicht die gleichen Escape-Regeln wie HTML! Ein sicherer Weg, um vom Benutzer bereitgestellte Werte für Javascript über PHP bereitzustellen, ist durch json_encode.

Und mehr

Die Datenvalidierung weist viel mehr Nuancen auf.

Beispielsweise kann die Zeichensatzcodierung eine große Falle sein . Ihre Anwendung sollte den in " UTF-8 bis zum Ende " beschriebenen Vorgehensweisen folgen . Es gibt hypothetische Angriffe, die auftreten können, wenn Sie Zeichenfolgendaten als falschen Zeichensatz behandeln.

Früher habe ich Browser-Debug-Tools erwähnt. Diese Tools können auch zum Bearbeiten von Cookie-Daten verwendet werden. Cookies sollten als nicht vertrauenswürdige Benutzereingaben behandelt werden .

Datenvalidierung und Escape-Funktion sind nur ein Aspekt der Sicherheit von Webanwendungen. Sie sollten sich mit den Angriffsmethoden für Webanwendungen vertraut machen, damit Sie Schutzmaßnahmen gegen diese aufbauen können.


Stellen Sie bei der Angabe sicher, dass es in der Liste der unterstützten Codierungen aufgeführt ist.
Charles

3
Und verwenden Sie htmlentities überhaupt nicht, ersetzen Sie es durch htmlspecialchars, um nur <>nicht jedes Zeichen in seiner Entität zu ersetzen
Your Common Sense

6
Stellen Sie nur sicher, dass Sie nicht htmlspecialcharszweimal anrufen , da er im Teil "Wenn Benutzer Daten senden" und im Teil "Beim Anzeigen der Daten" davon spricht.
Savageman

2
Upvoted. Die hilfreichste Antwort, die ich aus vielen Fragen und Antworten zu SQL Injection gelesen habe.
Akinuri

Absolut eine Qualitätsantwort mit vielen Erklärungen und Links für zukünftige Benutzer, um mehr Optionen zu erkunden. Ich habe auch eine Eins von mir bekommen ...
James Walker

32

Die effektivste Bereinigung zur Verhinderung der SQL-Injection ist die Parametrisierung mit PDO. Bei Verwendung parametrisierter Abfragen wird die Abfrage von den Daten getrennt, sodass die Gefahr einer SQL-Injection erster Ordnung beseitigt wird.

In Bezug auf das Entfernen von HTML strip_tagsist dies wahrscheinlich die beste Idee zum Entfernen von HTML, da dadurch einfach alles entfernt wird. htmlentitiesmacht, wie es sich anhört, damit es auch funktioniert. Wenn Sie analysieren möchten, welches HTML zugelassen werden soll (dh Sie möchten einige Tags zulassen ), sollten Sie einen ausgereiften vorhandenen Parser wie HTML Purifier verwenden


2
Oh Mann, ich habe diese riesige Textwand geschrieben, nur weil ich niemanden gesehen habe, der HTML Purifier erwähnt hat, und hier hast du mich um 40 Minuten geschlagen. ;)
Charles

3
Sollten Sie HTML nicht nur bei der Ausgabe entfernen? IMO sollten Sie niemals Eingabedaten ändern - Sie wissen nie, wann Sie sie benötigen
Joe Phillips

11

Datenbankeingabe - So verhindern Sie SQL Injection

  1. Stellen Sie sicher, dass beispielsweise Daten vom Typ Ganzzahl gültig sind, indem Sie sicherstellen, dass es sich tatsächlich um eine Ganzzahl handelt
    • Bei Nicht-Zeichenfolgen müssen Sie sicherstellen, dass die Daten tatsächlich vom richtigen Typ sind
    • Bei Zeichenfolgen müssen Sie sicherstellen, dass die Zeichenfolge in der Abfrage in Anführungszeichen gesetzt ist (offensichtlich würde dies sonst nicht einmal funktionieren).
  2. Geben Sie den Wert in die Datenbank ein und vermeiden Sie dabei die SQL-Injection (mysql_real_escape_string oder parametrisierte Abfragen).
  3. Vermeiden Sie beim Abrufen des Werts aus der Datenbank Cross Site Scripting-Angriffe, indem Sie sicherstellen, dass HTML nicht in die Seite eingefügt werden kann (htmlspecialchars).

Sie müssen Benutzereingaben umgehen, bevor Sie sie in die Datenbank einfügen oder aktualisieren. Hier ist ein älterer Weg, dies zu tun. Sie möchten jetzt parametrisierte Abfragen verwenden (wahrscheinlich aus der PDO-Klasse).

$mysql['username'] = mysql_real_escape_string($clean['username']);
$sql = "SELECT * FROM userlist WHERE username = '{$mysql['username']}'";
$result = mysql_query($sql);

Ausgabe aus der Datenbank - So verhindern Sie XSS (Cross Site Scripting)

Verwenden Sie htmlspecialchars()nur dann , wenn Daten aus der Datenbank ausgibt. Gleiches gilt für HTML Purifier. Beispiel:

$html['username'] = htmlspecialchars($clean['username'])

Und zum Schluss ... was Sie angefordert haben

Ich muss darauf hinweisen, dass es wirklich keinen einfachen Weg gibt, dies zu erreichen, wenn Sie PDO-Objekte mit parametrisierten Abfragen verwenden (der richtige Weg, dies zu tun). Aber wenn Sie die alte "MySQL" -Methode verwenden, dann ist dies das, was Sie brauchen würden.

function filterThis($string) {
    return mysql_real_escape_string($string);
}

5

Meine 5 Cent.

Niemand hier versteht, wie es mysql_real_escape_stringfunktioniert. Diese Funktion filtert oder "bereinigt" nichts.
Sie können diese Funktion also nicht als Universalfilter verwenden, der Sie vor der Injektion bewahrt.
Sie können es nur verwenden, wenn Sie verstehen, wie es funktioniert und wo es anwendbar ist.

Ich habe die Antwort auf die sehr ähnliche Frage, die ich bereits geschrieben habe: Sollte ich in PHP beim Senden von Zeichenfolgen an die Datenbank mit htmlspecialchars () auf illegale Zeichen achten oder einen regulären Ausdruck verwenden?
Bitte klicken Sie hier, um die vollständige Erklärung zur datenbankseitigen Sicherheit zu erhalten.

Was die HTML-Eigenschaften betrifft - Charles sagt Ihnen zu Recht, dass Sie diese Funktionen trennen sollen.
Stellen Sie sich vor, Sie fügen Daten ein, die vom Administrator generiert wurden und der HTML posten darf. Ihre Funktion wird es verderben.

Obwohl ich von htmlentities abraten würde. Diese Funktion ist längst überholt. Wenn Sie nur ersetzen möchten <, >und "Zeichen in aus Gründen der HTML - Sicherheit - nutzen Sie die Funktion , die absichtlich zu diesem Zweck entwickelt wurde - eine htmlspecialchars () ein.


1
mysql_real_escape_stringentgeht benötigten Zeichen innerhalb einer Zeichenfolge. Es ist nicht streng zu filtern oder zu bereinigen, aber eine Zeichenfolge in Anführungszeichen zu setzen ist es auch nicht (und jeder tut es, ich habe so gut wie nie eine Frage dazu gesehen). Wenn wir SQL schreiben, wird also nichts bereinigt? Natürlich nicht. Was die SQL-Injection verhindert, ist die Verwendung von mysql_real_escape_string. Auch die beiliegenden Anführungszeichen, aber jeder tut es, und wenn Sie testen, was Sie tun, erhalten Sie einen SQL-Syntaxfehler mit dieser Auslassung. Der wirklich gefährliche Teil wird behandelt mysql_real_escape_string.
Savageman

@ Savageman sorry Kumpel, du verstehst nichts. Sie verstehen nicht, wie mysql_real_escape_string funktioniert. Diese "benötigten Zeichen" sind Anführungszeichen. Weder diese Funktion noch Zitate allein desinfizieren etwas. Diese zwei Dinge arbeiten zusammen nur. Abfragezeichenfolge nur syntaktisch korrekt machen, nicht "vor Injektion sicher". Und welchen Syntaxfehler würde ich nur bekommen WHERE id = 1? ;)
Ihr gesunder Menschenverstand

Versuchen Sie WHERE my_field = two words(ohne Anführungszeichen), den Syntaxfehler zu erhalten. Ihr Beispiel ist schlecht, weil es keine Anführungszeichen benötigt, sondern nur eine numerische Prüfung. Ich habe auch nicht gesagt, dass die Zitate nutzlos sind. Ich sagte, dass jeder sie verwendet, daher ist dies nicht die Ursache für Probleme bei der SQL-Injection.
Savageman

1
@ Savageman so, dass ich sagte: Sie können es nur verwenden, wenn Sie verstehen, wie es funktioniert und wo es anwendbar ist. Sie haben gerade zugegeben, dass mysql_real_escape_string nicht überall anwendbar ist. Wie für everyone use themSie können Codes hier auf SO überprüfen. Viele Leute verwenden keine Anführungszeichen mit Zahlen. Stelle dir das vor. Bitte denken Sie daran, dass ich hier nicht darüber spreche, was Sie gesagt haben und was nicht. Ich erkläre nur grundlegende Sicherheitsregeln für Datenbanken. Du solltest besser lernen als leer streiten. Niemand erwähnte hier Zitate oder Castings, aber m_r_e_s nur, als ob es magisch wäre. Worüber ich spreche
Ihr gesunder Menschenverstand

1
eins auf, sowie @Charles. Als Anfänger war die Datenbankinteraktion ... die Sicherheit für Eingabe und Anzeige, Sonderzeichen und Injektionsprobleme eine sehr steile Lernkurve. Das Lesen Ihres Beitrags und seiner (sowie Ihrer anderen PHP-Antworten auf andere Fragen) hat mir sehr geholfen. Tx für all Ihre Beiträge.
James Walker

2

Zum Einfügen in die Datenbank benötigen Sie lediglich mysql_real_escape_string(oder verwenden parametrisierte Abfragen). Im Allgemeinen möchten Sie Daten vor dem Speichern nicht ändern. Dies würde passieren, wenn Sie sie verwenden htmlentities. Das würde später zu einem verstümmelten Durcheinander führen, wenn Sie es htmlentitieserneut durchlaufen , um es irgendwo auf einer Webseite anzuzeigen.

Verwenden htmlentitiesSie diese Option, wenn Sie die Daten irgendwo auf einer Webseite anzeigen.

Wenn Sie übermittelte Daten irgendwo in einer E-Mail senden, z. B. mit einem Kontaktformular, müssen Sie die Zeilenumbrüche von allen Daten entfernen, die in der Kopfzeile verwendet werden (z. B. Von: Name und E-Mail-Adresse, Unterabschnitt usw.) )

$input = preg_replace('/\s+/', ' ', $input);

Wenn Sie dies nicht tun, ist es nur eine Frage der Zeit, bis die Spam-Bots Ihr Formular finden und es missbrauchen. Ich habe es auf die harte Tour gelernt.



2

Dies hängt von der Art der Daten ab, die Sie verwenden. Das allgemein beste zu verwenden wäremysqli_real_escape_string Methode ist, aber Sie wissen beispielsweise, dass kein HTML-Inhalt vorhanden ist. Die Verwendung von strip_tags erhöht die Sicherheit.

Sie können auch Zeichen entfernen, von denen Sie wissen, dass sie nicht zulässig sind.


1

Ich empfehle immer, ein kleines Validierungspaket wie GUMP zu verwenden: https://github.com/Wixel/GUMP

Erstellen Sie alle Ihre Grundfunktionen rund um eine Bibliothek wie diese und es ist fast unmöglich, die Hygiene zu vergessen. "mysql_real_escape_string" ist nicht die beste Alternative für eine gute Filterung (wie "Your Common Sense" erklärt) - und wenn Sie vergessen, es nur einmal zu verwenden, kann Ihr gesamtes System durch Injektionen und andere böse Angriffe angegriffen werden.


1

Für alle, die hier über mysql_real_escape_string sprechen und sich darauf verlassen, müssen Sie beachten, dass diese Funktion auf PHP5 veraltet war und auf PHP7 nicht mehr existiert.

IMHO ist der beste Weg, um diese Aufgabe zu erfüllen, die Verwendung parametrisierter Abfragen mithilfe von PDO für die Interaktion mit der Datenbank. Überprüfen Sie dies: https://phpdelusions.net/pdo_examples/select

Verwenden Sie immer Filter, um Benutzereingaben zu verarbeiten. Siehe http://php.net/manual/es/function.filter-input.php


Dies beantwortet die Frage nicht wirklich. Ändern Sie Ihre Antwort, um eine Lösung einzuschließen.
Kris

Hoffe du magst es!
Kuntur

Ich mache. Gute Antwort!
Kris

Ich schlage vor, zu beachten, dass in PHP 7 mysqli_real_escape_string()verfügbar ist.
Chris

Hallo Chris, die hier vorgestellten Lösungen bezogen sich auf mysql_real_escape_string. Ich bemerkte, wer von nun an las, dass es auf PHP7 nicht mehr existiert, und schlug eine Alternative vor, die PDO (und Filter) und nicht mysqli verwendet. Fühlen Sie sich frei, eine Notiz hinzuzufügen, in der eine Lösung anhand Ihrer Vorschläge erläutert wird. Grüße
Kuntur

0

Sie verwenden mysql_real_escape_string () in einem Code ähnlich dem folgenden.

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
  mysql_real_escape_string($user),
  mysql_real_escape_string($password)
);

Wie in der Dokumentation angegeben, werden Sonderzeichen in der als Argument übergebenen Zeichenfolge unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung ausgeblendet , damit sie sicher in mysql_query () abgelegt werden können . Die Dokumentation fügt hinzu:

Wenn Binärdaten eingefügt werden sollen, muss diese Funktion verwendet werden.

Mit htmlentities () werden einige Zeichen in Entitäten konvertiert, wenn Sie eine Zeichenfolge in HTML-Inhalten ausgeben.


0

Dies ist eine der Arten, wie ich derzeit übe,

  1. Implantieren Sie csrf und Salt-Versuchstoken zusammen mit der vom Benutzer zu stellenden Anfrage und validieren Sie sie alle zusammen aus der Anfrage. Siehe hier
  2. Stellen Sie sicher, dass Sie sich nicht zu sehr auf die clientseitigen Cookies verlassen, und üben Sie die Verwendung serverseitiger Sitzungen
  3. Stellen Sie beim Analysieren von Daten sicher, dass nur der Datentyp und die Übertragungsmethode (z. B. POST und GET) akzeptiert werden.
  4. Stellen Sie sicher, dass Sie SSL für Ihre WebApp / App verwenden
  5. Stellen Sie sicher, dass Sie auch eine Zeitbasis-Sitzungsanforderung generieren, um die Spam-Anforderung absichtlich einzuschränken.
  6. Wenn Daten auf den Server analysiert werden, stellen Sie sicher, dass die Anforderung in der gewünschten Datenmethode wie json, html usw. überprüft wird. Fahren Sie dann fort
  7. Escape alle illegalen Attribute aus der Eingabe mit Escape-Typ ... wie Realescapestring.
  8. Überprüfen Sie anschließend nur das vom Benutzer gewünschte saubere Format des Datentyps.
    Beispiel:
    - E-Mail: Überprüfen Sie, ob die Eingabe im gültigen E-Mail-Format vorliegt.
    - Text / Zeichenfolge : Überprüfen Sie, ob nur die Eingabe das Textformat (Zeichenfolge) ist.
    - Nummer: Überprüfen Sie, ob nur das Zahlenformat zulässig ist.
    - usw. Pelase verweist auf die Bibliothek zur Validierung der PHP-Eingabe vom PHP-Portal.
    - Nach der Validierung verwenden Sie bitte die vorbereitete SQL-Anweisung / PDO.
    - Wenn Sie fertig sind, stellen Sie sicher, dass Sie die Verbindung beenden und beenden.
    - Vergessen Sie nicht, den Ausgabewert zu löschen, sobald Sie fertig sind.

Das ist alles, was ich glaube, genug für die Grundsek. Es sollte alle größeren Angriffe von Hackern verhindern.

Aus Gründen der serverseitigen Sicherheit möchten Sie möglicherweise in Ihrem Apache / htaccess die Zugriffsbeschränkung und die Roboterprävention sowie die Routingprävention festlegen. Neben der Sek. Des Systems auf der Serverseite gibt es viel zu tun für die serverseitige Sicherheit.

Sie können lernen und eine Kopie der Sek von der htaccess-Apache-Sek-Ebene erhalten (allgemeine Rpaktiken).


0
function sanitize($string,$dbmin,$dbmax){
$string = preg_replace('#[^a-z0-9]#i', '', $string); //useful for strict cleanse, alphanumeric here
$string = mysqli_real_escape_string($con, $string); //get ready for db
if(strlen($string) > $dbmax || strlen($string) < $dbmin){
    echo "reject_this"; exit();
    }
return $string;
}

0

was ist damit?

$string = htmlspecialchars(strip_tags($_POST['example']));

oder dieses

$string = htmlentities($_POST['example'], ENT_QUOTES, 'UTF-8');
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.