繁体   English   中英

保护 PHP 的网络服务

[英]Securing webservices of PHP

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

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

基本上我需要的是:

  1. 在 Android 中,我将使用“加密参数合并在一个字符串中”来调用 url。 (我将首先在 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 和密码

这在ase64_encode(), base64_decode(),是可能的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 服务器的 Web 浏览器,因此您甚至不需要为 SSL 证书付费。 您可以创建自签名证书。 只需确保您验证每个连接上的签名以防止中间人攻击。 不过这有点棘手,所以同样,如果您是新手,只需支付 SSL 证书费用,让 Android 为您处理证书验证。

回答你的直接问题:

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

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

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

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

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

您可以自己执行此操作,但您将调用复杂的过程和函数,而此时您可以只使用 SSL,它对您执行相同的操作。

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

$_REQUEST['parameter_name']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM