前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Serverless 最佳实践之网络请求(中)

Serverless 最佳实践之网络请求(中)

作者头像
朱峰
发布2019-11-18 14:29:04
1.1K0
发布2019-11-18 14:29:04
举报
文章被收录于专栏:寂静小站寂静小站

本篇将提供以下问题的解决方案:

  • 如何在云函数中便捷得读写 Cookie?
  • 在 Serverless 中如何存储和使用 Session?
  • 如何使用入参校验来避免恶意攻击?

如何在云函数中便捷得读写 Cookie?

原生云函数是通过 Context 中的 headers 来传入 cookie 信息,通过返回 headers 的 set-cookie 来写入 cookie,这种方式显然对于开发者来说不够友好,所以 FaasJS 将其读写操作封装到了 @faasjs/http 插件中,可以通过如下方式来读写 cookie:

代码语言:javascript
复制
import { Func } from '@faasjs/func';import { Http } from '@faasjs/http';
const http = new Http(); // 创建 http 插件实例
export default new Func({  plugins: [http], // 将 http 插件实例放到云函数的插件中  async handler(){    console.log(http.cookie.read('key')); // 读取 cookie    http.cookie.write('key', 'value'); // 写入 cookie  }});

在 Serverless 中如何存储和使用 Session?

在 Serverless 场景下,每个云函数都是相互独立的,若统一处理 Session 会造成较大的性能损耗。

因此为了使各个云函数能独自处理 Session 信息,推荐将 Session 加密存储于 Cookie 中,并且为了避免 Cookie 信息过多,建议仅存储必须的信息,如 user_id 之类。

Session 使用示例如下:

代码语言:javascript
复制
import { Func } from '@faasjs/func';import { Http } from '@faasjs/http';
const http = new Http();
export default new Func({  plugins: [http],  handler(){    // 将 session 中的 distinct_id 写入为 user_id    http.session.write('user_id', http.session.read('distinct_id'));  }});

入参校验

随着网络安全变得越来越重要,FaasJS 中也内置了入参校验来避免一些攻击行为。入参校验主要支持以下功能:

  • 支持校验请求参数、Cookie 和 Session;
  • 支持入参白名单配置,当遇到非白名单中的入参时,可以报错或删除;
  • 校验规则包括:必填校验、类型校验、枚举值校验、设定默认值;
  • 校验规则支持多层校验,用于校验 object 和 array 类型。

代码示例如下:

代码语言:javascript
复制
const http = new Http({  validator: { // 配置入参校验    params: { // 校验请求参数      whitelist: 'error', // 若发现非白名单入参就报错      rules: { // 每个参数的校验规则        key: { // 参数名          required: true, // 必填          type: 'object', // 参数类型          config: { // 多层校验            whitelist: 'error',            rules: {              subKey: { // 参数名                in: [1, 2], // 枚举值校验                default: 1 // 设定默认值              }            }          }        }      }    }  }});

由于入参校验功能支持 Session,因此可以以此来进行简单的鉴权。比如对 Session 中的 user_id 进行必填校验,来判断用户是否已登录。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 寂静小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档