Inhaltsverzeichnis
PHP中该怎样防止SQL注入?,php该怎样sql注入
 问题描述:
 最佳回答(来自Theo):
 PDO
 解析
PHP中怎防止SQL注入
PHP中该怎防止SQL注入
Heim Backend-Entwicklung PHP-Tutorial PHP中该怎样防止SQL注入?,php该怎样sql注入_PHP教程

PHP中该怎样防止SQL注入?,php该怎样sql注入_PHP教程

Jul 13, 2016 am 10:15 AM
sql注入

PHP中该怎样防止SQL注入?,php该怎样sql注入

 问题描述:

  如果用户输入的数据在未经处理的情况下插入到一条SQL查询语句,那么应用将很可能遭受到SQL注入攻击,正如下面的例子:

1 2 3 $unsafe_variable = $_POST['user_input'];   mysql_query("INSERT INTO `table` (`column`) VALUES ('" . $unsafe_variable . "')");

  因为用户的输入可能是这样的:

1 value'); DROP TABLE table;--

  那么SQL查询将变成如下:

1 INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')

  应该采取哪些有效的方法来防止SQL注入?

 最佳回答(来自Theo):

  使用预处理语句和参数化查询。预处理语句和参数分别发送到数据库服务器进行解析,参数将会被当作普通字符处理。这种方式使得攻击者无法注入恶意的SQL。 你有两种选择来实现该方法:

  1、使用PDO:

1 2 3 4 5 6 7 $stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');   $stmt->execute(array('name' => $name));   foreach ($stmt as $row) {     // do something with $row }

  2、使用mysqli:

1 2 3 4 5 6 7 8 9 $stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name);   $stmt->execute();   $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) {     // do something with $row }

 PDO

  注意,在默认情况使用PDO并没有让MySQL数据库执行真正的预处理语句(原因见下文)。为了解决这个问题,你应该禁止PDO模拟预处理语句。一个正确使用PDO创建数据库连接的例子如下:

1 2 3 4 $dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');   $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  在上面的例子中,报错模式(ATTR_ERRMODE)并不是必须的,但建议加上它。这样,当发生致命错误(Fatal Error)时,脚本就不会停止运行,而是给了程序员一个捕获PDOExceptions的机会,以便对错误进行妥善处理。 然而,第一个setAttribute()调用是必须的,它禁止PDO模拟预处理语句,而使用真正的预处理语句,即有MySQL执行预处理语句。这能确保语句和参数在发送给MySQL之前没有被PHP处理过,这将使得攻击者无法注入恶意SQL。了解原因,可参考这篇博文:PDO防注入原理分析以及使用PDO的注意事项。 注意在老版本的PHP(

 解析

  当你将SQL语句发送给数据库服务器进行预处理和解析时发生了什么?通过指定占位符(一个?或者一个上面例子中命名的 :name),告诉数据库引擎你想在哪里进行过滤。当你调用execute的时候,预处理语句将会与你指定的参数值结合。 关键点就在这里:参数的值是和经过解析的SQL语句结合到一起,而不是SQL字符串。SQL注入是通过触发脚本在构造SQL语句时包含恶意的字符串。所以,通过将SQL语句和参数分开,你防止了SQL注入的风险。任何你发送的参数的值都将被当作普通字符串,而不会被数据库服务器解析。回到上面的例子,如果$name变量的值为 ’Sarah’; DELETE FROM employees ,那么实际的查询将是在 employees 中查找 name 字段值为 ’Sarah’; DELETE FROM employees 的记录。 另一个使用预处理语句的好处是:如果你在同一次数据库连接会话中执行同样的语句许多次,它将只被解析一次,这可以提升一点执行速度。 如果你想问插入该如何做,请看下面这个例子(使用PDO):

1 2 3 $preparedStatement = $db->prepare('INSERT INTO table (column) VALUES (:column)');   $preparedStatement->execute(array('column' => $unsafeValue));

  原文链接: StackOverflow   翻译: 伯乐在线 - rokety

PHP中怎防止SQL注入

我把问题和赞同最多的答题翻译了下来。提问:如果用户的输入能直接插入到SQL语句中,那么这个应用就易收到SQL注入的攻击,举个例子:$unsafe_variable = $_POST['user_input']; mysqli_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')");用户可以输入诸如 : value'); DROP TABLE table;-- ,SQL语句就变成这样了:INSERT INTO table (column) VALUES('value'); DROP TABLE table;--')(译者注:这样做的结果就是把table表给删掉了) 我们可以做什么去阻止这种情况呢?回答:使用prepared statements(预处理语句)和参数化的查询。这些SQL语句被发送到数据库服务器,它的参数全都会被单独解析。使用这种方式,攻击者想注入恶意的SQL是不可能的。要实现这个主要有两种方式:1. 使用 PDO:$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(array(':name' => $name)); foreach ($stmt as $row) { // do something with $row }2. 使用 Mysqli:$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // do something with $row }PDO需要注意的是使用PDO去访问MySQL数据库时,真正的prepared statements默认情况下是不使用的。为了解决这个问题,你需要禁用模拟的prepared statements。下面是使用PDO创建一个连接的例子:$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass'); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);上面的例子中,错误报告模式并不是强制和必须的,但建议你还是添加它。通过这种方式,脚本在出问题的时候不会被一个致命错误终止,而是抛出PDO Exceptions,这就给了开发者机会去捕获这个错误。然而第一行的 setAttribute() 是强制性的,它使得PDO禁用模拟的prepared......余下全文>>
 

PHP中该怎防止SQL注入

比较有效的方式,放入到公共的配置文件中。360safe.php
Error number: [$errno],error on line $errline in $errfile
"; die();}set_error_handler("customError",E_ERROR);$getfilter="'|(and|or)\\b.+?(>|||>
 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/904705.htmlTechArticlePHP中该怎样防止SQL注入?,php该怎样sql注入 问题描述: 如果用户输入的数据在未经处理的情况下插入到一条SQL查询语句,那么应用将很可...
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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

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)

Nginx-Grundkenntnisse zur Sicherheit: Verhindern von SQL-Injection-Angriffen Nginx-Grundkenntnisse zur Sicherheit: Verhindern von SQL-Injection-Angriffen Jun 10, 2023 pm 12:31 PM

Nginx ist ein schneller, leistungsstarker und skalierbarer Webserver, und seine Sicherheit ist ein Problem, das bei der Entwicklung von Webanwendungen nicht ignoriert werden darf. Insbesondere SQL-Injection-Angriffe, die Webanwendungen großen Schaden zufügen können. In diesem Artikel besprechen wir, wie man mit Nginx SQL-Injection-Angriffe verhindert und so die Sicherheit von Webanwendungen schützt. Was ist ein SQL-Injection-Angriff? Der SQL-Injection-Angriff ist eine Angriffsmethode, die Schwachstellen in Webanwendungen ausnutzt. Angreifer können Schadcode in Webanwendungen einschleusen

So verwenden Sie exp für die SQL-Fehlerinjektion So verwenden Sie exp für die SQL-Fehlerinjektion May 12, 2023 am 10:16 AM

0x01 Vorwort Übersicht Der Herausgeber hat einen weiteren doppelten Datenüberlauf in MySQL entdeckt. Wenn wir die Funktionen in MySQL erhalten, interessiert sich der Editor mehr für die mathematischen Funktionen. Sie sollten auch einige Datentypen zum Speichern von Werten enthalten. Daher führte der Editor einen Test durch, um festzustellen, welche Funktionen Überlauffehler verursachen würden. Dann stellte der Editor fest, dass die Funktion exp() einen Überlauffehler verursacht, wenn ein Wert größer als 709 übergeben wird. mysql>selectexp(709);+---------+|exp(709)|+---------- - -----------+|8.218407461554972

PHP-Programmiertipps: So verhindern Sie SQL-Injection-Angriffe PHP-Programmiertipps: So verhindern Sie SQL-Injection-Angriffe Aug 17, 2023 pm 01:49 PM

PHP-Programmiertipps: So verhindern Sie SQL-Injection-Angriffe Sicherheit ist bei der Durchführung von Datenbankoperationen von entscheidender Bedeutung. SQL-Injection-Angriffe sind ein häufiger Netzwerkangriff, der die unsachgemäße Verarbeitung von Benutzereingaben durch eine Anwendung ausnutzt, was dazu führt, dass bösartiger SQL-Code eingefügt und ausgeführt wird. Um unsere Anwendung vor SQL-Injection-Angriffen zu schützen, müssen wir einige Vorsichtsmaßnahmen treffen. Verwenden Sie parametrisierte Abfragen. Parametrisierte Abfragen sind die einfachste und effektivste Möglichkeit, SQL-Injection-Angriffe zu verhindern. Es funktioniert durch den Vergleich vom Benutzer eingegebener Werte mit einer SQL-Abfrage

Erkennung und Reparatur von PHP-SQL-Injection-Schwachstellen Erkennung und Reparatur von PHP-SQL-Injection-Schwachstellen Aug 08, 2023 pm 02:04 PM

Überblick über die Erkennung und Behebung von PHP-SQL-Injection-Schwachstellen: SQL-Injection bezeichnet eine Angriffsmethode, bei der Angreifer Webanwendungen verwenden, um böswillig SQL-Code in die Eingabe einzuschleusen. PHP ist eine in der Webentwicklung weit verbreitete Skriptsprache und wird häufig zur Entwicklung dynamischer Websites und Anwendungen verwendet. Aufgrund der Flexibilität und Benutzerfreundlichkeit von PHP ignorieren Entwickler jedoch häufig die Sicherheit, was zur Entstehung von SQL-Injection-Schwachstellen führt. In diesem Artikel wird beschrieben, wie SQL-Injection-Schwachstellen in PHP erkannt und behoben werden, und es werden relevante Codebeispiele bereitgestellt. überprüfen

Laravel-Entwicklungshinweise: Methoden und Techniken zur Verhinderung von SQL-Injection Laravel-Entwicklungshinweise: Methoden und Techniken zur Verhinderung von SQL-Injection Nov 22, 2023 pm 04:56 PM

Hinweise zur Laravel-Entwicklung: Methoden und Techniken zur Verhinderung von SQL-Injection Mit der Entwicklung des Internets und der kontinuierlichen Weiterentwicklung der Computertechnologie ist die Entwicklung von Webanwendungen immer häufiger geworden. Während des Entwicklungsprozesses war Sicherheit schon immer ein wichtiges Thema, das Entwickler nicht ignorieren können. Unter anderem ist die Verhinderung von SQL-Injection-Angriffen eines der Sicherheitsprobleme, das während des Entwicklungsprozesses besondere Aufmerksamkeit erfordert. In diesem Artikel werden verschiedene Methoden und Techniken vorgestellt, die häufig in der Laravel-Entwicklung verwendet werden, um Entwicklern dabei zu helfen, SQL-Injection wirksam zu verhindern. Parameterbindung verwenden Die Parameterbindung ist Lar

So verhindern Sie SQL-Injection-Angriffe mit PHP So verhindern Sie SQL-Injection-Angriffe mit PHP Jun 24, 2023 am 10:31 AM

Im Bereich der Netzwerksicherheit sind SQL-Injection-Angriffe eine gängige Angriffsmethode. Es nutzt von böswilligen Benutzern übermittelten Schadcode aus, um das Verhalten einer Anwendung zu ändern und unsichere Vorgänge auszuführen. Zu den gängigen SQL-Injection-Angriffen gehören Abfragevorgänge, Einfügevorgänge und Löschvorgänge. Unter diesen werden Abfrageoperationen am häufigsten angegriffen, und eine gängige Methode zur Verhinderung von SQL-Injection-Angriffen ist die Verwendung von PHP. PHP ist eine häufig verwendete serverseitige Skriptsprache, die häufig in Webanwendungen verwendet wird. PHP kann mit MySQL usw. zusammenhängen.

PHP-Formularfilterung: Verhinderung und Filterung von SQL-Injections PHP-Formularfilterung: Verhinderung und Filterung von SQL-Injections Aug 07, 2023 pm 03:49 PM

PHP-Formularfilterung: Verhinderung und Filterung von SQL-Injections Einführung: Mit der rasanten Entwicklung des Internets ist die Entwicklung von Webanwendungen immer häufiger geworden. In der Webentwicklung sind Formulare eine der häufigsten Formen der Benutzerinteraktion. Allerdings bestehen bei der Verarbeitung der Daten zur Formularübermittlung Sicherheitsrisiken. Eines der häufigsten Risiken sind SQL-Injection-Angriffe. Ein SQL-Injection-Angriff ist eine Angriffsmethode, bei der eine Webanwendung dazu verwendet wird, Benutzereingabedaten falsch zu verarbeiten, sodass der Angreifer nicht autorisierte Datenbankabfragen durchführen kann. Der Angreifer passiert die

Gegenmaßnahmen gegen SQL-Injection-Schwachstellen in PHP Gegenmaßnahmen gegen SQL-Injection-Schwachstellen in PHP Aug 09, 2023 pm 03:09 PM

SQL-Injection ist eine gängige Netzwerkangriffsmethode, die die unvollständige Verarbeitung von Eingabedaten durch die Anwendung nutzt, um erfolgreich schädliche SQL-Anweisungen in die Datenbank einzuschleusen. Diese Angriffsmethode kommt besonders häufig bei Anwendungen vor, die mit der PHP-Sprache entwickelt wurden, da PHP normalerweise relativ schwach mit Benutzereingaben umgeht. In diesem Artikel werden einige Strategien zum Umgang mit SQL-Injection-Schwachstellen vorgestellt und PHP-Codebeispiele bereitgestellt. Verwendung vorbereiteter Anweisungen Vorbereitete Anweisungen sind eine empfohlene Methode zum Schutz vor SQL-Injection. Es verwendet Bindungsparameter, um Eingabedaten zu kombinieren

See all articles