【发布时间】:2012-11-10 17:08:45
【问题描述】:
我有一个关于如何开发 Web 应用程序安全性的问题。假设所有的 javascript 代码都是公开的,任何人都可以直接进行任何 AJAX 调用,并且参数看起来很方便,那么任何直接修改数据库状态的调用都是非常危险的。
也就是说,作为“changePoints”或“updateUserState”的调用允许恶意用户破坏例如游戏的逻辑并获得无限的金钱或积分。
我对这个问题的直观解决方案是设计将客户端与服务器通信的调用,因此通过其参数不可能破坏应用程序逻辑。在游戏示例中,像“buySomething”这样的调用是安全的,因为服务器将负责添加“某物”并减去它所花费的钱。两个调用 "addSomething" "changeMoney" 可以完成相同的任务,但由于显而易见的原因是不安全的。
我的怀疑来自于这个推理导致我的结论:MVC 模式的模型部分在客户端看起来非常危险,尤其是如果我们应用“活动记录”,因为 AJAX 调用与数据库服务器直接相关。此外,我的直观解决方案倾向于在服务器端开发大部分应用程序逻辑,这可能会变得乏味。
我有什么遗漏吗?有更智能的解决方案吗?在客户端使用模型和活动记录是不安全的吗?
感谢您的关注和帮助。
【问题讨论】:
标签: javascript ajax security model-view-controller client-side