我如何在base64中编码我的实例ID

时间:2019-06-14 09:54:30

标签: javascript angular security serverless faunadb

我需要对动物群实例的ID进行编码,因为我在此类URL中使用了它 /任务/(身份证号码)/团队

我以此创建实例:

/* code from functions/todos-create.js */
import faunadb from 'faunadb' /* Import faunaDB sdk */
/* configure faunaDB Client with our secret */
const q = faunadb.query
const client = new faunadb.Client({
  secret: process.env.FAUNADB_SECRET
})

/* export our lambda function as named "handler" export */
exports.handler = (event, context, callback) => {
  /* parse the string body into a useable JS object */


  const eventBody = JSON.stringify(event.body)
  const data = JSON.parse(eventBody)
  const mission = {
    data: JSON.parse(data)
  }
  // {"title":"What I had for breakfast ..","completed":true}
  /* construct the fauna query */
  return client.query(q.Create(q.Ref("classes/missions"), mission))
  .then((response) => {
    console.log("success", response)
    /* Success! return the response with statusCode 200 */
    return callback(null, {
      statusCode: 200,
      body: JSON.stringify(response)
    })
  }).catch((error) => {
    console.log("error", error)
    /* Error! return the error with statusCode 400 */
    return callback(null, {
      statusCode: 400,
      body: JSON.stringify(error)
    })
  })
}

我将此lambda称为服务中的函数:

  createMission(data) {
    return fetch('/.netlify/functions/mission-create', {
      body: JSON.stringify(data),
      method: 'POST'
    }).then(response => {
      return response.json();
    });
  }

然后在页面的初始位置加载'/ mission /(id number)/ team':

this._missionService.readById(this.route.snapshot.params.missionId)

再次通过服务使用此lambda:

import faunadb from 'faunadb'

const q = faunadb.query
const client = new faunadb.Client({
  secret: process.env.FAUNADB_SECRET
})

exports.handler = (event, context, callback) => {
  const id = event.path.match(/([^\/]*)\/*$/)[0];
  console.log(`Function 'mission-read' invoked. Read id: ${id}`)
  return client.query(q.Get(q.Ref(q.Class("missions"), id)))
  .then((response) => {
    console.log("success", response)
    return callback(null, {
      statusCode: 200,
      body: JSON.stringify(response)
    })
  }).catch((error) => {
    console.log("error", error)
    return callback(null, {
      statusCode: 400,
      body: JSON.stringify(error)
    })
  })
}

实际上这是不安全的,因为可以使用带有ID号的URL处理访问我的所有任务。 我想在base64中对该ID进行编码,但我不知道该怎么做,我从开发人员入手,我想首先在服务中加密ID并在服务中对其进行解密,但有人说我的前台并不安全,那么我想在后面使用base64。 感谢您的建议!

1 个答案:

答案 0 :(得分:4)

解决此问题的方法肯定是,以使用base64混淆ID(不会保护),但是您需要将用户ID与敏感数据库中的信息。

然后,您可以让它们针对您的auth / data服务进行身份验证以建立身份。然后,该服务将仅向他们提供与他们相关联的记录。

此解决方案的棘手部分是为您的lambda服务编写身份验证协议。