Передача динамического пути запроса при вызове бэкэндов в сервисе Ballerina - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь передать путь моего внутреннего запроса динамически.Но переменная пути является чувствительным параметром и, следовательно, не позволяет мне передавать входящий путь или любую строку, например, studentInfoEP-> get ("/ student" + studentId);

Есть идеи, как мы можем это сделать?

endpoint http:Client studentInfoEP {
    url: "http://localhost:9091/studentinfo"
};

@http:ServiceConfig { basePath: "/studentfinder" }
service<http:Service> studentFinder bind listener {


    @http:ResourceConfig {
        methods: ["GET"],
        path: "/{studentId}"
    }
    getStudentById(endpoint client, http:Request req, string studentId) {

        var studentInfoResp = studentInfoEP->get(req.rawPath);
        ...
    }
    ...
}

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Предполагается, что программы Ballerina производят и используют сетевые сервисы, и эти программы могут легко вводить уязвимости безопасности, такие как инъекция SQL, непроверенное перенаправление и т. Д. Поэтому язык Ballerina разработан таким образом, чтобы обеспечить безопасность программ Ballerina.Этот языковой дизайн включает в себя проверку заражения и распространение, а также встроенную архитектуру аутентификации и авторизации.

Параметры get() оформлены как чувствительные к безопасности, поэтому компилятор Ballerina не допустит «недоверенных»данные, которые будут переданы этой функции.Ненадежные данные могут поступать из аргументов программы, HTTP-запросов, файлов и т. Д. Пожалуйста, обратитесь к " Как писать программы для безопасной балерины ", чтобы узнать больше об этой теме.

Здесь, в вашем примере, req.rawPath может содержать испорченное значение, поэтому компилятор Ballerina не позволит вам передать это испорченное значение чувствительному параметру.Вы должны выполнить явную очистку данных перед передачей испорченных значений чувствительным параметрам.Есть два способа сделать это.

Подход 1:

string rawPath = untaint req.rawPath;
var studentInfoResp = studentInfoEP->get(rawPath);

Обратите внимание на ключевое слово untaint здесь.Вы можете просто пометить испорченное значение как безопасное, используя untaint unary expression.

Подход 2:

string rawPath = sanitizePath(req.rawPath);
var studentInfoResp = studentInfoEP->get(rawPath);

Эта функция sanitizePath проверяет путь и возвращает незапятнанное значение, декорируя возвращаемый тип аннотацией @untainted.

function sanitizePath(string rawPath) returns @untainted string {
    string value = rawPath;
    // Validate the path value and return
    return value;
}
0 голосов
/ 24 мая 2018

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

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

var studentInfoResp = studentInfoEP->get("/student" + untaint studentId);
...