Модуль KRL, настроенный с помощью ключа API

#security #module #krl

#Безопасность #модуль #krl

Вопрос:

Я пишу модуль KRL для API. Для API требуется ключ доступа, и он должен быть предоставлен набором правил, который вызывает мой модуль. Мой модуль включает в себя мой ключ доступа, который используется правилами тестирования в модуле.

Набор правил, который использует мой модуль, предоставляет ключ доступа, подобный этому:

 use module a421x99 alias SuperModule with access_key = "01234567";
  

1 — Как мне написать свой модуль, чтобы ключ доступа не просочился в сгенерированный Javascript?

2 — Предположим, что вызывающий набор правил не предоставляет access_key. Как мне защитить мой собственный ключ доступа, который я помещаю в модуль для тестирования?

Ответ №1:

Прежде всего, вы должны включать ключи API, используя key блок в meta , вот так:

 key s3 {
  "access_key" : "--access_key--"
}
  

Это лучше, чем хранить или передавать ключи в виде простых строк.

Во-вторых configure using , вашему модулю нужна meta строка в ,, (я предполагаю, что она у вас уже есть). Передача пустого хэша в качестве значения по умолчанию предотвратит использование вашего жестко закодированного ключа в модуле набором правил, вызывающим модуль.

 configure using s3keys = {}
  

Наконец, в глобальном блоке сделайте что-то вроде этого:

 usekeys = s3keys || keys:s3();
  

Это указывает KRL использовать либо тот, s3keys который был передан вызывающим набором правил, либо s3 ключ из собственного meta блока модуля, если ваш модуль используется сам по себе. Даже если кто-то использует ваш модуль, он никогда не получит ваш keys:s3() из-за значения по умолчанию, которое вы установили в configure using строке.

Как только вы это сделаете, usekeys вы сможете pick() извлечь необходимые фрагменты:

 access_key = usekeys.pick("access_key");
  

Модуль Twilio от Sam — отличное место для примеров.

Комментарии:

1. Хороший ответ, спасибо! Следует помнить одну вещь: перед развертыванием модуля следует отключить вход в систему в мета-блоке.