【问题标题】:Security modifing app state from javascript从 javascript 修改应用程序状态的安全性
【发布时间】:2012-11-10 17:08:45
【问题描述】:

我有一个关于如何开发 Web 应用程序安全性的问题。假设所有的 javascript 代码都是公开的,任何人都可以直接进行任何 AJAX 调用,并且参数看起来很方便,那么任何直接修改数据库状态的调用都是非常危险的。

也就是说,作为“changePoints”或“updateUserState”的调用允许恶意用户破坏例如游戏的逻辑并获得无限的金钱或积分。

我对这个问题的直观解决方案是设计将客户端与服务器通信的调用,因此通过其参数不可能破坏应用程序逻辑。在游戏示例中,像“buySomething”这样的调用是安全的,因为服务器将负责添加“某物”并减去它所花费的钱。两个调用 "addSomething" "changeMoney" 可以完成相同的任务,但由于显而易见的原因是不安全的。

我的怀疑来自于这个推理导致我的结论:MVC 模式的模型部分在客户端看起来非常危险,尤其是如果我们应用“活动记录”,因为 AJAX 调用与数据库服务器直接相关。此外,我的直观解决方案倾向于在服务器端开发大部分应用程序逻辑,这可能会变得乏味。

我有什么遗漏吗?有更智能的解决方案吗?在客户端使用模型和活动记录是不安全的吗?

感谢您的关注和帮助。

【问题讨论】:

    标签: javascript ajax security model-view-controller client-side


    【解决方案1】:

    服务器始终是最终权威。您需要所有应用程序逻辑服务器端,并且服务器需要验证用户执行的所有操作。将服务器视为一个黑匣子,它代表了您的所有应用程序逻辑。该黑匣子之外的任何东西都是不可信的,不是“应用程序”的一部分。任何可以用那个黑盒子“从外部”完成的事情都是不受信任的。黑匣子必须只向外部公开有效的 API,并通过拒绝任何无效输入来做出反应。 HTML/Javascript 接口只是使用普通用户可以与之交互的那些 API 的便捷方式,它不是核心应用程序的一部分,并且不得包含关键业务逻辑。它只是代表黑盒子里发生的事情。

    如果您的应用程序是高度动态的并且经常更改需要在界面中反映的状态,例如在游戏中,那么是的,保持与服务器端状态同步可能是一个很大的挑战。不过还是有必要的。

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 1970-01-01
      • 2012-08-14
      • 2011-07-04
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      相关资源
      最近更新 更多