.NET或其中一種語言強制執行清除不可信數據......或防止意外變量用於錯誤地點?擴展類型安全性以防止對需要「乾淨」數據的函數使用髒數據
這種情況的一個示例是,在SQL事務中使用用戶POST數據和「原始」響應。這可能會導致客戶端腳本漏洞的任何內容泄露給整個服務器受到威脅。
另一個例子是我必須將數據傳遞給COM對象進行進一步處理。
作爲C#,ASP.net和SQL開發人員,我的選擇是什麼?以確保我的用戶的髒位在清理前不會觸及任何內部的東西?是否有我可以利用的運行時(或編譯器)功能?
缺乏語言實際執行它,也許我可以只爲_dirty後綴添加到我的傳入變量。這是你推薦的最佳做法嗎?
專業人員如何解決這個問題?
更新
這裏是我要去
概念方向這基於
例如給出到目前爲止(具體SteveCzetty和Erlend)的答案是有點啓發:
public Interface ICleanForJavascript { bool IsCleanForJavascript(); }
public Interface ICleanForXSS { bool IsCleanForJavascript(); }
public class DirtyData
{
string Name {get; set;}
}
public class CleanData
{
private CleanData() {}
string Name {get; private set;}
// Perhaps use casting to support the conversion from Dirty to Clean data
// Might use this in an option explicit DirtyData CleanData(object o); command
public static CleanData Validate(DirtyData d)
{
CleanData data = new CleanData();
if (ValidateString(d.Name))
{
data.Name = d.Name
}
else
{
throw new ValidationException();
}
return CleanData;
}
}
[RequiresCleanedDataAttribute(ICleanForJavascript)]
public void DoSomething(CleanData data)
{
//...
}
Attribute RequiresCleanedDataAttribute(object arrayOfCleanings[])
{
// do some reflection on the method signature and see if the object supports the required interfaces
}
隨着上述,然後:
DoSomething(new DirtyData()); // Compiler Error, or runtime error if Attribute validation fails
DoSomething(CleanData.Validate(new DirtyData())); // Compiles
我想看到的,當髒數據被髮送到錯誤的地方,將拋出一個編譯器錯誤的任何技術。 – LamonteCristo 2012-02-16 15:07:29
過於寬泛的問題 – 2012-02-23 09:01:47