用C#防止MDX注入攻击的好方法是什么?我目前使用的ADOMDClient是否有一个不同的客户端,我应该使用?防止MDX注入攻击
2
A
回答
3
我们可以通过将用户指定的字符串传递给MDX StrToSet,StrToTuple,StrToMember和StrToValue函数来创建参数化MDX查询以防止MDX注入攻击。
以下是来自this MSDN page的MDX StrToSet功能的几个示例。
以下示例使用StrToSet函数返回State-Province属性层次结构的成员集合。设置规范提供了有效的MDX集表达式。
SELECT StrToSet ('[Geography].[State-Province].Members')
ON 0
FROM [Adventure Works]
以下示例返回一个错误,由于约束标志。虽然设置规范提供了有效的MDX集表达式,但CONSTRAINED标志需要设置规范中的合格或不合格成员名称。
SELECT StrToSet ('[Geography].[State-Province].Members', CONSTRAINED)
ON 0
FROM [Adventure Works]
下面的代码示例演示如何创建一个参数化查询,以及如何使用AdomdConnection对象来执行它。
假设我们有以下通用的C#方法,它执行参数化的MDX查询并返回CellSet。
public CellSet GetCellSet(string connectionString, string query, IDictionary<string, object> parms)
{
using (var conn = new AdomdConnection(connectionString))
{
// Open the connection.
conn.Open();
// Create the command.
using (var cmd = conn.CreateCommand())
{
// Set the command query.
cmd.CommandText = query;
// Add any query parameters.
if (parms != null)
{
foreach (var kv in parms)
{
var parameter = cmd.CreateParameter();
parameter.ParameterName = kv.Key;
parameter.Value = kv.Value;
cmd.Parameters.Add(parameter);
}
}
// Execute the query and return the CellSet.
return cmd.ExecuteCellSet();
}
}
}
假设我们有另一种方法允许客户端传递MDX集表达式的字符串表示形式。该方法将从多维数据集中选择集合并返回结果的CellSet。
public CellSet GetMdxSetOnColumns(string setExpression)
{
var connectionString = "replace with your connection string";
// The query parameter @TheSet will be replaced with setExpression.
var query = "SELECT StrToSet(@TheSet) ON 0 FROM [Adventure Works]";
// Add the passed in string as a query parameter.
var parms = new Dictionary<string, object>();
// You can omit the "@" in front of the parameter name here.
parms.Add("TheSet", setExpression);
return GetCellSet(connectionString, query, parms);
}
客户端代码可以像这样调用此方法。
var cellSet = GetMdxSetOnColumns("[Geography].[State-Province].Members");
相关问题
- 1. pgdb防止注入攻击吗?
- 2. 防止SQL注入和XSS攻击
- 3. 防止命令行注入攻击
- 4. 防止输入型攻击
- 5. 如何防止AspNetUsers表SQL注入攻击?
- 6. 防止在您自己的iPhone上使用sqlite注入攻击?
- 7. 准备语句会防止SQL注入攻击吗?
- 8. 如何防止URL盲sql注入攻击
- 9. 这是否可以防止注入攻击?
- 10. 普通mysql准备语句防止注入攻击?
- 11. str_replace的这种用法足以防止SQL注入攻击吗?
- 12. 使用存储过程是否防止SQL注入/ XSXX攻击?
- 13. Json.Net Wrapper防止Xss攻击
- 14. 防止重复blockchain攻击
- 15. angularjs防止XSS攻击
- 16. 如何防止XXE攻击
- 17. SQL注入攻击
- 18. SQL注入攻击
- 19. 阻止IP地址,防止DoS攻击
- 20. 如何防止从UI中传入SQL查询时发生SQL注入攻击
- 21. Android防止人为攻击SSL中间人攻击
- 22. SQL注入攻击和django
- 23. 网络注入攻击
- 24. 的iframe注入攻击
- 25. Erlang和SQL注入攻击
- 26. Opencart的注入攻击
- 27. 如何防止或阻止拒绝收入攻击?
- 28. 防止jQuery的CSRF和XSRF攻击$ .post
- 29. PHP:如何完全防止XSS攻击?
- 30. 防止攻击者获得系统
['AdomdCommand'具有'Parameters'](https://docs.microsoft.com/en-us/sql/analysis-services/multidimensional-models/mdx/using-variables-and-parameters- mdx)和['STRTOMEMBER'](https://docs.microsoft.com/en-us/sql/mdx/strtomember-mdx)具有'CONSTRAINED'来防止欺骗。这是非常多的。 –
你有一个很好的例子 –