балерина: испорченное значение передается чувствительному параметру - PullRequest
0 голосов
/ 25 сентября 2018

Я новичок в балерине.Я хочу получить пользовательский параметр из командной строки и установить его для полезной нагрузки json.Примерно так:

ballerina run client.bal testInput

Ниже мой client.bal

endpoint http:Client clientEndpoint {
    url: "http://localhost:9090"
};

function main(string... args) {
    http:Request req = new;
    string userInput = args[0];

    json jsonMsg = {input: userInput};
    req.setJsonPayload(jsonMsg);

Но когда я это делаю, я получаю ошибку компиляции: испорченное значение передается чувствительному параметру 'payload'

Я пытался выполнить проверку следующим образом, но все равно получаю ошибку.

string userInput = "empty";
if(!(args[0] == "")) {
    userInput = args[0];
}

Кто-нибудь знает обходной путь для этого.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Неиспользуемое унарное выражение - это быстрый способ исправить ошибку компиляции здесь.Но правильный подход - правильно выполнить проверку содержимого перед его передачей в защищенную функцию.

Например, у нас может быть функция проверки / очистки, которая принимает испорченное значение и возвращает незапятнанное значение после выполнениянекоторая проверка, как показано ниже.

function validate(string input) returns @untainted string {
    string regEx = "[^a-zA-Z]";
    return input.replace(regEx, "");
}

В приведенном выше примере, используя аннотацию @untainted, мы можем пометить возвращаемое значение функции как незапятнанное значение.Это значение теперь может быть напрямую передано в защищенную функцию, которая ожидает незапятнанное значение.Таким образом, мы можем переписать ваш пример, как показано ниже.

import ballerina/http;

endpoint http:Client clientEndpoint {
    url: "http://localhost:9090"
};

function main(string... args) {
    http:Request req = new;
    string userInput = validate(args[0]);
    json jsonMsg = {input: userInput};
    req.setJsonPayload(jsonMsg);
    // rest of the program
}

function validate(string input) returns @untainted string {
    string regEx = "[^a-zA-Z]";
    return input.replace(regEx, "");
}

Вышеуказанная функция проверки является только примером.Но в зависимости от требования мы можем написать функцию для фактической проверки и возврата защищенного содержимого.Более подробная информация доступна по адресу: https://ballerina.io/learn/by-example/taint-checking.html

0 голосов
/ 25 сентября 2018

Я искал о проверке порчи балерины.Параметр path в вызове клиента HTTP обозначается как чувствительный к безопасности.Компилятор генерирует ошибку, когда ненадежные данные, передаваемые в чувствительный к безопасности параметр

, могут использовать унарное выражение «untaint» для обозначения того, что исходное значение является доверенным.Но важно сделать правильную проверку данных, чтобы убедиться, что ввод не приводит к угрозе безопасности.

Поэтому мы можем исправить ошибку компиляции следующим образом.

json jsonMsg = {input: untaint userInput};

Но этоважно всегда проверять входные данные.Ура !!!

...