5

我正在开发一个简单的芭蕾舞女演员应用程序,它检索email给定名称(cntname)的。

string sqlString = "SELECT email FROM CONTACTS WHERE Name=?";
// Retrieve employee data by invoking select action defined in ballerina sql client
var ret = contactDB->select(sqlString, (),cntname);

运行程序时出现此错误。

错误:contacts_db_service:0.0.0/hello_service.bal:56:86:污染值传递给敏感参数“消息”

从 中返回的值extractName()(如下所示)被传递给cntname

在此处输入图像描述 *注意: split()应用于传递给的字符串值cntname。*

4

2 回答 2

4

Ballerina 编译器内置“Taint Analyzer”,支持 Ballerina 成为一种安全感知编程语言。污点分析器将有助于防止许多安全漏洞,包括 SQLi、路径操作和 XXS。您可以通过“如何编写安全的芭蕾舞女演员程序”页面了解更多信息。

但是,您执行 SQL 查询的方式是绝对正确的,并且不存在安全问题。查看错误消息,似乎第 56 行应该是您调用caller->respond( resp )操作以返回 HTTP 响应的位置。

为什么我建议这样做是因为是我们为动作参数caller->respond( resp )设置一些值的位置。messagerespond

如果是这种情况,请检查您尝试发送的响应内容是否是完全验证的值。污点分析器检测到您要发送的响应包含不受信任(受污染)的数据,从而导致 XSS 或其他安全漏洞。您可以查看此博客文章的“污染分析 - 示例”部分,以了解此错误是如何发生的,以及如何正确验证数据并缓解此错误。

此外,如果您可以分享完整的 Ballerina 代码,我可以更新答案,提供有关如何解决确切问题的更多详细信息。

于 2018-07-09T19:25:02.993 回答
1

Ballerina 有一个内置的“Taint Analyzer”来防止安全漏洞。因此,您可以在将值传递给函数的敏感参数字段之前执行这样的验证。

function sanitizeAndReturnUntainted(string input) returns @untainted string {
    string regEx = "[^a-zA-Z]";
    return input.replace(regEx, "");
}

注意:这只是一个示例验证。您可以验证输入是否为数字、浮点数等。

于 2018-10-05T07:16:04.053 回答