Ein Artikel, der die SQL-Injection von Node+MySQL erklärt
Obwohl wir natives NodeJS nicht direkt zur Entwicklung des Backends verwenden werden, ist es dennoch notwendig, SQL-Injection
zu verstehen. SQL注入
还是很有必要的。
本文使用 NodeJS
+ MySQL
对 SQL注入
进行讲解。
SQL注入攻击
是很古老的攻击方式了,自从 web2.0
诞生后就有 SQL注入攻击
。它通常出现在 输入框 、文本域 等前端组件中。在输入的内容里加入 SQL语句
,并一同传给后台。【相关教程推荐:nodejs视频教程】
后台一不小心就会将前端传过来的 SQL语句
拼接到自己的 SQL语句
中,最终拼接成一段攻击代码。
所以必须加以预防,不然有可能出现数据泄露,甚至被删库等可能。
SQL 注入演示
以登录为例,我在 MySQL
中添加一个 users
表,里面存储用户名和密码。
在 users
表中,我创建了一条数据:insert into users (username,
password, realname) values ('leihou', '123', '雷猴');
数据的意思是:
username: 'leihou'
password: '123'
realname: '雷猴'
此时,在 NodeJS
后台,我创建了一个登录方法
const mysql = require('mysql') // 创建连接对象 const con = mysql.createConnection({ host: 'localhost', // 地址 user: 'root', // 连接数据库的用户 password: '123456', // 连接数据库的密码 port: '3306', // 默认端口 database: 'testdb' // 数据库名 }) // 开始连接 con.connect() // 统一执行 sql 的函数 function exec(sql) { const promise = new Promise((resolve, reject) => { con.query(sql, (err, result) => { if (err) { reject(err) return } resolve(result) }) }) return promise } // 登录方法 const login = (username, password) => { const sql = ` select username, realname from users where username='${username}' and password='${password}'; ` console.log(sql) return exec(sql).then(rows => { return rows[0] || {} }) }
上面是登录方法。
最后可以通过 《NodeJS http请求》 里提到的方法创建一个接口给前端。由于接口部分不是本文重点,所以这里打算略过(让我偷懒吧)。
此时再创建一个 HTML
页面,大概生成一下内容,然后使用 Ajax
与后端对接。
如果你懒的话可以直接使用 postman
测试
根据上面的 登录方法 可以得知,前端输入以下内容就可以登录成功
- 用户名:leihou
- 密码:123
但如果此时,用户名输入的是 leihou' --
,注意 --
前后都有空格。那密码就可以随便输入了。
最后拼接出来的 SQL
语句是 select username, realname from users where username='leihou' -- ' and password='aslkfjsaf';
注意,密码我是随便输入的。
在 MySQL
里, --
代表注释的意思。所以上面的语句就变成 查询 username 为 leihou 的那条数据
。自然就绕过了密码。
上面输入的 username
的内容绕过登录,泄露了信息。但如果别人要删掉你的表,那后果就非常严重了。
比如在用户名输入框内输入:leihou'; delete from users; --
。
直接就把 users
表给删掉了。
防止方法
SQL注入攻击
实在太古老了,有十几年历史了。所以基本的应对方法都成熟了。
比如将前端传过来的字符串进行转码。
使用 NodeJS
下载的 MySQL
依赖包里就提供了这个方法:escape
。
// 省略部分代码 const mysql = require('mysql') // 省略创建连接对象 // 省略开始连接 // 统一执行 sql 的函数 exec 方法 const escape = mysql.escape const login = (username, password) => { username = escape(username) password = escape(password) const sql = ` select username, realname from users where username=${username} and password=${password}; ` console.log(sql) return exec(sql).then(rows => { return rows[0] || {} }) }
使用 escape
方法过滤后的字符串会被转义。
此时如果用户名输入 leihou' --
,在后端控制台会打印出如下内容:
select username, realname from users where username='leihou\' -- ' and password='123345';
可以看到 leihou'
后面的单引号被转义了。
以上就是 MySQL
防范 SQL注入攻击
NodeJS
+ MySQL
, um die SQL-Injection
zu erklären. und 🎜Textfeld🎜. Fügen Sie dem Eingabeinhalt eine SQL-Anweisung
hinzu und übergeben Sie sie gemeinsam an den Hintergrund. [Empfohlene verwandte Tutorials: nodejs-Video-Tutorial🎜]🎜🎜Wenn der Hintergrund nicht sorgfältig ist, ist die Vorderseite -end wird übertragen Die eingehende SQL-Anweisung
wird in eine eigene SQL-Anweisung
gespleißt und schließlich in einen Angriffscode gespleißt. 🎜🎜Es müssen also Vorkehrungen getroffen werden, sonst kann es zu Datenlecks oder sogar zur Löschung der Datenbank kommen. 🎜🎜SQL-Injection-Demonstration🎜
🎜 Am Beispiel der Anmeldung füge ich eineusers
-Tabelle in MySQL
hinzu, um Benutzernamen und Passwörter zu speichern. 🎜🎜In der Tabelle users
habe ich ein Datenelement erstellt: in user (username,
password, realname) Werte ('leihou', ' einfügen) 123', 'Thunder Monkey');
🎜🎜Daten bedeuten: 🎜Benutzername: 'leihou'
Passwort: ' 123 '
realname: 'Thunder Monkey'
NodeJS
-Hintergrund , Ich habe eine Anmeldemethode erstellt🎜rrreee🎜Das Obige ist die Anmeldemethode. 🎜🎜Schließlich können Sie mit der in "NodeJS http" genannten Methode eine Schnittstelle für das Frontend erstellen Anfrage"🎜 . Da der Schnittstellenteil nicht im Mittelpunkt dieses Artikels steht, werde ich ihn hier überspringen (lassen Sie mich faul sein). 🎜🎜Erstellen Sie zu diesem Zeitpunkt eine weitere HTML
-Seite, generieren Sie grob einige Inhalte und verwenden Sie dann Ajax
, um eine Verbindung mit dem Backend herzustellen. 🎜🎜Wenn Sie faul sind, können Sie postman
direkt zum Testen verwenden🎜🎜
- Benutzername: leihou
- Passwort: 123
leihou' --
eingegeben wird, Bitte beachten Sie, dass --
vor und nach Leerzeichen verwendet wird. Anschließend kann das Passwort zwanglos eingegeben werden. 🎜🎜Die letzte gespleißte SQL
-Anweisung ist select username, realname from users where username='leihou' -- ' and password='aslkfjsaf';
🎜🎜Beachten Sie das Das Passwort habe ich beiläufig eingegeben. 🎜🎜In MySQL
stellt --
die Bedeutung von Kommentaren dar. Die obige Anweisung wird also zu Fragen Sie die Daten ab, deren Benutzername leihou lautet
. Das Passwort wird selbstverständlich umgangen. 🎜🎜Der oben eingegebene Inhalt von Benutzername
umgeht die Anmeldung und gibt Informationen preis. Wenn jedoch jemand anderes Ihre Tabelle löschen möchte, werden die Folgen sehr schwerwiegend sein. 🎜🎜Geben Sie beispielsweise in das Eingabefeld für den Benutzernamen ein: leihou'; 🎜🎜Löschen Sie die Tabelle <code>users
direkt. 🎜🎜Präventionsmethoden🎜
🎜SQL-Injection-Angriff
ist wirklich zu alt, mehr als zehn Jahre alt. Die grundlegenden Bewältigungsmethoden sind also ausgereift. 🎜🎜Zum Beispiel die Transkodierung der vom Frontend übergebenen Zeichenfolge. 🎜🎜Das mit NodeJS
heruntergeladene MySQL
-Abhängigkeitspaket bietet diese Methode: escape
. 🎜rrreee🎜Die mit der Methode escape
gefilterte Zeichenfolge wird mit Escapezeichen versehen. 🎜🎜Wenn der Benutzername zu diesem Zeitpunkt leihou' --
eingibt, wird der folgende Inhalt auf der Backend-Konsole gedruckt: 🎜rrreee🎜Sie können die einfachen Anführungszeichen nach leihou' wurde maskiert. 🎜🎜Das Obige zeigt, wie <code>MySQL
SQL-Injection-Angriffe
verhindert. 🎜🎜Weitere Informationen zu Knoten finden Sie unter: 🎜nodejs-Tutorial🎜! 🎜Das obige ist der detaillierte Inhalt vonEin Artikel, der die SQL-Injection von Node+MySQL erklärt. 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





Dieser Artikel vermittelt Ihnen ein detailliertes Verständnis des Speichers und Garbage Collectors (GC) der NodeJS V8-Engine. Ich hoffe, er wird Ihnen hilfreich sein!

Der nicht blockierende und ereignisgesteuerte Knotendienst hat den Vorteil eines geringen Speicherverbrauchs und eignet sich sehr gut für die Verarbeitung massiver Netzwerkanforderungen. Unter der Voraussetzung massiver Anfragen müssen Probleme im Zusammenhang mit der „Speicherkontrolle“ berücksichtigt werden. 1. Der Garbage-Collection-Mechanismus und die Speicherbeschränkungen von V8 Js wird von der Garbage-Collection-Maschine gesteuert

Das Dateimodul ist eine Kapselung der zugrunde liegenden Dateioperationen, wie z. B. Lesen/Schreiben/Öffnen/Schließen/Löschen von Dateien, Hinzufügen usw. Das größte Merkmal des Dateimoduls besteht darin, dass alle Methoden zwei Versionen von **synchronem** und **bereitstellen. asynchron**, mit Methoden mit dem Suffix sync sind alle Synchronisationsmethoden, und diejenigen ohne sind alle heterogene Methoden.

Als ich kürzlich das Schnittstellendokument überprüfte, stellte ich fest, dass der von einem kleinen Partner definierte Parameter ein Aufzählungswert war, das Schnittstellendokument jedoch nicht den entsprechenden spezifischen Aufzählungswert angab. Tatsächlich ist es wirklich wichtig, wie man Schnittstellendokumente gut schreibt. Heute präsentiert Ihnen Bruder Tianluo 12 Punkte, auf die Sie in Dokumenten zum Interface-Design achten sollten ~

Was Ihnen dieser Artikel vermittelt, ist ein tiefgreifendes Verständnis der Generika in Golang? Wie verwende ich Generika? Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Die Ereignisschleife ist ein grundlegender Bestandteil von Node.js und ermöglicht die asynchrone Programmierung, indem sie sicherstellt, dass der Hauptthread nicht blockiert wird. Das Verständnis der Ereignisschleife ist für die Erstellung effizienter Anwendungen von entscheidender Bedeutung. Der folgende Artikel wird Ihnen ein detailliertes Verständnis der Ereignisschleife in Node vermitteln. Ich hoffe, er wird Ihnen hilfreich sein!

Zu Beginn lief JS nur auf der Browserseite. Es war einfach, Unicode-codierte Zeichenfolgen zu verarbeiten, aber es war schwierig, binäre und nicht Unicode-codierte Zeichenfolgen zu verarbeiten. Und Binär ist das Datenformat der niedrigsten Ebene des Computer-, Video-/Audio-/Programm-/Netzwerkpakets

In einigen Low-Level-Bibliotheken wird häufig das unsichere Paket verwendet. Dieser Artikel wird Ihnen helfen, das unsichere Paket in Golang zu verstehen, die Rolle des unsicheren Pakets und die Verwendung von Pointer vorzustellen. Ich hoffe, er wird Ihnen hilfreich sein!
