Heim > Artikel > Web-Frontend > Eine kurze Analyse von drei allgemeinen Sicherheitsaspekten von Node
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.
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 服务端的时候, 对前端传来的数据统统处理一下就行了 ,也就是进行特殊字符转义 (所有的转义字符后都需要 加上;这个特殊符号 由于无法演示 我截图的时候去掉了
开发 Node 服务端,使用 xss 这个npm包
,把前端传入的数据都使用这个包裹一下就行
3、密码加密
假如我们数据库被入侵, 其中最不应该泄露的就是用的信息了
因为攻击者可以拿着用户的账户密码去尝试登录其他的系统
这个就需要在数据库不用明文存储用户的密码
信息, 在存入数据库之前把密码通过自定义 key 加密一下
]
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
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
rrreeeVerarbeitungslösungh3>
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önnenmysql.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
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🎜🎜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!