我刚刚使用ASP.net MVC3完成了一个不引人注目的在线表单。我在表单字段上有所有标准验证,例如必填字段,日期格式等。现在我想知道是否有任何建议的'高级'验证我应该做以防止SQL注入等。例如,我有几个textareas和他们唯一的验证是它们是必需的。
请通过表单验证建议告诉我您推荐的内容,甚至是更好的参考链接。
编辑:我不是在寻找有关如何进行验证的教程,只是寻找有关要验证的建议。例如,我有名称和日期的文本框,大型评论的文本框等。所有基本验证都已完成并且运行良好。我想我现在主要担心的是防止SQL注入。我将研究reg ex验证。谢谢。
感谢您的阅读。
答案 0 :(得分:1)
前端不是太关注,它是后端数据访问策略。
那么 - 你是如何进行数据访问的?如果您使用的是参数化查询或ORM(实体框架)而没有内联sql,那么毫无疑问,db驱动程序将执行正确的转义。
如果其他系统将使用您存储的数据并且他们可能正在执行内联sql(非参数化查询),那么您将需要对代码进行正则表达式以确保 数字意味着数字 2.文字只是字母数字 3.如果使用存储过程,则需要确保存储过程中的代码不容易通过sp_executesql注入。虽然请注意,如果绝对需要在服务器端使用动态sql,sp_executesql确实支持参数化查询,而不是将所有字符串连接在一起。
作为旁注,因为我觉得这里需要提一下,请注意这样的情景 www.whatever.com/order/1 通常更容易受到参数篡改(不是sql注入)的影响,其中你的QUERIES没有正确地限制当前用户访问他们无权访问的订单,因此通常会检查您的查询以确保用户可以访问他们要求。 从订单中选择ShipDate,其中OrderId = @ orderId,其中CustomerId = @ customerId 其中customerId仅存储在服务器端,是安全/配置文件系统的一部分。
如果您想要更深入的信息来破解您的asp.net网络表单和mvc应用程序,我在pluralsight.com上有一个五小时的课程
答案 1 :(得分:0)
对于更严格的验证,我建议使用除必填字段之外的正则表达式。 基本概述的链接是here
答案 2 :(得分:0)
您想要创建自己的自定义验证属性,然后在不显眼的JavaScript验证引擎中注册它们。这利用IClientValidate
接口。
这是一个关于生成您自己的自定义IClientValidate
属性并在不引人注目的javascript等中注册的教程。
此处还有一个我已经完成并在此处发布以验证列表的示例: