Maison > interface Web > js tutoriel > le corps du texte

Une brève analyse de trois aspects de sécurité courants de Node

青灯夜游
Libérer: 2023-02-13 19:27:41
avant
2231 Les gens l'ont consulté

Cet article parlera de trois précautions de sécurité courantes dans Node. Il explique principalement trois aspects de sécurité lors du développement du serveur Node.

Une brève analyse de trois aspects de sécurité courants de Node

1. Méthodes de prévention

1. Injection SQL

Il s'agit de l'attaque la plus primitive et la plus simple apparue depuis le Web2.0 avec une interaction homme-machine. La méthode d'attaque

.

est principalement en saisissant des fragments SQL et enfin en les fusionnant dans un code SQL attaquant

Lorsque nous utilisons un nœud pour nous connecter à la base de données, nous écrivons généralement des instructions sql du côté du nœud pour interroger la base de données, par exemple ci-dessous

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

Mais si je fait quelque chose dans le nom d'utilisateur pour qu'il passe dans une instruction sql, ce sera extrêmement dangereux [Recommandation du tutoriel associée : tutoriel vidéo nodejs在 username 中做点手脚 使他传入的是一个sql语句这样就极其的危险 【相关教程推荐:nodejs视频教程编程教学

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

看上面的代码片段可以发现, -- 在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}
Copier après la connexion

处理方案

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

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

2、xss 攻击

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

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

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

Une brève analyse de trois aspects de sécurité courants de Node

处理方案

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

3、密码加密

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

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

处理方式

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

]

rrreee

En regardant l'extrait de code ci-dessus, vous pouvez constater que -- est un commentaire en SQL, donc si j'obtiens dynamiquement le nom d'utilisateur entré par l'utilisateur dans la requête SQL dans le champ, s'il se termine par --, la vérification conditionnelle du mot de passe suivant sera supprimée

, ce qui signifie que quel que soit le mot de passe saisi par l'utilisateur, tant que le champ du nom d'utilisateur existe dans la base de données, les informations correspondantes peuvent être obtenues

Bien sûr, l'attaque Vous pouvez également continuer à épisser les instructions SQL qui suppriment la base de données plus tard, ce qui est en réalité plus dangereux

rrreee

Solution de traitement

Connectez-vous à la base de données et épissez dans le développement de nœuds L'instruction sql utilise le package mysql npm

, il y a donc également des fonctions de traitement correspondant aux attaques par injection SQL dans ce packageVous pouvez utiliser la fonction mysql.escape pour envelopper toutes les données de la couche frontale, cette fonction échappera au <code>-- ou à d'autres caractères spéciaux, de sorte qu'il n'y aura aucun commentaire dans l'instruction SQL

🎜🎜🎜2. attaque🎜🎜🎜🎜 En tant que front-end, nous devrions être très familiers avec cette attaque🎜🎜🎜La méthode d'attaque consiste à mélanger du code Js dans l'affichage de la page pour obtenir des informations sur la page Web🎜🎜🎜Lorsque nous développons le serveur Node, le données envoyées depuis le front-end Il suffit de les traiter tous, c'est-à-dire d'échapper aux caractères spéciaux (tous les caractères d'échappement doivent être ajoutés ; ce symbole spécial a été supprimé lorsque j'ai pris la capture d'écran car il n'a pas pu être démontré 🎜🎜Une brève analyse de trois aspects de sécurité courants de Node🎜

🎜Plan de traitement🎜

🎜Développez le serveur Node, utilisez le package xss npm et utilisez ce package pour toutes les données transmises depuis le front fin🎜🎜🎜🎜3. Cryptage du mot de passe🎜🎜🎜🎜Si notre base de données est piratée, la dernière chose qui ne doit pas être divulguée est les informations utilisées🎜🎜🎜Parce que l'attaquant peut utiliser le mot de passe du compte de l'utilisateur pour essayer de se connecter à d'autres systèmes🎜🎜

🎜Méthode de traitement🎜

🎜Cela nécessite de ne pas stocker les informations du mot de passe de l'utilisateur en texte brut dans la base de données, un cryptage le mot de passe avec une clé personnalisée avant de le stocker dans la base de données , Bien entendu, cette clé doit être conservée exclusivement par vous et ne peut pas être divulguée🎜🎜ou elle peut être cryptée par d'autres algorithmes cryptographiques🎜🎜🎜 2. Conclusion 🎜🎜🎜J'ai découvert Node récemment. Ce qui précède concerne le développement de services Node, trois précautions de sécurité courantes🎜🎜🎜Adresse originale : https://juejin.cn/post/7199329705706324027🎜🎜🎜Pour en savoir plus sur Node. connaissances, veuillez visiter : 🎜tutoriel nodejs🎜 ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal