保护PHP的Web服务

问题描述 投票:3回答:2

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

我希望我的webservices受到保护,但是通过使用GET / POST请求方法,我认为它不受保护。谷歌搜索后,我在“phpseclib”中获得了RSA,它也有很好的文档。但是我很困惑,所以想到这里发帖。

基本上我需要的是:

  1. 来自Android我会调用一个“加密参数合并在一个字符串中”的网址。 (我首先在json中编码参数然后加密)。
  2. 那些参数我在php中提取,并相应地处理。

json string:{user_id:[email protected], passwd: Password!}

加密为:XsjkhkjwehrkanmNXmnskjawrhjlljahdhuw

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

这在base64_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;
}
?>

它没有返回任何$加密字符串。

任何帮助将非常感激。

谢谢..! :)

php android web-services encryption phpseclib
2个回答
2
投票

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

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

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

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

回答您的直接问题:

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

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

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

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

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

你可以自己做,但是当你可以使用SSL时,你会调用复杂的程序和函数,这对你做同样的事情。


1
投票

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

$_REQUEST['parameter_name']

希望它对您有用,您将能够解决您的问题。

如果您遇到更多问题,请告诉我。 :)

© www.soinside.com 2019 - 2024. All rights reserved.