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