在 Ballerina 中将参数传递给 sql 查询时出错

Error in passing parameters to sql query in Ballerina

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

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);

程序运行时出现此错误。

error: contacts_db_service:0.0.0/hello_service.bal:56:86: tainted value passed to sensitive parameter 'message'

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

*注意:split() 应用于传递给 cntname 的字符串值。 *

Ballerina 编译器内置了 "Taint Analyzer",它支持 Ballerina 成为安全感知编程语言。污点分析器将有助于防止许多安全漏洞,包括 SQLi、路径操作和 XXS。您可以通过“How to Write Secure Ballerina Programs”页面阅读更多相关信息。

但是,您执行 SQL 查询的方式是绝对正确的,没有安全问题。查看错误消息,第 56 行似乎应该是您将 caller->respond( resp ) 操作调用到 return HTTP 响应的位置。

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

如果是这种情况,请检查您尝试发送的响应内容是否是经过完全验证的值。污点分析器检测到您要发送的响应包含不受信任(污点)的数据,从而导致 XSS 或其他安全漏洞。您可以查看 this blog post 的 "Taint Analysis — Examples" 部分以了解此错误是如何发生的以及如何正确验证数据并减轻此错误。

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

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

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

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