在Ballerina服务中调用后端时传递动态请求路径

时间:2018-05-23 22:02:53

标签: ballerina

我正在尝试动态传递后端请求的路径。但路径变量是敏感参数,因此不允许我传递传入路径或任何字符串,如studentInfoEP-> get(“/ student”+ studentId);

知道我们该怎么做吗?

cron

2 个答案:

答案 0 :(得分:4)

芭蕾舞女演员的节目有望产生和消费网络服务,这些节目很容易引入安全漏洞,如SQL注入,未经验证的重定向等。因此,芭蕾舞女演员语言的设计方式使芭蕾舞女演员的节目在设计上是安全的。该语言设计包括taint checking和传播以及集成的身份验证和授权架构。

get()的参数被设置为安全敏感,因此Ballerina编译器不允许将“不受信任的数据”传递给此函数。不受信任的数据可能来自程序参数,HTTP请求,文件等。请参阅“How to Write Secure Ballerina Programs”以了解有关此主题的更多信息。

此处,在您的示例中,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;
}

答案 1 :(得分:3)

HTTP客户端调用中的path参数被指定为安全敏感。当不受信任的数据传递到安全敏感参数

时,编译器会生成错误

“untaint”一元表达式可用于表示正在进行的值是可信的。但必须进行适当的数据验证,以确保输入不会导致安全威胁。

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