我们说我有一个Phonegap / cordova应用程序,我想通过AJAX向POST和GET请求我的服务器。
如果帖子来自我的应用,我怎样才能保护我的php文件。 E.G。
if($_POST["key"]==$secret_key_got_from_server) {
// Do the things
}
我想用openssl创建一个安全的唯一键,但如果我在代码中对其进行硬编码以通过AJAX发送它,任何人都可以反编译我的源代码并获取密钥并做他想做的任何事情。
我怎样才能确保我的帖子来自我的phonegap应用,或者如何安全地对该密钥/令牌进行编码?
我不太确定这个问题是在这里还是在安全SE中。
答案 0 :(得分:5)
我怎样才能确保我的帖子来自我的phonegap应用,或者如何安全地对该密钥/令牌进行编码?
You can't。完全停止。世界上存在逆向工程,这个精灵已经被淘汰了至少40年。
问问自己,“为什么有必要确保数据仅来自我的应用程序?”你很有可能试图解决错误的问题。
答案 1 :(得分:-2)
要检查给定POST消息的来源是否为合法用户,您应该考虑消息的身份验证。可以有多种方法来实现身份验证,但常见的方法是使用在注册或登录过程中发出的令牌。如果发布消息包含有效令牌,我们可以认为该消息是从有效用户发送的,否则不是有效请求。最近 JWT 广泛用于Web应用程序。这些网站可能会有所帮助:JWT.io,JWT - Wikipedia
在这种情况下,如果攻击者可以捕获并修改您的POST消息,那么您的方案将失败。要防止此攻击情形,您需要加密邮件。正如您所说,如果您在客户端应用程序上对密钥进行硬编码,攻击者可以通过分析客户端应用程序来了解密钥。因此,更好的方法是使用服务器的公钥加密邮件。公钥仅用于加密,并且在计算上不可能使用公钥解密消息。解密由私钥完成,私钥应安全地存储在服务器中。
这些基于公钥和私钥的加密方法称为公钥密码系统(PKC)。例如,RSA和ECC是最着名的公钥加密系统。
对于Web应用程序,提供HTTPS协议。您可以使用HTTPS加密POST消息。
请注意,加密本身不提供完整性和身份验证。加密只是隐藏邮件,但不保证邮件是从有效用户发送的。