我需要向我的服务器发送一个 ajax POST 请求。
我需要确保请求来自脚本本身,而不是来自编写请求的用户自己。有什么安全的方法可以做到这一点吗?脚本能否对 POST 请求进行签名或编码,稍后由服务器的私钥解密?我可以以某种方式阻止用户使用我的公钥进行加密吗?
我这样做并不是为了过滤目的——所以普通的旧服务器端验证是行不通的。
我需要向我的服务器发送一个 ajax POST 请求。
我需要确保请求来自脚本本身,而不是来自编写请求的用户自己。有什么安全的方法可以做到这一点吗?脚本能否对 POST 请求进行签名或编码,稍后由服务器的私钥解密?我可以以某种方式阻止用户使用我的公钥进行加密吗?
我这样做并不是为了过滤目的——所以普通的旧服务器端验证是行不通的。
您在 Javascript 中所做的任何事情都可以被查看和分析,因为它发生在客户端。因此,在客户端安全地加密信息几乎是不可能的。这使得服务器成为您可以并且需要进行验证的唯一点。
此外,您为什么要关心输入是来自您的脚本还是由用户手工制作的?如果输入是有效的并且按照您的规则定义是允许的,那么它应该没有任何区别。
对于这种情况,当您有疑问时,您需要看到客户端/服务器分离的重要性。您的服务器就是您的应用程序,它是您需要处理的唯一且唯一的关键组件。每个输入通常都是不可信的,每个输出都必须完全是您打算披露的内容。
您提供给用户的 HTML/JS 界面只是帮助人们与您的服务器进行通信,但这并不意味着它在离开您的服务器后是值得信赖或安全的。
其他答案是正确的:这基本上是不可能的。从实用的角度来看,您可以做的最好的事情可能是寻找真正令人讨厌的方法来混淆您的 JavaScript,以阻止可能尝试查看它的人,但您可以放心,有动力的人可以轻松解决这个问题. http://en.wikipedia.org/wiki/Obfuscated_code
我需要确保请求来自脚本本身,而不是来自编写请求的用户自己。
从您的服务器的角度来看,“脚本”和“用户”是无法区分的。你所要求的基本上是不可能的。
您不能在纯 JS 中使用公钥加密,因为私钥(用于签名数据)将被暴露。一般来说,你想做的事情是不可能的。