2014-04-02 41 views
1

我想知道如何最好地處理ASP.net web-api中的XSS攻擊。我有很多的API控制器。他們中的大多數都將json發佈到服務器上。ASP WebApi - 如何處理潛在的XSS攻擊

我們應該在什麼級別驗證字符串,以便它們不包含惡意<script>標記?

public class SomeModel 
{ 
    [NoXssPlease] 
    public string SomeProp {get;set;} 
} 

[Post] 
[NoXssPlease] 
public void Post 
{ 

} 

還是在全球過濾或處理水平的東西。我一直在尋找一些關於如何解決這個問題的信息,但是關於如何做這件事有不同的看法。

+0

你爲什麼要來裝飾只與'NoXssPlease',要防止對每個動作的權攻擊的具體行動? – Yasser

回答

0

的ASP.Net的Web API AntiXss使用下面的代碼來編碼和IsValid的方法與主要值進行比較:

string encodedValue = AntiXssEncoder.HtmlEncode(value.ToString(), false); 

而這個原因,如果例如「&」存在的主要價值的驗證失敗。 如果後面接字母字符,asp.net只會阻止'<'字符,它會通過'< 1'或'<'值。 下面簡單的代碼是你AntiXss實現:

public class AntiXss : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (value != null) 
     { 
      string strValue = value.ToString(); 
      //Regular Expression: ^(?:[^<]|<+[^A-Za-z\/<]|<+$)*$ 
      int idx = -1; 
      while ((idx = strValue.IndexOf('<', idx + 1)) >= 0 && idx + 1 < strValue.Length) 
      { 
       if (char.IsLetter(strValue[idx + 1]) || strValue[idx + 1] == '/') 
        return new ValidationResult("A potentially dangerous value was detected from the client."); 
      } 
     } 

     return ValidationResult.Success; 
    } 
}