Javascript:隐藏/难以理解客户端对象

时间:2015-02-14 12:12:44

标签: javascript jquery json

有没有任何已知的方法可以隐藏"或者只是让用户很难看到和理解我的客户端对象(存储为JSON对象)? 我想要的原因是因为我不希望别人简单地复制我的数据。

考虑到我从服务器端获取数据的事实,而不仅仅是将其提取到JSON对象,我猜我可以添加一些混合服务器上的数据的算法,只有我可以知道如何将其插回客户端。

我当然知道这不是100%隐藏的解决方案,因为在客户端仍然可以看到所有内容。

我希望我的问题能够很好地理解我的目标。

1 个答案:

答案 0 :(得分:2)

我想你只想编码json对象并在客户端存储/使用它。

如果我的理解是正确的,您可以考虑以下方式。 这个想法是从服务器编码我们的数据并在客户端解码它。虽然这种方式对用户来说并不是完全不可见的,但是在缩小脚本之后,获取解码数据需要花费很多时间和精力,而不仅仅是将json存储在客户端变量中。

例如,服务器端的

var json = {
  name: 'Alex',
  age: 25,
  location: 'LA'
};

function utf8_to_b64(str) {
  // or something equivalent in your lang. Here we use nodejs
  return new Buffer(str).toString('base64');
}

var json_str = JSON.stringify(json);
// "{"name":"Alex","age":25,"location":"LA"}"

send_to_client(utf8_to_b64(json_str));
// "eyJuYW1lIjoiQWxleCIsImFnZSI6MjUsImxvY2F0aW9uIjoiTEEifQ=="

客户方:

function b64_to_utf8(str) {
  return decodeURIComponent(escape(window.atob(str)));
}

var got_from_server = "eyJuYW1lIjoiQWxleCIsImFnZSI6MjUsImxvY2F0aW9uIjoiTEEifQ==";

var decoded = b64_to_utf8(got_from_server);
// "{"name":"Alex","age":25,"location":"LA"}"

var boom = JSON.parse(decoded);
// get our 'real' json back!

希望这有帮助

参考:Base64 encoding and decoding from MDN