赞
踩
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}
`
有人说,是不是全部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()
原生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是流的写入模式。
登录环节(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一抹一样,看倒数第二张图。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。