2010-10-16 90 views
0

我需要开始担心用户输入。我注意到htmlhelper类在这方面做得不好。任何人都可以提出一个很好的输入消毒框架吗?我使用的是asp.net mvc2。如何处理输入消毒?

回答

2

DataAnnotations是模型验证的良好开端。有关如何设置数据注释的详细信息,请参阅this link。它们可以与Microsoft MVC JavaScript库或jQuery一起用于执行客户端验证,另外可以使用服务器端验证模型绑定后是否有效。请参阅ModelState.IsValid属性。

虽然注释可能有助于防止和捕获不良用户输入,但它们不会为您输入“消毒”。如果您愿意接受不好的意见并希望处理其消毒,自定义模型联编程序将是一个开始的好地方。 Scott提供了一个good scenario of how to implement one here.。在自定义联编程序中,您可以通过文本输入通过一系列字符串清理方法去除不需要的字符或标准化格式化等。

这两种方法的组合应该使您具备处理几乎所有消毒你可能需要。

+0

我喜欢你的答案,我会研究你的建议,看看我怎么去 – Roman 2010-10-16 14:21:38

3

HtmlHelper类是为HTML输出而不是输入,所以我不明白你的意思是没有做好用户输入卫生的工作。有不同的输入验证方式,如数据注释或使用一些第三方框架,如FluentValidation。如果您正在使用SQL数据库,则还应该确保通过使用预准备语句和参数化查询来避免SQL注入。另外,当您需要在页面上显示用户输入时,您应该始终确保使用<%= Html.Encode("some user input") %>或更新的语法<%: "some user input" %>对其进行正确的HTML编码。

+0

我使用NHibernate我敢当Criteria类是用来与数据库进行交互肯定parametrizes查询服务。 – Roman 2010-10-16 14:26:59

+0

+1 @AM表示HTML +编码输出效果很好,分享更多关于为什么你说它没有很好的工作?也许你的意思是验证... – eglasius 2010-10-16 15:42:13

1

我建议你不要清理输入,而是清理输出。

这可以避免可能的不当卫生或破坏实际的用户输入。

让用户提交HTML,只要确保显示时它总是被编码。

由于达林指出,使用<%: %>语法或<%= Html.Encode() %>利用这个