我正在开发一个简单的芭蕾舞应用程序,该应用程序检索给定名称(unsigned short
)的email
。
cntname
运行程序时出现此错误。
错误:contacts_db_service:0.0.0 / hello_service.bal:56:86:已将污点值传递给敏感参数“消息”
从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);
返回的值(如下所示)被传递到extractName()
。
答案 0 :(得分:4)
Ballerina编译器具有内置的“ Taint Analyzer”,它支持Ballerina成为一种可识别安全的编程语言。污染分析器将有助于防止许多安全漏洞,包括SQLi,路径操作和XXS。您可以浏览“ How to Write Secure Ballerina Programs”页面以了解有关此内容的更多信息。
但是,您执行SQL查询的方式是绝对正确的,并且没有安全性问题。查看错误消息,似乎第56行应该是您调用caller->respond( resp )
操作以返回HTTP响应的位置。
我之所以建议这样做是因为caller->respond( resp )
是我们在message
动作的respond
参数中设置一些值的位置。
在这种情况下,请检查您尝试发送的响应内容是否为完全验证的值。污染分析器检测到您将要发送的响应包含不受信任(受污染)的数据,从而导致XSS或其他安全漏洞。您可以查看this blog post的“污染分析-示例”部分,以了解如何发生此错误以及如何正确验证数据并减轻此错误。
此外,如果您可以共享完整的Ballerina代码,则可以使用有关如何解决确切问题的更多详细信息来更新答案。
答案 1 :(得分:1)
Ballerina具有内置的“ Taint Analyzer”以防止安全漏洞。因此,您可以在将值传递到函数的敏感参数字段之前执行类似的验证。
function sanitizeAndReturnUntainted(string input) returns @untainted string {
string regEx = "[^a-zA-Z]";
return input.replace(regEx, "");
}
注意:这仅是示例验证。您可以验证输入是否为数字,浮点型等。