Heim Backend-Entwicklung PHP-Tutorial Eine Erklärung, wie man SQL-Injection in PHP verhindert

Eine Erklärung, wie man SQL-Injection in PHP verhindert

Mar 01, 2018 am 09:58 AM
php 方法 讲解

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";
Nach dem Login kopieren

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";
Nach dem Login kopieren

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']);
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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);
Nach dem Login kopieren

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&#39;; $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(&#39;:calories&#39; => 150, &#39;:colour&#39; => &#39;red&#39;));
$red = $sth->fetchAll();
$sth->execute(array(&#39;:calories&#39; => 175, &#39;:colour&#39; => &#39;yellow&#39;));
$yellow = $sth->fetchAll();
Nach dem Login kopieren

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, &#39;%&#39; ) === false ) {
         _doing_it_wrong( &#39;wpdb::prepare&#39; , 
         sprintf ( ( &#39;The query argument of %s
                 must have a placeholder.&#39; ), &#39;wpdb::prepare()&#39; ), &#39;3.9&#39; );
   }
    $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( "&#39;%s&#39;", &#39;%s&#39; , $query ); 
        // in case someone mistakenly already singlequoted it
    $query = str_replace( &#39;"%s"&#39;, &#39;%s&#39; , $query ); 
        // doublequote unquoting
    $query = preg_replace( &#39;|(?<!%)%f|&#39; , &#39;%F&#39; , $query ); 
        // Force floats to be locale unaware
    $query = preg_replace( &#39;|(?<!%)%s|&#39;, "&#39;%s&#39;" , $query ); 
        // quote the strings, avoiding escaped strings like %%s
    array_walk( $args, array( $this, &#39;escape_by_ref&#39; ) );
    return @ vsprintf( $query, $args );
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

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.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

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

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

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

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

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.

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

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

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

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

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

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 PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

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.

See all articles