问题描述
我有一个 ASP.NET MVC 5 应用程序,我的业务用户需要在其中输入 <
(小于号)。对于其特定的业务部门,<
是常用符号。我知道 XSS-Attacks 的问题,但我试图找到一种解决方案,在不打开 XSS-Attacks 的情况下只允许 <
。我不想要允许 HTML,所以我不知道如何设置 [AllowHtml]
或禁用验证规则。它们应该被打开。
我想只允许 <
后跟一个空格,它不是有效的 html 标记,并且不会被 ASP.NET 检测为危险请求。我认为最好的选择是设置正则表达式,但我不知道正则表达式应该是什么样子。
例如,我想扩展此正则表达式(数据注释):[RegularExpression(@"^[a-zA-Z0-9 ]+$",ErrorMessage = "some message")]
以允许 <
后跟一个空格。
如果我允许 <
(后跟空格),还有什么需要考虑的吗?
解决方法
你可以使用
[RegularExpression(@"^(?:[a-zA-Z0-9 ]|<(?= ))+$",ErrorMessage = "some message")]
详情:
-
^
- 字符串的开始 -
(?:
- 非捕获组的开始:-
[a-zA-Z0-9 ]
- 一个字母、数字或空格 -
|
- 或 -
<(?= )
- 后跟空格的<
-
-
)+
- 组结束,匹配一次或多次 -
$
- 字符串结束。
参见regex demo。