我正在使用MEAN堆栈创建一个应用程序,该堆栈有许多表单数据条目,这些条目由经过身份验证的用户和匿名用户持久保存到数据库中。
我应该在堆栈中的何处创建所有验证规则?他们应该在AngularJS吗?但我希望我的服务器端API是安全的,所以也许它们应该在Express中,然后被冒泡到AngularJS?或者它们应该一直在MongoDB层(我将使用Mongoose,所以在那里创建验证很容易)。
目前,我把它们分布在各处,发现自己在重复规则。我想避免这种情况,在一个地方制定规则。那么,在MVW应用程序中定义验证的一般规则是什么?最好将它们放在哪一层(尤其是对于MEAN应用程序)?
根据OWASP建议
在哪里包括验证必须在每个层上执行验证。但是,应该根据执行代码的服务器的功能进行验证。例如,web/表示层应该验证与web相关的问题,持久性层应该验证持久性问题,如SQL/HQL注入,目录查找应该检查LDAP注入,等等
您需要处处验证。
在Angular部分中,您可以在客户端验证问题,而不必一直返回到服务器,因此,您应该尽快防止此类问题的发生。
在express上,你需要验证,因为你不能信任你的前端。
在Mongo上,您需要验证访问权限、权限、要插入的数据等。
为什么要验证?
最常见的web应用程序安全弱点是正确验证来自客户端或环境的输入。这个弱点导致应用程序中几乎所有的主要漏洞,例如作为解释器注入、区域设置/Unicode攻击、文件系统攻击以及缓冲区溢出。永远不应该信任来自客户端的数据客户端完全有可能篡改数据。
来自同一来源:
https://www.owasp.org/index.php/Data_Validation