Inhaltsverzeichnis
SQL 注入演示
防止方法
🎜SQL-Injection-Demonstration🎜
🎜Präventionsmethoden🎜
Heim Web-Frontend js-Tutorial Ein Artikel, der die SQL-Injection von Node+MySQL erklärt

Ein Artikel, der die SQL-Injection von Node+MySQL erklärt

Nov 14, 2022 pm 08:10 PM
node.js 后端

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 + MySQLSQL注入 进行讲解。

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] || {}
  })
}
Nach dem Login kopieren

上面是登录方法。

最后可以通过 《NodeJS http请求》 里提到的方法创建一个接口给前端。由于接口部分不是本文重点,所以这里打算略过(让我偷懒吧)。

此时再创建一个 HTML 页面,大概生成一下内容,然后使用 Ajax 与后端对接。

如果你懒的话可以直接使用 postman 测试

Ein Artikel, der die SQL-Injection von Node+MySQL erklärt

根据上面的 登录方法 可以得知,前端输入以下内容就可以登录成功

  • 用户名: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] || {}
  })
}
Nach dem Login kopieren

使用 escape 方法过滤后的字符串会被转义。

此时如果用户名输入 leihou' -- ,在后端控制台会打印出如下内容:

select username, realname from users where username='leihou\' -- ' and password='123345';
Nach dem Login kopieren

可以看到 leihou' 后面的单引号被转义了。

以上就是 MySQL 防范 SQL注入攻击

Dieser Artikel verwendet NodeJS + MySQL, um die SQL-Injection zu erklären.

SQL-Injection-Angriff ist eine sehr alte Angriffsmethode. Seit der Geburt von web2.0 gibt es SQL-Injection-Angriffe. Es erscheint normalerweise in Frontend-Komponenten wie Eingabefeld

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 eine users-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'
🎜Zu diesem Zeitpunkt im 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🎜🎜Ein Artikel, der die SQL-Injection von Node+MySQL erklärt🎜🎜Gemäß der oben genannten 🎜Anmeldemethode🎜 können Sie feststellen, dass Sie sich erfolgreich anmelden können, indem Sie den folgenden Inhalt im Frontend eingeben🎜
  • Benutzername: leihou
  • Passwort: 123
🎜Aber wenn zu diesem Zeitpunkt der Benutzername als 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!

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)

Detaillierte grafische Erläuterung des Speichers und des GC der Node V8-Engine Detaillierte grafische Erläuterung des Speichers und des GC der Node V8-Engine Mar 29, 2023 pm 06:02 PM

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!

Ein Artikel über Speichersteuerung in Node Ein Artikel über Speichersteuerung in Node Apr 26, 2023 pm 05:37 PM

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

Lassen Sie uns ausführlich über das File-Modul in Node sprechen Lassen Sie uns ausführlich über das File-Modul in Node sprechen Apr 24, 2023 pm 05:49 PM

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.

12 Punkte, die Sie beim Teilen von Interface-Design-Dokumenten beachten sollten 12 Punkte, die Sie beim Teilen von Interface-Design-Dokumenten beachten sollten Apr 24, 2023 am 10:58 AM

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 ~

Vertieftes Verständnis von Generika in Golang (Generika) Vertieftes Verständnis von Generika in Golang (Generika) Apr 11, 2023 pm 07:20 PM

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.

Lassen Sie uns über die Ereignisschleife in Node sprechen Lassen Sie uns über die Ereignisschleife in Node sprechen Apr 11, 2023 pm 07:08 PM

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!

Erfahren Sie mehr über Puffer in Node Erfahren Sie mehr über Puffer in Node Apr 25, 2023 pm 07:49 PM

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

Erfahren Sie mehr über das unsichere Paket in Golang Erfahren Sie mehr über das unsichere Paket in Golang Apr 02, 2023 am 08:30 AM

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!

See all articles