POST パラメーターと URL パラメーターの API
POST パラメーターと URL パラメーターは、request.postParams および request.urlParams を使用して、request オブジェクトのプロパティとしてアクセスできます。
request.postParams.myParam を呼び出すことで、任意の単一のパラメーターに postParams および urlParams の親オブジェクトとしてアクセスできます。この方法でアクセスするパラメーターはすべて、基底クラス ParameterValue のオブジェクトです。このクラス内の任意の API を任意のパラメーターで呼び出すことができます。
クライアント要求を調べる作業の後、場合によっては request オブジェクトからパラメーター値にアクセスして暗号化する必要があります。クライアント要求内のデータに応じて、複数の方法で値を暗号化し、インスタンスのフィールドにマップすることができます。
既知のテーブルおよびフィールドの値を暗号化する
暗号化データを保持するインスタンスのテーブルおよびフィールドの名前がわかっている場合は、それらを暗号化ルールで明示的に定義できます。たとえば、インスタンスでインシデントを作成するために要求が処理されることが分かっていて、説明フィールドの text パラメーターを暗号化する必要があるとします。この場合、次のアクションを作成できます。
function SampleAction1() {
request.postParams.text.valueFor('incident', 'description');
}動的に定義したテーブルおよびフィールドの値を暗号化する
逆に、暗号化データを設定するフィールドの名前がわからない場合は、tableName および fieldName を使用してそれらを動的に定義することができます。
次の例は、インスタンスのさまざまなタスク テーブル (インシデント、問題、change_request など) にデータを格納する可能性のある汎用的な要求を処理します。
function SampleAction2() {
var tableName = request.urlParams.table;
for (var parameter in request.postParams) {
var currentParam = request.postParams[parameter];
var fieldName = currentParam.toString();
if (fieldName == 'text') {
currentParam.valueFor(tableName, 'description')
} else {
currentParam.valueFor(tableName, fieldName);
}
}
}このアクションでは次のことを実行します。
- URL パラメーターから宛先テーブルを取得します。
- URL パラメーターを反復処理します。
- 暗号化対象としてマークされたフィールドに一致する名前を持つすべての URL パラメーターを暗号化するよう、エッジ暗号化 プロキシサーバーに指示します。
- text という具体的なパラメーターを探し、インシデント テーブルの説明フィールド暗号化に基づいて値を暗号化するよう エッジ暗号化 プロキシに指示します。
この例で、valueFor() メソッドは実際には暗号化を実行していません。そうではなく、このメソッドは、要求オブジェクト内のテーブル/フィールドのペアが暗号化設定で暗号化対象としてマークされているかどうかを確認し、必要に応じて暗号化するよう、エッジ暗号化 プロキシサーバーに指示しています。
パラメーター内の JSON または XML を暗号化する
POST パラメーターまたは URL パラメーターには、JSON または XML コンテンツが含まれています。この場合、パラメーター内のコンテンツを処理し、値を反復処理し、必須フィールドを暗号化することができます。次の例で、tableName は引き続き POST パラメーターからアクセスされますが、フィールドの値は JSON オブジェクトの data です。
function SampleAction3() {
var tableName = request.postParams.table;
var data = request.postParams.data;
var dataIterator = data.getAsJsonContent().iterator();
while (dataIterator.hasNext()) {
var jsonElement = dataIterator.next();
var fieldName = jsonElement.getName();
if (fieldName == 'text') {
jsonElement.valueFor(tableName, 'description');
} else {
jsonElement.valueFor(tableName, fieldName);
}
}
}POST パラメーター内の XML を処理する暗号化ルールのアクションの例
function SampleAction4() {
var tableName = request.postParams.table;
var data = request.postParams.data;
var dataIterator = data.getAsXmlContent().getIteratorOverAllChildren();
while (dataIterator.hasNext()) {
var jsonElement = dataIterator.next();
var fieldName = jsonElement.getName();
if (fieldName == 'text') {
jsonElement.valueFor(tableName, 'description');
} else {
jsonElement.valueFor(tableName, fieldName);
}
}
}クエリーを暗号化する
クライアント要求のパラメーターの中にエンコードされたクエリーが出現し、そこに機密データが含まれていることがあります。クエリーのフィールドを、インスタンスデータベースの暗号化された値に一致させるには、クエリーのフィールドが暗号化対象としてマークされているかどうかを確認するようプロキシに指示する暗号化ルールを作成する必要があります。encodedQueryFor() メソッドは、指定したテーブルのエンコードされたクエリーを解析し、クエリーのフィールドに暗号化設定があるかどうかを確認します。
この例では、ルールでパラメーターを反復処理して filter パラメーターを探します。このパラメーターは Glide のエンコードされたクエリーであると想定しています。
function SampleAction5() {
var tableName = request.urlParams.table;
for (var parameter in request.postParams) {
var currentParam = request.postParams[parameter];
var fieldName = currentParam.toString();
if (fieldName == 'filter') {
currentParam.encodedQueryFor(tableName);
} else {
currentParam.valueFor(tableName, fieldName);
}
}
}たとえば、filter の値が short_description=My sensitive information^number=INC000056^category=Outage の場合、クエリーはインスタンス上で short_description=<Encrypted(My sensitive information)>^number=INC000056^category=Outage となります。
ParameterValue - toString()
POST または URL パラメーターの値を文字列に変換します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | 文字列としてのパラメーター値。 |
ParameterValue - getAsJsonContent()
要求を JsonNode タイプの反復可能なオブジェクトとして返します。
このメソッドは、要求本体が有効な JSON ペイロードである場合に、エッジ暗号化 のルールでのみ使用できます。要求本体にどのような形式が含まれているかわからない場合は、request オブジェクトの contentType フィールドを調べます。
要求が JsonNode オブジェクトとして返されたら、JSON API を使用してオブジェクトを反復処理し、フィールドを暗号化できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| JsonNode | 反復可能な JsonNode としての要求。 |
ParameterValue - getAsXmlContent()
要求の内容を XMLContent タイプの反復可能なオブジェクトとして返します。
このメソッドは エッジ暗号化 のルールでのみ使用できます。このメソッドでは、要求本体が有効な XML ペイロードであると仮定されます。contentType を確認してそのことを確かめることができます。
要求が XMLContent オブジェクトとして返されたら、XML API を使用してオブジェクトを反復処理し、フィールドを暗号化できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| XMLContent | XMLContent タイプの反復可能なオブジェクトとしての要求。 |
ParameterValue - encodedQueryFor(String tableName)
要素の値が、指定したテーブルのエンコードされたクエリーであることを指定します。
パラメーターでこの関数を呼び出すと、パラメーターの値が、指定したテーブルのエンコードされたクエリ文字列であることがプロキシに通知されます。プロキシは、エンコードされたクエリーを解析し、エンコードされたクエリーのフィールドのうち暗号化する必要があるフィールドを暗号化します。
| 名前 | タイプ | 説明 |
|---|---|---|
| tableName | 文字列 | クエリーの実行を想定するテーブル。 |
| タイプ | 説明 |
|---|---|
| なし |
ParameterValue - valueFor(String tableName, String fieldName)
要素の値が、指定したテーブルの指定したフィールドにマップされることを指定します。
このメソッドを要素値で呼び出すと、この要素の値が、指定したテーブルの指定したフィールドにマップされることがプロキシに通知されます。プロキシは、フィールドを暗号化する必要があるかどうかを確認します。
| 名前 | タイプ | 説明 |
|---|---|---|
| tableName | 文字列 | テーブル名。 |
| fieldName | 文字列 | フィールド名 |
| タイプ | 説明 |
|---|---|
| なし |