Javascript 哈希URLSearchParams以防止操纵
我很想知道。此代码将在服务器端运行,以生成电子邮件的URL:Javascript 哈希URLSearchParams以防止操纵,javascript,security,url,Javascript,Security,Url,我很想知道。此代码将在服务器端运行,以生成电子邮件的URL: const url=新url('https://e.dev.example.com') url.search=新的URLSearchParams({ 网址:'https://dev.case.example.com/case/61914', 用户:21, 中等:“电子邮件”, id:'foobar-123' }) console.log(url.toString())我认为没有任何标准化的解决方案。我猜这一切都归结于散列的安全性(防
const url=新url('https://e.dev.example.com')
url.search=新的URLSearchParams({
网址:'https://dev.case.example.com/case/61914',
用户:21,
中等:“电子邮件”,
id:'foobar-123'
})
console.log(url.toString())
我认为没有任何标准化的解决方案。我猜这一切都归结于散列的安全性(防止操纵)和工作负载(处理速度复杂性)。这两者通常都是一种权衡,你想做出一个决定,与之妥协
至于发送参数的一般方式,我想JSON是目前最广泛接受且易于操作的格式。序列化JSON对象,然后进行散列,这是通过URL发送day的好方法
请参考链接以了解更多相关信息。如果您像上面那样在Javascript中创建链接,则无法阻止操作,因为创建链接所需的任何内容都可用于Javascript,即用户。在这种情况下,您的用户可以创建一个带有任意参数的链接,只需像Javascript一样为其创建哈希 如果在服务器端创建链接,情况就不同了。然后,您可以规范化参数表示(例如,按字母顺序排列,这可能是最简单的),并根据服务器端机密添加MAC(消息身份验证码),以确保真实性。一个很好的算法就是HMAC。这样,当参数再次发送到服务器时,您可以检查(再次基于机密)是否没有篡改 如果还希望隐藏参数,可以使用 还要注意的是,这样做会导致重播攻击,即,某个曾经拥有链接的人可以在以后的任何时候使用它,除非有适当的保护措施(nonce或timestamp)
同样,您不能仅在客户端执行此操作,需要在服务器上根据某种消息身份验证机制和服务器端机密生成链接。抱歉,您可以假定链接是在服务器端生成的。@hendry hmac()就是这样做的。