在 Ballerina 服务中调用后端时传递动态请求路径
Passing dynamic request path when calling backends in Ballerina service
我正在尝试动态传递后端请求的路径。但是路径变量是敏感参数,因此不允许我传递传入路径或任何字符串,如 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);
...
}
...
}
HTTP 客户端调用中的路径参数被指定为安全敏感。将不受信任的数据传递到安全敏感参数时,编译器会生成错误
"untaint" 一元表达式可用于表示过程值是可信的。但必须进行适当的数据验证以确保输入不会导致安全威胁。
var studentInfoResp = studentInfoEP->get("/student" + untaint studentId);
Ballerina 程序预计会产生和使用网络服务,这些程序很容易引入安全漏洞,例如 SQL 注入、未经验证的重定向等。因此,Ballerina 语言的设计方式使 Ballerina程序在设计上是安全的。这种语言设计包括 taint checking 和传播以及集成的身份验证和授权体系结构。
get()
的参数被修饰为安全敏感的,因此 Ballerina 编译器不允许将 'untrusted data' 传递给该函数。不受信任的数据可能来自程序参数、HTTP 请求、文件等。请参阅“How to Write Secure Ballerina Programs”以了解有关此主题的更多信息。
此处,在您的示例中,req.rawPath
可能包含受污染的值,因此 Ballerina 编译器不允许您将此受污染的值传递给敏感参数。在将受污染的值传递给敏感参数之前,您需要执行明确的数据清理。有两种方法可以做到这一点。
方法一:
string rawPath = untaint req.rawPath;
var studentInfoResp = studentInfoEP->get(rawPath);
请注意此处的 untaint
关键字。您可以使用 untaint unary expression
简单地将受污染的值标记为安全值。
方法二:
string rawPath = sanitizePath(req.rawPath);
var studentInfoResp = studentInfoEP->get(rawPath);
此 sanitizePath
函数通过使用 @untainted
注释装饰 return 类型来验证路径和 return 未受污染的值。
function sanitizePath(string rawPath) returns @untainted string {
string value = rawPath;
// Validate the path value and return
return value;
}
我正在尝试动态传递后端请求的路径。但是路径变量是敏感参数,因此不允许我传递传入路径或任何字符串,如 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);
...
}
...
}
HTTP 客户端调用中的路径参数被指定为安全敏感。将不受信任的数据传递到安全敏感参数时,编译器会生成错误
"untaint" 一元表达式可用于表示过程值是可信的。但必须进行适当的数据验证以确保输入不会导致安全威胁。
var studentInfoResp = studentInfoEP->get("/student" + untaint studentId);
Ballerina 程序预计会产生和使用网络服务,这些程序很容易引入安全漏洞,例如 SQL 注入、未经验证的重定向等。因此,Ballerina 语言的设计方式使 Ballerina程序在设计上是安全的。这种语言设计包括 taint checking 和传播以及集成的身份验证和授权体系结构。
get()
的参数被修饰为安全敏感的,因此 Ballerina 编译器不允许将 'untrusted data' 传递给该函数。不受信任的数据可能来自程序参数、HTTP 请求、文件等。请参阅“How to Write Secure Ballerina Programs”以了解有关此主题的更多信息。
此处,在您的示例中,req.rawPath
可能包含受污染的值,因此 Ballerina 编译器不允许您将此受污染的值传递给敏感参数。在将受污染的值传递给敏感参数之前,您需要执行明确的数据清理。有两种方法可以做到这一点。
方法一:
string rawPath = untaint req.rawPath;
var studentInfoResp = studentInfoEP->get(rawPath);
请注意此处的 untaint
关键字。您可以使用 untaint unary expression
简单地将受污染的值标记为安全值。
方法二:
string rawPath = sanitizePath(req.rawPath);
var studentInfoResp = studentInfoEP->get(rawPath);
此 sanitizePath
函数通过使用 @untainted
注释装饰 return 类型来验证路径和 return 未受污染的值。
function sanitizePath(string rawPath) returns @untainted string {
string value = rawPath;
// Validate the path value and return
return value;
}