1

在遵循 [1] 时,如果 select 语句如下所示,则不会引发编译器错误。在这种情况下,“id”可以是路径/查询参数。这是预期的行为吗?

 var response = customerDB->select("SELECT * FROM customer WHERE id =? ",(),id);

[1] https://ballerina.io/learn/by-example/taint-checking.html

4

1 回答 1

1

您给出的示例不会导致 SQL 注入威胁,因为您没有将 id 参数附加到查询中。您将“id”值作为参数传递给选择操作,以便在内部构造一个适当的准备好的语句。因此不会发生编译错误。

以下应该会导致编译器错误。

    var response = customerDB->select("SELECT * FROM customer WHERE id = " + id, ());

您可以参考这个以获取 SQL 注入的示例。

于 2018-07-26T07:00:00.230 回答