【问题标题】:Kentico - Multiple ##WHERE## macro in query textKentico - 查询文本中的多个 ##WHERE## 宏
【发布时间】:2017-01-26 12:05:02
【问题描述】:

在 QueryDataSource 中使用多个 ##WHERE## 宏时收到以下错误

安全异常

描述:应用程序试图执行安全策略不允许的操作。要授予此应用所需的权限,请联系您的系统管理员或在配置文件中更改应用的信任级别。

我在 Where 子句中有一个带有以下表达式的 QueryDataSource:

ranConStyle = '{%QueryString.cs#%}' and rgnme= {%QueryString.csnme.cs#%}

查询是:

Select * From CB_Gallery, CB_Products
WHERE 
x= xId AND 
y= 'Y' AND z= 'Y' AND 
(##WHERE##) 
ORDER BY z ASC

【问题讨论】:

    标签: kentico


    【解决方案1】:

    ##WHERE## 和其他查询宏必须包含有效的 SQL 语法,并且这些宏应该替换简单的 where 条件,而不是向查询中注入多个参数。

    您可以替换宏的整个 where 条件,使属性类似于 x= xId AND y= 'Y' AND z= 'Y' AND ranConStyle = '{%QueryString.cs#%}' AND rgnme= { %QueryString.csnme.cs#%}

    但在我看来,我不确定它是否会通过 SQL 语法检查。

    这些宏从未打算用于复杂的用途,而只是为了让您能够更改来自 Web 部件的查询而不重写它,或者允许您在更多地方使用相同的查询,但这受到安全性的限制。这是一项安全策略,就像使用这些宏向 Web 部件甚至 QueryStrings 和其他变量注入各种输入一样,这些输入可能会受到最终用户或站点访问者的影响。

    【讨论】:

      【解决方案2】:

      您遇到的错误与应用程序信任级别有关,这是一项 ASP.NET 安全功能。

      确保您将 Kentico 实例托管在 full trust 环境中。 从 Kentico 8.1 开始,仅支持完全信任 - 您可以查看托管要求 here

      【讨论】:

        【解决方案3】:

        你可以试试
        选择 * 从 ( 从 CB_Gallery、CB_Products 中选择 * 在哪里 x= xId 与 y= 'Y' 和 z= 'Y' 和 ) A (##WHERE##) 按 z ASC 排序

        【讨论】:

          【解决方案4】:

          问题可能是某些数据库值中有撇号,当它们被执行时,Kentico 正在停止执行以避免任何 SQL 注入攻击。

          访问您希望它们带有撇号的值的最佳方法是使用 SQL 注入安全语法。

          {%SQLEscape(QueryString.cs)%} {%SQLEscape(QueryString.csnme.cs)%}
          

          您可以在此处阅读有关如何编写 SQL 注入安全宏语法的信息

          http://devnet.kentico.com/articles/security-avoiding-sql-injection-(sqli)

          【讨论】:

            猜你喜欢
            • 2017-08-13
            • 1970-01-01
            • 2014-12-13
            • 2019-04-05
            • 1970-01-01
            • 1970-01-01
            • 2020-08-01
            • 1970-01-01
            • 2020-06-11
            相关资源
            最近更新 更多