保护 PHP 的 Web 服务


Securing webservices of PHP

我正在开发一个使用 php webservices 调用的 android 小项目。

我希望我的网络服务受到保护,但是通过使用 GET/POST 请求方法,我认为它没有受到太多保护。谷歌搜索后,我在"phpseclib"中实现了RSA,它也具有良好的文档。但是我很困惑,所以想在这里发布这个。

基本上我需要的是:

  1. 从安卓 我调用一个带有"加密参数合并在一个字符串中"的网址。(我首先用 json 编码参数,然后加密(。
  2. 这些参数我在 php 中提取,并相应地进行处理。

JSON 字符串:{user_id:xyz@gmail.com, passwd: Password!}

加密到:XsjkhkjwehrkanmNXmnskjawrhjlljahdhuw

例如。 http://my.domain.com/webservices/call.php?params=Xsjkhkjwehrkanm,NXmnskjawrhjlljahdhuw在 php 中,我从 $_GET['params"'] 中提取用户 ID 和密码

这在 b ase64_encode(), base64_decode(), 中是可能的base64但编码器只会混淆字符串,它实际上不会加密。

我需要公钥/私钥机制。

但是我已经尝试过这个:(https://launchkey.com/docs/api/encryption/php/phpseclib(

<?
function rsa_encrypt($key, $message) {
    $rsa = new Crypt_RSA(); 
    $rsa->loadKey($key); 
    $encrypted = base64_encode($rsa->encrypt($message)); 
    return $encrypted;
}
?>

它不返回任何$encrypted字符串。

任何帮助将不胜感激。

谢谢..! :)

如果您不熟悉加密,则应按照评论中的建议,采用简单的路线并使用HTTPS。

此外,正如评论中所建议的,不要通过GET从网页发送密码,因为它显示在地址栏中,路人可以在屏幕上阅读。

HTTPS (SSL/TLS( 提供 WEB 服务器和客户端之间整个连接的端到端加密。这使您可以以明文形式发送所有数据,而不必担心,因为它是在较低级别加密的。

由于它不是调用您的网络服务器的Web浏览器,因此您甚至不需要为SSL证书付费。您可以创建自签名证书。只需确保在每个连接上验证签名,以防止中间人攻击。不过这有点棘手,所以同样,如果您不熟悉此内容,只需支付SSL证书的费用,然后让Android为您处理证书验证。

回答您的直接问题:

编码不是加密,您可能已经发现。Base64 是编码的,不提供任何安全性。

您不能简单地生成 RSA 公钥/私钥对,使用私钥加密数据,然后将其发送到服务器。您必须首先与服务器共享您的公钥。好吧,任何嗅探公钥的人都可以解密它。

您可能会让客户端生成一个随机对称密钥,并使用服务器的公钥对其进行加密。然后,服务器将使用私钥对其进行解密,并拥有一个共享密钥来加密数据并将其发送给您。

问题是攻击者可以简单地将所有数据重放到服务器以查看相同的输出。这些随机的东西需要由服务器生成,以确保它们实际上是随机的,所以你被困在生成密钥的服务器,但如果服务器只是用私钥加密,任何拥有公钥的人都可以解密它。

因此,您需要一些安全地派生共享密钥的方法,一些复杂的数学方法来共享服务器和客户端都可以用来计算相同共享密钥的一些数据。

你可以自己做这件事,但你会调用复杂的过程和函数,而你可以只使用 SSL,它为你做同样的事情。

我认为您可以使用 POST Web 服务使其更安全,如果可能的话,请不要加密参数,只是加密参数的值,然后如果您遇到问题,请尝试使用

$_REQUEST['parameter_name']