【问题标题】:How to encrypt/decrypt URL parameters in javascript?如何在 javascript 中加密/解密 URL 参数?
【发布时间】:2013-11-18 02:56:24
【问题描述】:

在任何人跳进来说“哦!!那是个坏主意”之前,我就知道了。

我想保留查询字符串中的键和值,使最终用户不容易看到。 我有这样的东西google.com/?category=textile&user=user1 我需要让它变得难以理解:google.com/?kasjdhfkashasdfsf32423

有没有办法在javascript中实现这一点。这个我已经看过了

我已经看过thisthis

但我认为编码不能解决问题。此外,此代码完全在客户端。我知道这并不安全,但我只需要这是一种幼稚、薄弱的防御。 请帮忙。

编辑

如果我的问题之前没有说清楚,我深表歉意。

URL google.com/?category=textile&user=user1 正在从其他应用程序传递。

查询字符串中传递的值直接控制向用户显示的内容。照原样,任何没有技术知识的人都可以轻松更改值并查看与不同类别或用户对应的数据。我需要把它弄得难以理解,这样它就不明显了。如果用户是技术人员并计算出所使用的加密,那就没问题了。在我们有更好的架构之前,我需要一个权宜之计的解决方案

【问题讨论】:

  • 您要保护的数据是什么?您能否只提交一个表单,以便仅在 HTTP 正文中传递值。是的,这是个坏主意,您的网址不友好
  • 您为什么要为此考虑 javascript?这实际上是生成加扰的 url,然后在服务器端响应它们的问题。你的后端技术是什么?
  • 哦!这是个坏主意;-)
  • 你可以使用base64。
  • 防御什么?您要保护什么样的数据。为什么不简单地使用 POST 以使值根本不是 URL 的一部分?不要忘记,只要访问受保护的资源本身,知道资源的 URL 并不重要。

标签: javascript url encryption


【解决方案1】:

如果你不是在寻找严重的强加密,你可以使用 ROT13:

http://en.wikipedia.org/wiki/ROT13

这对于稍微混淆 URL 中的键/值已经足够了。

【讨论】:

  • 谢谢。这对我的目的来说似乎很好,只是它按原样显示数字。
  • 如果你需要更强的数字,并且“加密”数字,我建议使用 Rot47:rot47.net
  • 这达到了目的,我也能够加密数字。感谢您的解决方案。如果原生支持,我会使用 base64 编码
  • Rot47 vs base64 有 3 个优点: 1. 知名度不高,用标准工具和想法很难解密。 2.不增加字符串长度。 3. 程序编解码相同;所以 enc = rot47(msg); dec = rot47(enc); dec == 味精;
  • rot47 不会生成 URL 中不允许的字符吗?
【解决方案2】:

您可以使用 base64。 Javascript 具有执行此操作的本机函数:

alert(btoa("category=textile&user=user1")); // ==> Y2F0ZWdvcnk9dGV4dGlsZSZ1c2VyPXVzZXIx

并扭转它:

alert(atob("Y2F0ZWdvcnk9dGV4dGlsZSZ1c2VyPXVzZXIx")); // ==> category=textile&user=user1

如果你有 unicode 字符串,请仔细阅读文档,它有点不同:https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa

【讨论】:

  • IE8和IE9不支持atob和btoa函数
  • 你可以很容易地找到 IE 的 polyfill。
  • @sebcap26., 你是个了不起的人!!非常感谢..我正在努力解决我网页中的问题。现在它工作得很好。但是,问题是发送一个字符串(有很多单引号和双引号)作为函数的参数。我试图逃避那些报价,但无法实现。最后加密和解密字符串。大声笑...再次感谢..
  • base64 不是加密,是编码:/
  • 网上有很多可以解码base64的工具,所以数据一点都不安全。不推荐base64
猜你喜欢
  • 1970-01-01
  • 2011-12-06
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
相关资源
最近更新 更多