우리가 만든 어떻게 그 :
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, "<.*?>"); //проверяем любые закрытые теги
}