当前位置:   article > 正文

7.18 web层面安全sql,xss,加密,express对比原生http,express-session与connect-redis,登录验证中间件,morgan,以及Koa2业务基础_express-session加密算法

express-session加密算法

一、web安全

1、sql注入
解决方案:node端使用 mysql.escape()过滤即可

// 未过滤写法(单引号包裹)
// username = username
// password = password
const sql = `
	select username, realname from users 
	where username='${username}' and password='${password}'
`
// 过滤写法(无需单引号)
username = escape(username)
password = escape(password)
const sql = `
	select username, realname from users 
	where username=${username} and password=${password}
`
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

有人说,是不是全部sql都需要escape?
对的,一个个加吧。

2、xss攻击
攻击方式:在页面展示中掺杂js代码,以获取网页信息。
解决方案: 转换特殊字符(主要是尖括号)

在这里插入图片描述
具体实现:安装xss库
在这里插入图片描述
在这里插入图片描述
转义结果:
在这里插入图片描述

3、密码加密
使用node自带的crypto库,content生成的内容加上密匙即私有化。
在这里插入图片描述
登录模块(将原始密码,密化传给服务端进行数据库验证)
在这里插入图片描述
之前使用过crypto-js库进行加密操作。(应该够用)

import CryptoJS from 'crypto-js'

const pwd_MD5 = CryptoJS.MD5(this.password).toString()
  • 1
  • 2
  • 3

二、express对比原生http

原生http返回response
1、若是GET,的拼接url形成req.query
2、若是POST得设置不同类型的头,并使用req.on(‘data’,chunk=>{}),以及req.on(‘end’,()=>{}),头设置比如res.setHeader(‘Content-Type’, ‘application/json’)
4、所有返回必须转换成字符串,res.end(JSON.stringify(data))

express返回response
1、express实例化的app.use各种方法比如cookieParser(),express.urlencoded(),将req的参数加工。
2、POST的返回统一req.json(data)

2019年10月15日22:59:48添加
在使用express-session时,需要注意
1.1、如果用原生fetch api需要将credentials属性设置为include
1.2、且站点走http协议,则不能开启secure属性(不然express-session的cookie注入不进来)
2、如果用axios需要将withCredentials属性设置为true
3、node后端需要配置req.setHeader()
在这里插入图片描述
4、cookie成功注入也不一定会显示setCookie

express-session用法

在这里插入图片描述
在这里插入图片描述
当使用session中间件后,会给客户端随机生成connect_id,在根据connect_id指向正确的键值对。
即私有化。

redis connect-redis用法(一般配合express-session使用)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
则可以使用req.session.xxx,将值存入redis数据库。

中间件
以下是loginCheck中间件
在这里插入图片描述
以下是loginCheck中间件的使用
在这里插入图片描述
morgan 打印日志
在这里插入图片描述
注:对象参数stream是流的写入模式。

Koa2部分

登录环节(3个库)
cnpm i koa-generic-session koa-redis redis -S
在这里插入图片描述
在这里插入图片描述
注:ctx.session和req.session都是针对不同请求初始化一块内存空间去存储当前请求对应的server端的变量,第二次启动会消失,所以必须与redis连接进行保存。

访问/api/user/session-test后,
查看application,存在两类cookie分别是express和koa2的
在这里插入图片描述
对比express和koa2的返回(异步写法与同步写法)
在这里插入图片描述
在这里插入图片描述
打印日志 express和koa2对比
express自带morgan 简单配置即可。
在这里插入图片描述
而koa2并没有日志打印的工具,并且morgan本身仅支持express框架的使用,我们得安装一个兼容koa2的morgan插件,叫morgan-koa
npm i morgan-koa -S
在这里插入图片描述
morgan即logger的配置和express一抹一样,看倒数第二张图。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/150169
推荐阅读
相关标签
  

闽ICP备14008679号