目录
安全:
- SQL注入:窃取数据库内容;
- xss攻击:窃取前端的2cookie内容;
- 密码加密:保障用户信息安全(重要)
这里其中只有 xss 攻击是前端也需要搞的,密码加密的话是必要的,即使被攻击,对面拿到的也只是加密过的密码,还行这里其中只有 xss 攻击是前端也需要搞的,密码加密的话是必要的,即使被攻击,对面拿到的也只是加密过的密码,还行。
补充:
- server端公鸡方式有很多,预防手段也很多;
- 本文讲解常见的、能头改过web server(Nodejs)层面进行预防;
- 有些攻击需要硬件和服务来支持(需要OP支持),比如DDOS
OP是运维,第三点也可以交给专业的团队来整理;
SQL注入:
- 最原始、最简单的攻击,从有了web2.0就有了SQL注入攻击;
- 攻击方法:输入一个SQL片段,最终拼接成为一段攻击代码;
- 预防措施;谁用mysql的escape函数处理输入内容就可以了;
这种攻击就是在需要输入东西的时候,输入一些 sql 判断, 当我们去拼接起来的时候就会被攻击。 现在演示一下登录的时候,无外乎两种情况,成功或者失败。 而我们验证登录的话是根据 sql 语句(里面有密码和用户名)去搜索,但是如果传入的用户名后面有‘--就会把我们后面 根据密码判断的那一部分注释掉,导致不需要密码,只有用户名去搜索!
- select usename,realname from users
- where nsername = 'zhangsan' and password='123'
- const loginCheck = (username,password) => {
-
- username = excape(username)
- password = expace(password)
- const sql = `select*from users where username=${username}and password=${password}`
- console.log(sql)
- return exec(sql).then((loginData)=>{
- retuen loginData[0] || {}
- }
- }
XSS攻击:
- 我们前端最为熟悉的攻击方式,但是server端更为应该掌握;
- 攻击方式:在页面展示内容当中掺杂js代码,已获得网页信息;
- 预防措施:转换生成js的特殊字符;
转换特殊字符:& -> &< -> <> -> "" -> '/ -> '
其实搞个加密算法就行,登录的时候把加密过的存到数据 库,在 utils 下面建一个 cryp.js,引入 node.js 自带的 crypto 库。定义一个密匙就是解开加密的钥匙,可以写的复杂,定义一 个 md5 函数进行 md5 加密,需要传入加密的内容。调用该库的 createHash(‘md5’)方法生成一个 md5,再调用 md5 的 update 方法,将内容放进去!再调用 digest(‘hex’)就是把输入输出变成 16 进制。
再定义一个加密函数,传入一个密码,和密匙拼接起来成一 个字符串,然后传给我们的 md5 函数进行加密即可。注意只要是明文一样,加密出来的效果也一样。由于数据库长度问 题,我们把长度设置为 32,然后就可以把加密后的存进去 (update)。 回到登录,引入加密函数,在生成 sql 前先对输入密码进行加密就行。(escape 放在加密后,不然我们没有加‘’会报错。
总结:
- 如何预防SQL注入;
- 如何预防XSS攻击;
- 如何加密密码
总结:
- 开发了那哪些功能模块,完整的流程;
- 用到了那些核心的知识点;
- 回顾“server和前端的区别”
功能模块:
五部分:
- 处理http接口;
- 安全;
- 连接数据库;
- 日志;
- 实现登录;
核心知识点:
server和前端的区别:
- 服务稳定性;
- 安全(包括登录验证);
- 内存CPU(优化扩展);
- 集群和服务拆分(设计已支持);
- 日志记录;
下一步: