5

是否有任何内置支持来验证 Web API 中的恶意输入,类似于使用 MVC 的表单?

如果没有,任何人都可以建议一个“全局”过滤器/消息检查器/任何东西来验证恶意输入吗?我试图避免单独验证我的所有模型/参数......

4

4 回答 4

7

不,我不相信有这样的支持。这就是为什么。Web Forms/MVC 的输入验证支持是一种权宜之计。但是编码输出是更好的 XSS 修复;验证输入不能完美地工作,因为什么输入是“坏的”取决于你将如何输出它(作为 HTML 元素源的一部分,作为 JS 源的一部分,在 HTML 属性值中,作为 SQL 查询的一部分, ETC。)。

因此,我建议不要将通用的全局输入验证作为 XSS 问题的解决方案。相反,请确保在输出之前始终正确编码输入(或将其传递到另一层,例如 SQL DB)。对于输出,如果您使用正常的 Web API 机制来返回数据(具有内容协商/格式化程序的模型类),格式化程序应该为您处理特定于内容类型的编码。

于 2013-07-12T17:26:40.837 回答
7

我相信 XSS 与 ASP.NET Web API 无关。这就是我这么认为的原因。假设,在请求正文中,假设我得到一个这样的 JSON "input": "<script>alert('hello');</script>",Web API 将绑定到某个属性的“输入”按原样存储到数据库中,并在随后的 GET 请求中按原样检索它并将其发送出去对客户来说,还是可以的。客户有责任确保正确转义此数据。因此,当此输入属性被序列化为 Web 应用程序时,在它写入浏览器之前,客户端 Web 应用程序必须进行 HTML 编码。Web API 这样做通常没有意义,因为 Web API 可以被其他客户端使用,例如 WPF 应用程序,其中 XSS 可能不适用。还是我错过了您想到的任何特定案例?

于 2013-07-03T01:41:57.507 回答
0

你为什么不使用HttpUtility.HtmlEncode

于 2013-07-08T02:16:35.697 回答
0

输入应始终得到验证。它去哪里并不重要。名称字段应返回名称字符串,而不是 jpeg 文件,或者例如根据您的环境返回 SQL 攻击。

于 2016-06-01T05:27:19.437 回答