Kentico - 查询文本中的多个## WHERE ##宏

时间:2017-01-26 12:05:02

标签: kentico

在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

4 个答案:

答案 0 :(得分:0)

## WHERE ##和其他查询宏必须包含有效的SQL语法,并且这些宏应该在不将多个参数注入查询的情况下替换simple。

你可以替换宏的整个条件,所以属性就像x = xId和y =' Y' AND z =' Y' AND ranConStyle =' {%QueryString.cs#%}' AND rgnme = {%QueryString.csnme.cs#%}

但是从我的脑海中我不确定它是否会通过SQL语法检查。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你可以试试像这样的东西 选择*从( 选择*来自CB_Gallery,CB_Products 哪里 x = xId AND y =' Y' AND z =' Y'和 )A(## WHERE ##) ORDER BY z ASC

答案 3 :(得分:0)

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

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

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

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

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