C# 是否有比AllowHtml属性更好的方法允许用户输入<;后跟文本框ASP.NET MVC中的字母

C# 是否有比AllowHtml属性更好的方法允许用户输入<;后跟文本框ASP.NET MVC中的字母,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我认为这种方法允许在用户输入字段中使用html: 但我需要的是不允许HTML,我只需要用户能够输入

我认为这种方法允许在用户输入字段中使用html:

但我需要的是不允许HTML,我只需要用户能够输入<,后面跟着一些字母


对于这种情况,没有比[AllowHtml]更好的解决方案了吗?

如果您正在清理服务器上的输入(通常在ASP.NET中是默认的),您可以在提交表单之前在视图中使用一点Javascript来编码HTML字符

function Encode(text)
{
    var e = document.createElement("div");
    e.innerText = e.textContent = text;
    text = e.innerHTML;
    return text;
}

console.log(Encode("<asd"));
函数编码(文本)
{
var e=document.createElement(“div”);
e、 innerText=e.textContent=text;
text=e.innerHTML;
返回文本;
}

log(Encode(“.

如果您正在清理服务器上的输入(通常在ASP.NET中是默认的),那么在提交表单之前,您可以在视图中使用一点Javascript对HTML字符进行编码

function Encode(text)
{
    var e = document.createElement("div");
    e.innerText = e.textContent = text;
    text = e.innerHTML;
    return text;
}

console.log(Encode("<asd"));
函数编码(文本)
{
var e=document.createElement(“div”);
e、 innerText=e.textContent=text;
text=e.innerHTML;
返回文本;
}

console.log(Encode(“.

如果您关心安全性,则会有)。保留[allowtml]属性,然后清理应用[allowtml]属性的特定属性

我个人用的是你可以从NuGet得到的

pm > Install-Package HtmlSanitizer
下面的示例用法引用自他们的实际GitHub页面(链接如上)

var sanitizer=new-HtmlSanitizer();
变量html=
@“警报('xss')测试”;
var sanitized=sanitizer.Sanitize(html,“http://www.example.com");
Assert.That(已消毒,为.EqualTo(@)”
+"测试",;

如果您关心安全性,则会出现问题。保留[allowtml]属性,然后清理应用[allowtml]属性的特定属性

我个人用的是你可以从NuGet得到的

pm > Install-Package HtmlSanitizer
下面的示例用法引用自他们的实际GitHub页面(链接如上)

var sanitizer=new-HtmlSanitizer();
变量html=
@“警报('xss')测试”;
var sanitized=sanitizer.Sanitize(html,“http://www.example.com");
Assert.That(已消毒,为.EqualTo(@)”
+"测试",;

如果这是唯一的检查,则服务器将依赖于用户是否恶意。请始终在服务器上进行清理。@ernodeweard感谢提醒(更新了我的答案),虽然我希望OP不会在该方法中使用AllowHtml属性。我投了赞成票,因为客户端对输入的操作可以引导我找到一个好方法。但您建议的这种特定操作会使用户输入无法读取。例如,我的用户可能会输入一个数学公式a@cnom在本例中,它仅显示在submis上您可以将其传递给隐藏元素,然后将其传递给服务器。此外,.NET还提供了对HTML进行解码和编码的功能(您可以在服务器端执行此操作),。如果这是唯一的检查,则服务器将依赖于用户不是恶意的。请始终在服务器上进行清理。@ernodeweard感谢提醒(更新了我的答案),虽然我希望OP不会在该方法中使用AllowHtml属性。我投了赞成票,因为客户端对输入的操作可以引导我找到一个好方法。但您建议的这种特定操作会使用户输入无法读取。例如,我的用户可能会输入一个数学公式a@cnom在本例中,它仅显示在submis上您可以将其传递给隐藏元素,然后将其传递给服务器。此外,.NET还提供了对HTML进行解码和编码的功能(您可以在服务器端执行此操作)。