3

我决定将 knockout.js 用于我的 Web 应用程序,并且对安全性有一些担忧。

数据流向如下:

  • 用户通过 url 请求控制器
  • 控制器收集所需信息,以 json 字符串形式发送到视图
  • json 字符串保存到 dom 以允许我的 javascript 代码访问它
  • json 被加载到 $(document).ready 内的淘汰视图模型中

我的问题是用户只需单击“查看源代码”就可以清楚地查看 json 字符串,这让我很担心,因为我知道这很容易在客户端更改,但我不完全确定其含义。

这是一些示例代码来说明我的观点。一、控制器:

 function view($id = null)
 {
    //other processing...

    $data = array();
    $data['json'] = $this->get_profile_json($id);
    $this->load->view('profile_page',$data);
 }

个人资料页面视图

<script type="text/javascript">
    window.profile_json = "<?php echo $json; ?>";
</script>
<script type="text/javascript" src="<?php echo site_url('assets/js/profile_page.js'); ?>"></script>
<!-- The profile page below... -->

个人资料页面 javascript

var vm = new ViewModel(profile_json); //load the json into view model
ko.applyBindings(vm);

现在我知道我可以通过在创建视图模型之前从 javascript 代码中加载 json 来实现相同的目标,$.getJSON例如。

但是,在浏览器上安装了开发者工具扩展的人也可以看到(并且可能编辑?)这些数据。这是一个特殊的问题,其中一些数据包含权限标志等内容。

我的问题是,您如何确保传递给您的视图模型的数据不会被篡改?

4

1 回答 1

3

没有办法从客户端保证您信息的安全。这就是为什么对信息进行服务器端检查总是很重要的,然后发回您对信息是否可用的响应。

对于某些安全检查,您应该使用以下内容:

1) Strip_tags($_POST['key'])
2) Check to see if the value is numeric (if its a number)
3) Check to see if it only has alphabet and numbers (if this is all that's allowed)
...and so on

要传递到后端的客户端信息总是可以被篡改,这就是为什么尽可能地锁定它很重要,如果任何信息似乎无效,那么您应该立即向客户并要求他们再试一次:)

假设后端数据是安全的,那么前端数据应该永远不会有问题。

希望这可以帮助!

于 2012-07-27T19:14:34.717 回答