在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
答案 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)