通过json查看模型时保持安全

时间:2012-07-27 19:05:00

标签: php json security codeigniter knockout.js

我决定将knockout.js用于我的网络应用程序,并对安全性有所担忧。

数据流如下:

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

我的问题是,只需点击“查看来源”,用户就可以清楚地看到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创建视图模型。

但是,在浏览器上有开发者工具扩展程序的人也可以看到(并且可能会编辑?) 这个数据也是。这是一个特殊的问题,其中一些数据包含权限标志之类的东西 等等。

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

1 个答案:

答案 0 :(得分: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

要传递给后端的客户端信息总是可以被篡改,这就是为什么尽可能地将其锁定是很重要的,如果任何信息似乎没有效果那么你应该立即抛出给客户一个错误并要求他们再试一次:)

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

希望这有帮助!