64 lines
1.7 KiB
C#
64 lines
1.7 KiB
C#
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
namespace YLErp.Web.App
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public class AntiXssConverter : JsonConverter<string>
|
|
{
|
|
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
|
{
|
|
return reader.GetString();
|
|
}
|
|
|
|
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
|
|
{
|
|
if (value != null)
|
|
{
|
|
var needEscape = false;
|
|
|
|
foreach (var ch in value)
|
|
{
|
|
if (ch == '<' || ch == '>')
|
|
{
|
|
needEscape = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (needEscape)
|
|
{
|
|
var sb = new StringBuilder(value.Length + 30);
|
|
|
|
foreach (var c in value)
|
|
{
|
|
if (c == '<')
|
|
{
|
|
sb.Append("<");
|
|
}
|
|
else if (c == '>')
|
|
{
|
|
sb.Append(">");
|
|
}
|
|
else if (c == '&')
|
|
{
|
|
sb.Append("&");
|
|
}
|
|
else
|
|
{
|
|
sb.Append(c);
|
|
}
|
|
}
|
|
|
|
value = sb.ToString();
|
|
}
|
|
}
|
|
|
|
writer.WriteStringValue(value);
|
|
}
|
|
}
|
|
}
|