Eine Erklärung, wie man SQL-Injection in PHP verhindert
Das Verhindern von SQL-Injection ist das beste Programm zum Schreiben auf unserer täglichen PHP-Entwicklungswebsite, da es meiner Meinung nach viele junge PHP-Programmierer nicht zum Verhindern von SQL-Injection geschrieben hat Deshalb werden wir heute darüber sprechen, wie man PHP verwendet, um SQL-Injection zu verhindern.
Ursache
Einerseits habe ich kein Bewusstsein dafür, dass einige Daten nicht streng überprüft und dann direkt zusammengefügt wurden in SQL zur Abfrage. Dies führt zu Schwachstellen wie:
$id = $_GET['id']; $sql = "SELECT name FROM users WHERE id = $id";
Da es keine Datentyp-Überprüfung für $_GET['id'] gibt, kann der Injektor jede Art von Daten übermitteln, wie zum Beispiel „ und 1= 1 oder " und andere unsichere Daten. Es ist sicherer, wenn Sie es wie folgt schreiben.
$id = intval($_GET['id']); $sql = "SELECT name FROM users WHERE id = $id";
Konvertieren Sie die ID in den Typ „int“, um unsichere Dinge zu entfernen.
Daten überprüfen
Der erste Schritt zur Verhinderung einer Injektion besteht darin, die Daten zu überprüfen, die gemäß den entsprechenden Vorschriften streng überprüft werden können Typ. Beispielsweise kann der Typ int direkt über intval konvertiert werden:
$id =intval( $_GET['id']);
Zeichen sind komplizierter zu verarbeiten. Formatieren Sie zunächst die Ausgabe über die Sprintf-Funktion, um sicherzustellen, dass es sich um eine Zeichenfolge handelt. Verwenden Sie dann einige Sicherheitsfunktionen, um einige illegale Zeichen zu entfernen, wie zum Beispiel:
$str = addslashes(sprintf("%s",$str)); //也可以用 mysqli_real_escape_string 函数替代addslashes
Dies wird in Zukunft sicherer sein. Natürlich können Sie die Länge der Zeichenfolge weiter bestimmen, um „Pufferüberlaufangriffe“ zu verhindern, wie zum Beispiel:
$str = addslashes(sprintf("%s",$str)); $str = substr($str,0,40); //最大长度为40
Parameterisierte Bindung
Die parametrisierte Bindung ist ein weiteres Hindernis zur Verhinderung der SQL-Injection. Sowohl PHP MySQLi als auch PDO bieten diese Funktionalität. Beispielsweise kann MySQLi wie folgt abfragen:
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world'); $stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)"); $code = 'DEU'; $language = 'Bavarian'; $official = "F"; $percent = 11.2; $stmt->bind_param('sssd', $code, $language, $official, $percent);
PDO ist noch praktischer, wie zum Beispiel:
/* Execute a prepared statement by passing an array of values */ $sql = 'SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'; $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $sth->execute(array(':calories' => 150, ':colour' => 'red')); $red = $sth->fetchAll(); $sth->execute(array(':calories' => 175, ':colour' => 'yellow')); $yellow = $sth->fetchAll();
Die meisten von uns verwenden das PHP-Framework zum Programmieren, daher ist es am besten SQL selbst nicht buchstabieren. Abfrage gemäß der vom Framework vorgegebenen Parameterbindung . Wenn Sie auf komplexere SQL-Anweisungen stoßen, müssen Sie bei der eigenen Schreibweise auf ein strenges Urteilsvermögen achten. Sie können auch selbst eine vorbereitete Anweisung schreiben, ohne PDO oder MySQLi zu verwenden, z. B. die Abfrageanweisung „wordprss“. Es ist ersichtlich, dass sie ebenfalls einer strengen Typüberprüfung unterzogen wurde.
function prepare( $query, $args ) { if ( is_null( $query ) ) return; // This is not meant to be foolproof -- but it will catch obviously incorrect usage. if ( strpos( $query, '%' ) === false ) { _doing_it_wrong( 'wpdb::prepare' , sprintf ( ( 'The query argument of %s must have a placeholder.' ), 'wpdb::prepare()' ), '3.9' ); } $args = func_get_args(); array_shift( $args ); // If args were passed as an array (as in vsprintf), move them up if ( isset( $args[ 0] ) && is_array( $args[0]) ) $args = $args [0]; $query = str_replace( "'%s'", '%s' , $query ); // in case someone mistakenly already singlequoted it $query = str_replace( '"%s"', '%s' , $query ); // doublequote unquoting $query = preg_replace( '|(?<!%)%f|' , '%F' , $query ); // Force floats to be locale unaware $query = preg_replace( '|(?<!%)%s|', "'%s'" , $query ); // quote the strings, avoiding escaped strings like %%s array_walk( $args, array( $this, 'escape_by_ref' ) ); return @ vsprintf( $query, $args ); }
Zusammenfassung
Sicherheit ist auch sehr wichtig, die Grundkompetenzen einer Person sind das Projekt voller Schlupflöcher, und die Skalierbarkeit spielt keine Rolle, wie gut die Wartbarkeit ist. Schenken Sie in normalen Zeiten mehr Aufmerksamkeit, etablieren Sie ein Sicherheitsbewusstsein und entwickeln Sie eine Gewohnheit. Natürlich wird eine gewisse grundlegende Sicherheit nicht die Zeit des Codierens in Anspruch nehmen. Wenn Sie diese Gewohnheit entwickeln, können Sie es auch dann mit hoher Qualität erledigen, wenn das Projekt dringend ist und die Zeit knapp ist. Warten Sie nicht, bis alle Dinge, für die Sie in Zukunft verantwortlich sind, einschließlich der Datenbank, weggenommen sind und Verluste verursacht wurden, bevor Sie es ernst nehmen. gegenseitige Ermutigung!
Verwandte Artikel:
Ausführliche Erklärung, wie man SQL-Injection in PHP verhindert
Einführung in die Funktion von PHP, um SQL-Injection zu verhindern
Das obige ist der detaillierte Inhalt vonEine Erklärung, wie man SQL-Injection in PHP verhindert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
