Heim  >  Artikel  >  Web-Frontend  >  Eine kurze Analyse von drei allgemeinen Sicherheitsaspekten von Node

Eine kurze Analyse von drei allgemeinen Sicherheitsaspekten von Node

青灯夜游
青灯夜游nach vorne
2023-02-13 19:26:352160Durchsuche

In diesem Artikel geht es um drei allgemeine Sicherheitsvorkehrungen in Node. Dabei werden hauptsächlich drei Sicherheitsaspekte bei der Entwicklung des Node-Servers erläutert.

Eine kurze Analyse von drei allgemeinen Sicherheitsaspekten von Node

1. Präventionsmethoden

1. SQL-Injection

Dies ist der primitivste und einfachste Angriff, der seit Web2.0 mit Mensch-Computer-Interaktion aufgetreten ist. Die Angriffsmethode

geschieht hauptsächlich durch die Eingabe von SQL-Fragmenten und deren schließliches Zusammenfügen in einen angreifenden SQL-Code.

Wenn wir den Knoten verwenden, um eine Verbindung zur Datenbank herzustellen, schreiben wir normalerweise SQL-Anweisungen auf der Knotenseite, um die Datenbank abzufragen, z. B. Unten

-- 这是一个简易的登录判断sql语句, 输入 username 和 password 在 users 表中进行用户登录验证,  然后获取用户的地址和年龄
select address, age from users where username=${username} and password=${password}

Aber wenn ich etwas im Benutzernamen mache, damit er eine SQL-Anweisung übergibt, wird das äußerst gefährlich [Empfehlung für ein entsprechendes Tutorial: nodejs Video-Tutorial

, Programmierunterricht在 username 中做点手脚 使他传入的是一个sql语句这样就极其的危险  【相关教程推荐:nodejs视频教程编程教学

-- username 输入为 ali -- 
-- 上面这段 sql 就会被解析成这样 
select address, age from users where username=ali -- and password=${password}

看上面的代码片段可以发现, -- 在sql中是属于注释的存在, 所以如果当我在 sql 查询动态获取用户输入的 username 字段中, 如果结尾是 -- 就会把后面password的条件验证去掉

也就是代表用户无论输入什么 password, 只要 username 字段在数据库中存在就可以拿到对应的信息

当然攻击者也可以在后面继续拼接删库的 sql 语句,这其实是更加危险的

-- username 输入为 ali; delete from users where username="ali" --
-- 就会拼接成下面这种语句 这是极其危险的
select address, age from users where username=ali; delete from users where username="ali" -- and password=${password}

处理方案

在 node 开发中连接数据库, 拼接sql语句是使用 mysql 这个npm包, 所以在这个包中也有对应 sql注入 攻击的处理函数

可以使用 mysql.escape函数 , 对所有来源于前端的数据进行包裹一层, 这个函数会把 -- 或者其他的特殊字符进行转义,这样就不会出现在sql语句中会有注释的情况

2、xss 攻击

这个攻击我们作为前端应该是很熟悉的了

其攻击方式就是在页面的展示内中掺杂 Js 的代码以获取网页信息

在我们开发 Node 服务端的时候, 对前端传来的数据统统处理一下就行了 ,也就是进行特殊字符转义 (所有的转义字符后都需要 加上;这个特殊符号 由于无法演示 我截图的时候去掉了

Eine kurze Analyse von drei allgemeinen Sicherheitsaspekten von Node

处理方案

开发 Node 服务端,使用 xss 这个npm包,把前端传入的数据都使用这个包裹一下就行

3、密码加密

假如我们数据库被入侵, 其中最不应该泄露的就是用的信息了

因为攻击者可以拿着用户的账户密码去尝试登录其他的系统

处理方式

这个就需要在数据库不用明文存储用户的密码信息, 在存入数据库之前把密码通过自定义 key 加密一下]

rrreee

Wenn Sie sich das obige Codefragment ansehen, können Sie feststellen, dass -- ein Kommentar in SQL ist. Wenn ich also den vom Benutzer in der SQL-Abfrage eingegebenen Benutzernamen dynamisch erhalte Feld, wenn es mit -- endet, wird die bedingte Überprüfung des folgenden Passworts entfernt

, was bedeutet, dass unabhängig vom vom Benutzer eingegebenen Passwortdie entsprechenden Informationen vorhanden sein können, solange das Benutzernamenfeld in der Datenbank vorhanden ist erhalten werden

Natürlich ist der Angriff Sie können die SQL-Anweisungen, die die Datenbank löschen, später auch weiterhin zusammenfügen, was eigentlich gefährlicher ist

rrreee

Verarbeitungslösung

h3>

Stellen Sie eine Verbindung zur Datenbank her und verbinden Sie sie mit der Knotenentwicklung. Die SQL-Anweisung verwendet das MySQL-NPM-Paket. Daher enthält dieses Paket auch Verarbeitungsfunktionen, die SQL-Injection-Angriffen entsprechen. Sie können mysql.escape verwenden Funktion zum Umschließen aller Daten aus der Front-End-Ebene. Diese Funktion maskiert -- oder andere Sonderzeichen, sodass in der SQL-Anweisung keine Kommentare enthalten sind

2. xss-Angriff

🎜🎜🎜 Wir als Front-Ends sollten mit diesem Angriff sehr vertraut sein🎜🎜🎜Die Angriffsmethode besteht darin, Js-Code in die Anzeige der Seite zu mischen, um Webseiteninformationen zu erhalten🎜🎜🎜Wenn wir den Knotenserver entwickeln, Die vom Front-End gesendeten Daten verarbeiten sie einfach alle, d >🎜🎜Eine kurze Analyse von drei allgemeinen Sicherheitsaspekten von Node🎜🎜Verarbeitungsplan🎜🎜Entwickeln Sie den Knotenserver, verwenden Sie das xss npm-Paket und verwenden Sie dieses Paket für alle vom Frontend🎜🎜🎜🎜3. Passwortverschlüsselung🎜🎜🎜🎜Wenn unsere Datenbank gehackt wird, sollten die verwendeten Informationen als letztes nicht preisgegeben werden🎜🎜🎜Da der Angreifer das Kontopasswort des Benutzers verwenden kann, um sich anzumelden andere Systeme🎜🎜

🎜Verarbeitungsmethode🎜

🎜Dies erfordert, dass das Passwort des Benutzers nicht im Klartext in der Datenbank gespeichert wird, Verschlüsseln Sie das Passwort mit einem benutzerdefinierten Schlüssel, bevor Sie es in der Datenbank speichern . Dieser Schlüssel muss natürlich ausschließlich von Ihnen aufbewahrt werden und darf nicht preisgegeben werden🎜🎜oder er kann durch andere kryptografische Algorithmen verschlüsselt werden🎜🎜🎜 2. Fazit🎜🎜🎜Ich habe kürzlich auch Node-bezogenes Wissen gelernt. Oben geht es um die Entwicklung von Node-Terminals, drei allgemeine Sicherheitsvorkehrungen Knotenbezogenes Wissen finden Sie unter: 🎜nodejs-Tutorial🎜! 🎜

Das obige ist der detaillierte Inhalt vonEine kurze Analyse von drei allgemeinen Sicherheitsaspekten von Node. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen