我正在为一小群管理员构建一个应用程序,这些管理员将被密码锁定。把它当作一个小型的"内联网"应用程序。随着我的帖子数据越来越大(许多输入字段,长表单),我想知道安全性。
我的应用程序是用AngularJS编写的,所以我做了一个完整的前端验证。
注意:我没有使用AngularJS的路由,Laravel正在处理这一问题。所有数据都是通过Ajax调用发布的,Laravel正在数据库中插入数据。两个框架都在同一个域上运行。
所以,我关心的是:
我还应该在后端验证数据吗
这是我的想法。
- Laravel使用CSRF保护,因此无法从其他"外部"形式
- 如果用户(管理员)根据需要提交字符串而不是整数(根据数据库结构上的定义),插入不会发生
- Laravel转义输入数据,所以我认为不能执行SQL注入?我在所有代码中都使用Eloquent ORM
- 还有别的吗?一般来说,什么是可以验证的?只是输入类型
额外的问题:如果我的应用程序不在密码后面,我应该采取什么不同的做法?
一般来说,是的。
如果在前端工作时出错,您可能最终会以应用程序可能无法处理的格式发送数据。
此外,来自客户端的数据并不总是可靠的。不同的浏览器可能会以不同的方式运行,并可能以不可预测的方式向您发送数据。
您应该根据后端的值类型验证最小/最大长度、格式(正确的电子邮件地址、文件名等)等。
- 通过ajax发送数据时,在请求头中包含csrf令牌
-
在控制器中接收到请求数据后,只需包括如下的laravel验证:
$validationData = $request->validate([ 'title' =>'required|unique:posts|max:255, ]);