Maison >interface Web >js tutoriel >Une brève analyse de trois aspects de sécurité courants de Node
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.
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}
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}
看上面的代码片段可以发现, -- 在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 加密一下
, 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éeBien 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
rrreeeSolution de traitement
, 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
(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é
🎜🎜🎜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🎜🎜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!