Предполагается, что программы 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;
}