我一直在互联网上搜索WiQL注入保护指南,但还没有找到任何内容。这适用于Azure开发人员操作(ADO(,以前称为Visual Studio团队服务(VSTS(API。
对于此代码,我应该如何防止WiQL注入?这里的文档没有显示任何关于防止注入攻击的内容。这里有什么建议?只是阻止字符?
string projectName = "user supplied input";
string tenantId= "user supplied input";
var wiql = new Wiql()
{
Query = $@"Select [Id] From WorkItems
Where [System.TeamProject] = '{projectName}'
And [Custom.TenantId] = '{tenantId}'
Order By [State] Asc, [Changed Date] Desc"
};
// create instance of work item tracking http client
var adoUri = new Uri($"{VSTS_URL}");
using (var trackingClient = new WorkItemTrackingHttpClient(adoUri, credentials))
{
// execute the query to get the list of work items in the results
var result = await trackingClient.QueryByWiqlAsync(wiql);
}
在这种情况下,我将遵循这里的基础知识,请参阅关于SQL注入的OWASP指南,我们可以肯定地采用以下两种做法。
- 跳过所有用户提供的输入
- 白名单输入验证
白名单输入验证
合法的输入可以通过将其列入白名单而被允许进入系统,白名单通常比列入黑名单更可靠,因为在这种情况下,有效组合的集合通常是有限的。在任何情况下,这都应该是主要的防御措施,并且可以与其他输入验证技术相结合。
逃离所有用户提供的输入
这种技术是这样工作的。每个系统都支持特定于特定查询类型的一个或多个字符转义方案。如果使用正确的转义方案转义所有用户提供的输入,系统将不会将输入与开发人员编写的WiQL代码混淆。
有关支持的转义符的更多参考信息,请参阅此处https://learn.microsoft.com/en-us/azure/devops/boards/queries/wiql-syntax?view=azure-devops
建议进一步阅读如何在TFS代码搜索中转义搜索字符串
这里的WIQL只能查看工作项,不会向数据库注入任何数据。这相当于从门户网站或支持的客户端(如Visual Studio团队资源管理器和团队资源管理者无处不在(创建查询。检查以下链接:
https://learn.microsoft.com/en-us/azure/devops/boards/queries/using-queries?view=azure-devops
默认情况下,所有项目成员和具有干系人访问权限的用户都可以查看和运行托管查询。如果您的意思是不希望用户使用DevOpsRESTapi运行工作项查询。您需要将该用户从团队项目中删除。