首页 > 解决方案 > ASP.NET MVC - 正则表达式安全地允许小于字符

问题描述

我有一个 ASP.NET MVC 5 应用程序,我的业务用户需要在其中输入一个<(小于号)。对于他们的特定业务部门,这<是一个常用的标志。我知道 XSS-Attacks 的问题,但我正在尝试找到一种解决方案来允许<不打开 XSS-Attacks 的情况。我不想允许 HTML,所以我不想设置[AllowHtml]或禁用验证规则。它们应该被打开。

我想只允许< 后跟一个空格,这不是有效的 html 标记,也不会被 ASP.NET 检测为危险请求。我认为最好的选择是设置一个正则表达式,但我不知道正则表达式应该是什么样子。

例如,我想扩展这个正则表达式(数据注释):[RegularExpression(@"^[a-zA-Z0-9 ]+$", ErrorMessage = "some message")]允许< 后跟一个空格。

<如果我允许(后跟空格),还有什么需要考虑的吗?

标签: asp.netregexasp.net-mvc

解决方案


您可以使用

[RegularExpression(@"^(?:[a-zA-Z0-9 ]|<(?= ))+$", ErrorMessage = "some message")]

详情

  • ^- 字符串的开始
  • (?:- 非捕获组的开始:
    • [a-zA-Z0-9 ]- 字母、数字或空格
    • |- 或者
    • <(?= )- a<后跟一个空格
  • )+- 小组结束,匹配一次或多次
  • $- 字符串结束。

请参阅正则表达式演示


推荐阅读