1

我刚刚完成了一个使用 ASP.net MVC3 的在线表格,不显眼。我对表单字段进行了所有标准验证,例如必填字段、日期格式等。现在我想知道是否应该做任何推荐的“高级”验证来防止 SQL 注入等。例如,我有几个文本区域,对它们的唯一验证是它们是必需的。

请让我知道您的建议,或者更好的是,提供带有表单验证建议的参考链接。

编辑:我不是在寻找关于如何进行验证的教程,只是在寻找关于验证内容的建议。例如,我有用于姓名和日期的文本框,用于大型评论的文本区域等。所有基本验证都已完成并且运行良好。我想我现在主要关心的是防范 SQL 注入。我将为此研究 reg ex 验证。谢谢你。

感谢您的阅读。

4

3 回答 3

1

前端并不重要,它是后端数据访问策略。

那么 - 你是如何进行数据访问的?如果您使用的是参数化查询或 ORM(实体框架)并且没有内联 sql,则无需担心,db 驱动程序会进行适当的转义。

如果其他系统将使用您存储的数据并且他们可能正在执行内联 sql(非参数化查询),那么您将需要正则表达式您的代码以确保 1. 数字意味着数字 2. 文本仅是字母数字 3。如果使用存储过程,那么您需要确保存储过程中的代码不会受到 sp_executesql 注入的影响。尽管请注意您是否绝对需要服务器端的动态 sql,但 sp_executesql 确实支持参数化查询,而不是将所有字符串连接在一起。

作为旁注,因为我觉得这里需要提及,请注意像 www.whatever.com/order/1 这样的场景通常更容易受到参数篡改(不是 sql 注入)的影响,您的查询没有正确限制当前用户访问他们无权访问的订单,因此通常检查您的查询以确保用户可以访问他们请求的内容。从 Order 中选择 ShipDate where OrderId=@orderId where CustomerId=@customerId 其中 customerId 仅存储在服务器端并且是您的安全/配置文件系统的一部分。

如果您想更深入地了解如何对您的 asp.net 网络表单和 mvc 应用程序进行 hack 校对,我在pluralsight.com 上有一个五小时的课程

http://pluralsight.com/training/courses/TableOfContents?courseName=hack-proofing-dotnet-app&highlight=adam-tuliper_information-leakage#information-leakage

于 2012-10-29T19:35:54.590 回答
0

对于更严格的验证,我建议在必填字段之外使用正则表达式。基本概述的链接在这里

于 2012-10-29T16:29:18.963 回答
0

您想创建自己的自定义验证属性,然后将它们注册到不显眼的 JavaScript 验证引擎中。这利用了IClientValidate接口。

这是一个关于生成您自己的自定义IClientValidate属性并在不显眼的 javascript 等中注册它的教程。

http://odetocode.com/Blogs/scott/archive/2011/02/21/custom-data-annotation-validator-part-i-server-code.aspx

http://odetocode.com/Blogs/scott/archive/2011/02/22/custom-data-annotation-validator-part-ii-client-code.aspx

这里还有一个我已经完成并在此处发布的用于验证列表的示例:

不显眼的收集验证

于 2012-10-29T16:33:57.337 回答