#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. Хороший ответ, спасибо! Следует помнить одну вещь: перед развертыванием модуля следует отключить вход в систему в мета-блоке.