Inhaltsverzeichnis
回复内容:
Heim Backend-Entwicklung PHP-Tutorial 请问这个PHP下防范MySQL注入攻击的方法管用吗?

请问这个PHP下防范MySQL注入攻击的方法管用吗?

Jun 06, 2016 pm 04:42 PM
function input replace

function strinput($input)
{
$input=strval($input);
$replace=array('union','load','and','or','select','update','insert','delete','create','char','ascII','ord','conv','=','--','#','*','%','_','\\','\'',"\"");
$input=str_ireplace($replace,"0",$input);
return $input;
}

定义一个这样的过滤函数,对所有GPC来的字符串数据都先过一遍。这样可以完全防范MySQL注入攻击吗?

回复内容:

这类的过滤只能给注入者增加一些麻烦,远远做不到完全防范。
1、注入者可以用sElEcT来代替select
2、注入者可以用selselectect来让你过滤一遍,尝试获得select
3、注入者可以用url码来替代所有输入
4、注入者可以。。。用很多种方法,试出你的过滤函数是什么样的
你和注入者的技能可以在遭受泄露的拉锯战中不断获得提升。
直到你使用了以下方法的其中之一,才开始踏上了安全的征程:
1、白名单。严格定义只能输入哪些字符来查询,其他一律不行。
2、参数化查询。先将SQL语言编译,再代入参数。这时候就算他提交了select * from password where table=admin也只会去查询这一长串字符而不会执行SQL语句了。php下的示例如李世光所说。 这个函数做到完全防范MySQL注入攻击还是比较难的,攻与防本来就是动态的,要是实现一劳永逸的防守还是有难度的。

1、针对一些安全防御,可能目前没法绕过,但是随着对攻击技术的研究可能就会出现绕过方法,像dedecms、dz等的安全防御经常被bypass。
2、根据你业务的不同,实现业务的代码可能就提供了绕过方法。例如一个简单的搜索业务,可能在后面的代码会调用urldecode解码函数:
.....
$q = strinput($_GET['query']);
$q = urldecode($q);
$sql = "select * from table where key='".$q."'";
.....
你在urldecode前面做的所有过滤都是徒劳的

要做到尽量减少安全漏洞不只是sql注入,需要在恰当的地方做正确的事情。这可能要了解一些安全知识,像《白帽子讲web安全》,《web前端黑客》都是web安全不错的书籍。

php安全的在线文档(e文):Survive The Deep End: PHP Security 关于mysql防护其实很简单。
1.使用PDO::prepare PDO::bindParam来过滤输入参数
2.将HTML转成实体 htmlspecialchars 用PHP的PDO扩展去使用数据库,该扩展封装的类和方法已经考虑了防注入。 用PHP的安全函数在query的时候把变量转义一下就可以了。 建议使用参数化查询或白名单。
黑名单几乎在任何时候都是不可取的。 请使用pdo 不要自作聪明地过滤,总会有遗漏的地方的,你过滤不完的。
请用pdo + 参数绑定,一劳永逸,一了百了。 你要注意到,这样子很有可能过滤用户的合法输入。
过滤sql注入的方法常见的有如下两种:
1 mysql_real_escape_string
2 pdo的prepare+bind

另,网站安全性不止是sql注入一方面,还要考虑到csrf和xss等。 字符串过滤:
1>mysql_real_escape_string
2>PDO::prepare
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)

Was bedeutet Funktion? Was bedeutet Funktion? Aug 04, 2023 am 10:33 AM

Funktion bedeutet Funktion. Es handelt sich um einen wiederverwendbaren Codeblock mit bestimmten Funktionen. Er kann Eingabeparameter akzeptieren, bestimmte Operationen ausführen und Ergebnisse zurückgeben. Code, um die Wiederverwendbarkeit und Wartbarkeit des Codes zu verbessern.

So kapseln Sie Eingabekomponenten und einheitliche Formulardaten in vue3 So kapseln Sie Eingabekomponenten und einheitliche Formulardaten in vue3 May 12, 2023 pm 03:58 PM

Vorbereitung Verwenden Sie vuecreateexample, um ein Projekt zu erstellen. Die Parameter lauten ungefähr wie folgt: Verwenden Sie native Eingaben, bei denen es sich hauptsächlich um Werte und Änderungen handelt. App.tsx lautet wie folgt: import{ref}from'vue';exportdefault{setup(){//username is the data constusername=ref('Zhang San');//Wenn sich das Eingabefeld ändert, synchronisieren Sie die Daten constonInput =;return( )=>({

So implementieren Sie ein verstecktes Laravel-Eingabefeld So implementieren Sie ein verstecktes Laravel-Eingabefeld Dec 12, 2022 am 10:07 AM

So implementieren Sie das ausgeblendete Laravel-Eingabefeld: 1. Suchen und öffnen Sie die Blade-Vorlagendatei. 2. Verwenden Sie die method_field-Methode in der Blade-Vorlage, um ein ausgeblendetes Feld zu erstellen. ".

So verwenden Sie die REPLACE-Funktion, um einen bestimmten Teil einer Zeichenfolge in MySQL zu ersetzen So verwenden Sie die REPLACE-Funktion, um einen bestimmten Teil einer Zeichenfolge in MySQL zu ersetzen Jul 25, 2023 pm 01:18 PM

MySQL ist ein häufig verwendetes relationales Datenbankverwaltungssystem, das eine Vielzahl von Funktionen zum Verarbeiten und Betreiben von Daten bietet. Unter anderem wird die REPLACE-Funktion verwendet, um den angegebenen Teil der Zeichenfolge zu ersetzen. In diesem Artikel stellen wir die Verwendung der REPLACE-Funktion zum Ersetzen von Zeichenfolgen in MySQL vor und demonstrieren ihre Verwendung anhand von Codebeispielen. Schauen wir uns zunächst die Syntax der REPLACE-Funktion an: REPLACE(str,search_str,replace_str).

Was tun, wenn beim Klicken auf das Eingabefeld kein Cursor angezeigt wird? Was tun, wenn beim Klicken auf das Eingabefeld kein Cursor angezeigt wird? Nov 24, 2023 am 09:44 AM

Lösungen zum Anklicken des Eingabefelds ohne Cursor: 1. Bestätigen Sie den Browser-Cache. 3. Aktualisieren Sie den Browser. 6. Überprüfen Sie die Eingabe Box-Eigenschaften; 7. Debuggen von JavaScript-Code; 8. Überprüfen Sie andere Elemente der Seite. 9. Berücksichtigen Sie die Browserkompatibilität.

Was sind die Techniken zum Suchen und Ersetzen von Zeichenfolgen in Python? Was sind die Techniken zum Suchen und Ersetzen von Zeichenfolgen in Python? Oct 20, 2023 am 11:42 AM

Welche Techniken gibt es zum Suchen und Ersetzen von Zeichenfolgen in Python? (Spezifisches Codebeispiel) In Python sind Zeichenfolgen ein häufiger Datentyp, und in der täglichen Programmierung stoßen wir häufig auf Such- und Ersetzungsvorgänge für Zeichenfolgen. In diesem Artikel werden einige gängige Techniken zum Suchen und Ersetzen von Zeichenfolgen vorgestellt, begleitet von spezifischen Codebeispielen. Um einen bestimmten Teilstring in einem String zu finden, können Sie die Methode find() oder index() des Strings verwenden. Die Methode find() gibt den Index des ersten Vorkommens des Teilstrings im String zurück.

Was ist der Zweck der Funktion „enumerate()' in Python? Was ist der Zweck der Funktion „enumerate()' in Python? Sep 01, 2023 am 11:29 AM

In diesem Artikel lernen wir die Funktion enumerate() und den Zweck der Funktion „enumerate()“ in Python kennen. Was ist die Funktion enumerate()? Die Funktion enumerate() von Python akzeptiert eine Datensammlung als Parameter und gibt ein Aufzählungsobjekt zurück. Aufzählungsobjekte werden als Schlüssel-Wert-Paare zurückgegeben. Der Schlüssel ist der Index, der jedem Element entspricht, und der Wert sind die Elemente. Syntax enumerate(iterable,start) Parameter iterable – Die übergebene Datensammlung kann als Aufzählungsobjekt namens iterablestart zurückgegeben werden – Wie der Name schon sagt, wird der Startindex des Aufzählungsobjekts durch start definiert. wenn wir es ignorieren

Detaillierte Erläuterung der Rolle und Funktion der MySQL.proc-Tabelle Detaillierte Erläuterung der Rolle und Funktion der MySQL.proc-Tabelle Mar 16, 2024 am 09:03 AM

Detaillierte Erläuterung der Rolle und Funktion der MySQL.proc-Tabelle. MySQL ist ein beliebtes relationales Datenbankverwaltungssystem. Wenn Entwickler MySQL verwenden, müssen sie häufig gespeicherte Prozeduren erstellen und verwalten. Die MySQL.proc-Tabelle ist eine sehr wichtige Systemtabelle. Sie speichert Informationen zu allen gespeicherten Prozeduren in der Datenbank, einschließlich des Namens, der Definition, der Parameter usw. der gespeicherten Prozeduren. In diesem Artikel erklären wir ausführlich die Rolle und Funktionalität der MySQL.proc-Tabelle

See all articles