如何知道我的帖子请求来自我的phonegap/cordova应用程序在PHP服务器


How to know my post request came from my phonegap/cordova app in a PHP server

假设我有一个Phonegap/cordova应用程序,我想通过AJAX通过post和get向服务器发出请求。

我如何才能确保我的php文件只有当帖子来自我的应用程序。例如

if($_POST["key"]==$secret_key_got_from_server) {
   // Do the things
}

我想用openssl创建一个安全的唯一密钥,但是如果我在代码中硬编码它以通过AJAX发送它,任何人都可以反编译我的源代码并获得密钥并做任何他想做的事情。

我如何确保我的帖子来自我的phonegap应用程序,或者我如何安全地编码密钥/令牌?

我不太确定这个问题应该在这里还是在安全SE。

我如何确保我的帖子来自我的phonegap应用程序,或者我如何安全地编码密钥/令牌?

你不能。句号。世界上确实存在逆向工程,而且这个妖怪已经从瓶子里出来至少40年了。

问问自己,"为什么必须确保数据只能来自我的应用?"你很可能想解决错误的问题。

要检查给定POST消息的来源是否为合法用户,应该考虑消息的身份验证。可以有多种方法来实现身份验证,但常用的方法是使用在注册或登录过程中发出的令牌。如果post消息包含有效令牌,我们可以认为该消息是由有效用户发送的,否则不是有效请求。近年来,JWT被广泛应用于web应用。这些网站可能会有所帮助:JWT。io, JWT - Wikipedia

在这种情况下,如果攻击者能够捕获并修改您的POST消息,那么您的方案就失败了。为了防止这种攻击场景,您需要加密您的消息。正如您所说,如果您在客户端应用程序上硬编码密钥,攻击者可以通过分析客户端应用程序来知道密钥。因此,更好的方法是使用服务器的公钥来加密消息。公钥仅用于加密,使用公钥解密消息在计算上是不可能的。解密是通过私钥完成的,私钥应该安全地存储在服务器中。

这些基于公钥和私钥的加密方法被称为公钥密码系统(public key cryptosystem, PKC)。例如,RSA和ECC是最著名的公钥密码系统。

对于web应用程序,提供HTTPS协议。您可以使用HTTPS加密POST消息。

注意加密本身不提供完整性和身份验证。加密只是隐藏消息,但不能保证消息是从有效用户发送的。