Security 如何防止WiQL注入

Security 如何防止WiQL注入,security,azure-devops,wiql,Security,Azure Devops,Wiql,我一直在互联网上搜索WiQL注入保护指南,但还没有找到任何内容。这是针对以前称为VisualStudioTeamServices(VSTS)API的Azure开发人员操作(ADO) 对于这段代码,我应该如何防止WiQL注入?这里没有显示任何关于防止注入攻击的内容。这里有什么建议?仅仅是阻止“角色”吗 string projectName = "user supplied input"; string tenantId= "user s

我一直在互联网上搜索WiQL注入保护指南,但还没有找到任何内容。这是针对以前称为VisualStudioTeamServices(VSTS)API的Azure开发人员操作(ADO)

对于这段代码,我应该如何防止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代码混淆

    有关支持的转义字符的更多参考信息,请参见此处


    建议进一步阅读

    在本例中,我将遵循这里的基础知识,参考关于SQL的OWASP指南,我们肯定可以采用以下两种做法

  • 转义所有用户提供的输入
  • 白名单输入验证
  • 白名单输入验证

    合法输入可以通过白名单进入系统,白名单通常比黑名单更可靠,因为在这种情况下,有效组合的集合通常是有限的。这在任何情况下都应该是主要的防御措施,并且可以与其他输入验证技术相结合

    转义所有用户提供的输入

    这种技术的工作原理是这样的。每个系统都支持一个或多个特定于某些查询类型的字符转义方案。如果使用正确的转义方案转义所有用户提供的输入,系统将不会将输入与开发人员编写的WiQL代码混淆

    有关支持的转义字符的更多参考信息,请参见此处


    建议进一步阅读

    此处的WIQL只能查看工作项,它不会将任何数据注入数据库。这相当于从web门户或受支持的客户端(如VisualStudioTeamExplorer和TeamExplorer Everywhere)创建查询。检查以下链接:


    默认情况下,具有涉众访问权限的所有项目成员和用户都可以查看和运行托管查询。如果您的意思是不希望用户使用DevOpsRESTAPI运行工作项查询。您需要从团队项目中删除该用户。

    此处的WIQL只能查看工作项,它不会将任何数据注入数据库。这相当于从web门户或受支持的客户端(如VisualStudioTeamExplorer和TeamExplorer Everywhere)创建查询。检查以下链接:


    默认情况下,具有涉众访问权限的所有项目成员和用户都可以查看和运行托管查询。如果您的意思是不希望用户使用DevOpsRESTAPI运行工作项查询。您需要将该用户从团队项目中删除。

    能否详细说明“WiQL注入保护”?您的意思是不希望用户使用DevOpsRESTAPI运行查询吗?这里的WIQL只能查看工作项,它不会向数据库中注入任何数据。您的问题有任何更新吗?您希望用户能够为查询提供单个值。租户。用户名。等等。你不希望他们能够指定“tenantId”或“1”=“1”,然后突然拉取大量条目。你知道。标准SQL注入,但这次是WiQL@CeceDong MSFT能否请您详细说明“WiQL注入保护”?您的意思是不希望用户使用DevOpsRESTAPI运行查询吗?这里的WIQL只能查看工作项,它不会向数据库中注入任何数据。您的问题有任何更新吗?您希望用户能够为查询提供单个值。租户。用户名。等等。你不希望他们能够指定“tenantId”或“1”=“1”,然后突然拉取大量条目。你知道。标准SQL注入,但这次是WiQL@切东msftok。假设tenantId来自URL参数/foo/someapi?tenantId=adsasdasdasd'或'1'='1他们突然向查询中注入了额外的条件。我们希望以最安全的方式避免这种情况。通常你使用事先准备好的陈述。我在这里没有看到任何准备好的语句库。默认情况下,所有项目成员和具有涉众访问权限的用户都可以查看和运行托管查询。可以查询所有支持的WiQL。恐怕你不能限制WiQL。我的回答有帮助吗?没有。我的一部分人想把这个问题留到将来添加注射保护时再回答。或者将其提供给任何可以提供“黑客共同消毒”正则表达式的人。您可以在以下网站提交功能请求:。好的。假设tenantId来自URL参数/foo/someapi?tenantId=adsasdasdasd'或'1'='1他们突然向查询中注入了额外的条件。我们希望以最安全的方式避免这种情况。通常你使用事先准备好的陈述。我在这里没有看到任何准备好的语句库。默认情况下,所有项目成员和具有涉众访问权限的用户都可以查看和运行托管查询。可以查询所有支持的WiQL。恐怕你不能限制WiQL。我的回答有帮助吗?没有。我的一部分人想把这个问题留到将来添加注射保护时再回答。或者把它给任何能提供h的人