我只想弄清楚在Breeze中保存更改时我需要在服务器端实现多少安全性.特别是,我正在考虑恶意用户如何手动破解SaveChanges请求或破解客户端中的javascript,以绕过我的正常业务规则 - 例如,恶意更改我的实体上的外键ID.
我想准确理解我需要关注安全工作的重点; 我不想浪费时间实现不需要的安全层.
我在服务器端使用Breeze和.net以及Entity Framework.
这是一个简单的例子.ObjectA有一个参考ObjectB,ObjectA并由一个特定的所有User.所以,我的数据库看起来像这样:
ObjectA:
Id ObjectB_Id SomeField User_Id
1 1 Alice's ObjectA 1
2 2 Bob's ObjectA 2
ObjectB:
Id SomeOtherField
1 Foo
2 Bar
User:
Id Name
1 Alice
2 Bob
Run Code Online (Sandbox Code Playgroud)
从这个模型,我的安全问题是:
ObjectAObjectA鲍勃的ObjectB.User_Id他的ObjectA爱丽丝.(1)的解决方案是微不足道的; 我将确保我的SaveChanges方法具有[Authorize]属性.
我可以轻松地使用Fiddler构建一个SaveChanges请求来重现问题2到4 - 例如,我可以构建一个请求,它将AliceObjectA 更改为指向Bob的ObjectB.这就是消息内容的样子:
"entities":
[
{
"Id":1,
"ObjectB_Id":2,
"SomeField":"Alice's ObjectA", …Run Code Online (Sandbox Code Playgroud) breeze ×1