我有一个关于如何开发我的web应用程序安全性的问题。假设所有的javascript代码都是公开的,并且任何人都可以使用看起来很方便的参数直接进行任何AJAX调用,那么任何直接修改数据库状态的调用都是非常危险的。
也就是说,诸如"changePoints“或"updateUserState”的调用允许恶意用户打破例如游戏的逻辑并获得无限的金钱或积分。
我对这个问题的直观解决方案是设计客户端与服务器通信的调用,这样通过它的参数就不可能打破应用程序的逻辑。在游戏的例子中,像"buySomething“这样的调用将是安全的,因为服务器将负责添加”某物“并减去它所花费的钱。由于显而易见的原因,两个调用"addSomething“"changeMoney”可以完成相同的任务,但这是不安全的。
我的怀疑来自于这个推理给我的结论:客户端MVC模式的模型部分似乎非常危险,特别是当我们应用“活动记录”时,因为AJAX调用与数据库服务器有直接关联。此外,我的直观解决方案倾向于在服务器端开发许多应用程序逻辑,这可能会变得单调乏味。
我是不是漏掉了什么?有没有更聪明的解决方案?在客户端使用模型和活动记录是不安全的吗?
感谢您的关注和帮助。
发布于 2012-11-22 18:25:09
服务器始终是最终的权威。您需要在服务器端使用所有应用程序逻辑,并且服务器需要验证用户采取的所有操作。将服务器想象成一个黑盒,它代表了您所有的应用程序逻辑。黑匣子之外的任何东西都是不可信的,不是“应用程序”的一部分。根据定义,任何可以“从外部”使用该黑盒完成的操作都是不可信的。黑盒必须只向外部公开有效的API,并通过拒绝任何无效输入来做出反应。HTML/Javascript接口只是使用普通用户可以与之交互的API的一种方便方法,它不是核心应用程序的一部分,也不能包含关键业务逻辑。它仅仅代表了黑匣子内部发生的事情。
如果您的应用程序是高度动态的,并且经常更改需要在界面中反映的状态,就像在游戏中一样,那么是的,保持与服务器端状态的同步可能是一个相当大的挑战。尽管如此,它仍然是必要的。
https://stackoverflow.com/questions/13510376
复制相似问题