我已经在互联网上搜索了WiQL注入保护指南,但还没有找到任何东西。这适用于Azure Dev Ops (ADO) (以前称为Visual Studio Team Services (VSTS) API )。
对于这段代码,我应该如何防止WiQL注入?The documentation在这里没有显示任何关于防止注入攻击的内容。这里的建议是什么?只是防止‘字符?
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);
}发布于 2020-12-02 03:15:26
在这种情况下,我将遵循这里的基础知识,参考OWASP关于SQL injection的指南,我们可以肯定地采用以下两种做法。
转义所有用户提供的Input
输入验证
白名单输入验证
可以通过将合法输入列入白名单来允许合法输入进入系统,白名单通常比黑名单更可靠,因为在这种情况下,有效组合的集合通常是有限的。在任何情况下,这都应该是主要的防御措施,并且可以与其他输入验证技术结合使用。
转义所有用户提供的输入的
这项技术是这样工作的。每个系统支持特定于某些类型的查询的一个或多个字符转义方案。如果您随后使用正确的转义方案对所有用户提供的输入进行转义,则系统不会将输入与开发人员编写的WiQL代码混淆。
有关支持的转义字符的更多参考信息,请参阅此处的https://docs.microsoft.com/en-us/azure/devops/boards/queries/wiql-syntax?view=azure-devops
发布于 2020-12-02 15:59:38
这里的WIQL只能查看工作项,它不会向数据库注入任何数据。它等同于从web门户或从支持的客户端创建查询,例如Visual Studio团队资源管理器和团队资源管理器Everywhere。检查下面的链接:
https://docs.microsoft.com/en-us/azure/devops/boards/queries/using-queries?view=azure-devops
默认情况下,具有利益相关者访问权限的所有项目成员和用户都可以查看和运行托管查询。如果您的意思是不希望用户使用DevOps REST api运行工作项查询。您需要从团队项目中移除该用户。
https://stackoverflow.com/questions/65094691
复制相似问题