安全
-- 关注web server层面, 没办法防止硬件方面的攻击(如DDOS)
-
SQL注入: 窃取数据库的数据
-
攻击方法: 输入一个sql片段, 最终拼接成一段攻击代码
-
预防措施: mysql的
escape
函数处理输入内容 -
代码演示:
// 原本node的sql拼接语句 `select * from users where username='zhangsan' and password='123'` // 当登录时候, 输入: zhangsan'-- 时 `select * from users where username='zhangsan'--' and password='123'` // 后面的部分就被注释掉, 然后不需要密码也能登录 // escape处理之后, 把' 转义成 \', 所以注意escape的之后, sql语句不需要加'' `select * from users where username='zhangsan\'--' and password='123'`
-
解决:
username = mysql.escape(username)
, 会把特殊符号处理
-
-
XSS攻击: 获取前端的cookie内容
-
攻击方式: 在页面展示内容中掺杂js代码, 以获取网页信息
-
预防方式: 转换生成js的特殊字符
-
代码演示: 在输入框内输入
<script>alert(document.cookie)</script>
-
解决:
npm i xss --save
const xss = require('xss'); // 原本title直接存, 现在把特殊字符进行转义, "<" ">"都转义, 形成不了js语句 title = xss(title)
转换js.png
-
-
密码加密(明文密码不安全)
- 即便攻破数据库, 也不能泄露用户账号密码
- 攻击方式: 获取了此网页的账号密码, 再用此账号密码去登录其他系统
- 解决: nodejs提供加密的库,
crpyto
// 对密码进行md5加密 // node自带的 const crpyto = require('crypto'); //密钥, 随便的文字 const SECRET_KEY = 'Wangbin_666'; //md5加密 const md5 = (content) => { let md5 = crpyto.createHash('md5'); // 生成十六进制 return md5.update(content).digest('hex'); } // 加密函数 const getPassword = (password) => { const str = `password=${password}&key=${SECRET_KEY}` return md5(str); } module.exports = { getPassword } // 之后的密码: getPassword(密码)
网友评论