2013-11-25 2 views

답변

1

우리가 만든 어떻게 그 :

public virtual Dictionary<string, string> StringFieldsAsEnum 
    { 
     get 
     { 
      return new Dictionary<string, FieldValue>() 
       { 
        {"Name", new FieldValue(this.Name, AllowHtml)}, 
        {"Fio", new FieldValue(this.Fio, AllowHtml)}, 
        {"Email", new FieldValue(this.Email, AllowHtml)}, 
        {"Post", new FieldValue(this.Post, AllowHtml)} 
       }; 
     } 
    } 

3. 그리고 마지막으로 검증에서 확인하십시오 :

체크 HTML 방법 DTO에 대한

public class SecurityValidationFeature : IPlugin 
{ 
    private readonly ISecurityValidator[] _validators; 

    public SecurityValidationFeature(ISecurityValidator[] validators) 
    { 
     _validators = validators; 
    } 

2. 인터페이스에 대한 1. 추가 플러그인

public void Validate(Dictionary<string, FieldValue> fields) 
    { 
     if (fields == null || fields.Count == 0) 
      return; 

     Dictionary<string, string> failed = new Dictionary<string, string>(); 
     foreach (var field in fields) 
     { 
      if (string.IsNullOrEmpty(field.Value.Value)) 
       continue; 

      if (IsXssInjectible(field.Value)) 
      { 
       failed.Add(field.Key, field.Value.Value); 
      } 
     } 

     if (failed.Count > 0) 
      throw new XssException(failed); 
    } 

    private bool IsXssInjectible(Field field) 
    { 
     return !field.AllowHtml && HasHtmlTags(field.Value); 
    } 

    private bool HasHtmlTags(string input) 
    { 
     return Regex.IsMatch(input, "<.*?>"); //проверяем любые закрытые теги 
    } 
관련 문제