将参数传递给Ballerina中的SQL查询时出错

时间:2018-07-08 09:27:32

标签: ballerina

我正在开发一个简单的芭蕾舞应用程序,该应用程序检索给定名称(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()

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

2 个答案:

答案 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, "");
}

注意:这仅是示例验证。您可以验证输入是否为数字,浮点型等。