用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. 防止xss攻擊/注入
- 2. 防止命令行注入攻擊
- 3. 防止SQL注入和XSS攻擊
- 4. pgdb防止注入攻擊嗎?
- 5. 防止輸入型攻擊
- 6. 防止XSS攻擊
- 7. 防止XSS攻擊
- 8. 如何防止注入攻擊在Python中創建MySQL查詢
- 9. 這是否可以防止注入攻擊?
- 10. 準備語句會防止SQL注入攻擊嗎?
- 11. 使用存儲過程是否防止SQL注入/ XSXX攻擊?
- 12. hibernate命名查詢是否可以防止SQL注入攻擊?
- 13. str_replace的這種用法足以防止SQL注入攻擊嗎?
- 14. 防止在您自己的iPhone上使用sqlite注入攻擊?
- 15. 普通mysql準備語句防止注入攻擊?
- 16. 如何防止導致「cUrl後注入攻擊」?
- 17. 如何防止AspNetUsers表SQL注入攻擊?
- 18. SQLiteDatabase.insert()是否可以防止SQL注入攻擊?
- 19. 如何防止URL盲sql注入攻擊
- 20. 如何防止XXE攻擊
- 21. 防止數據庫攻擊
- 22. 防止Javascript和XSS攻擊
- 23. CakePHP的:防止XSS攻擊
- 24. Json.Net Wrapper防止Xss攻擊
- 25. angularjs防止XSS攻擊
- 26. 防止重複blockchain攻擊
- 27. SQL注入攻擊
- 28. SQL注入攻擊
- 29. JavaScript注入攻擊
- 30. 阻止IP地址,防止DoS攻擊
['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'來防止欺騙。這是非常多的。 –
你有一個很好的例子 –