芭蕾舞女演员:污染值传递给敏感参数

时间:2018-09-25 10:32:59

标签: ballerina

我是芭蕾舞女演员的新手。我想从命令行获取用户参数并将其设置为json有效负载。 像这样:

ballerina run client.bal testInput

以下是我的客户。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 :(得分:3)

untaint一元表达式是一种在此处修复编译错误的快速方法。但是正确的方法是在将内容传递到安全功能之前正确进行内容验证。

例如,我们可以有一个validate / sanitize函数,该函数接受污染的值并在进行如下所示的验证后返回未污染的值。

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

答案 1 :(得分:2)

我搜索了芭蕾舞演员的异味检查。 HTTP客户端调用中的path参数被指定为安全敏感的。将不受信任的数据传递给安全敏感的参数时,编译器会生成错误

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

因此,我们可以像这样解决编译错误。

json jsonMsg = {input: untaint userInput};

但是始终验证输入很重要。干杯!!!