【问题标题】:Securing connection to php server without SSL在没有 SSL 的情况下保护与 php 服务器的连接
【发布时间】:2011-12-29 22:57:05
【问题描述】:

我有以下场景:Android 客户端通过 HTTP Post 与 PHP 服务器通信。 PHP 服务器正在与 mySQL 数据库通信,并将输出作为 JSON 发送到 Android 客户端。 我已经说明了这一点:securing connection to php server

结论是使用 TLS/SSL 来保护连接。不幸的是,我的服务器不支持 tls。

是否有其他方法可以使获取我的 php 服务器的 API 变得更加困难,因此人们无法通过 PC 发布到我的服务器。

我考虑过 gzip,但我认为这将是一个低门槛......

因此,如果有人使用wireshark 嗅探流量,他不应该轻易了解与我的php 服务器的通信是如何完成的。

【问题讨论】:

  • 我觉得你还是和以前一样的问题。对用户保密。您是否考虑过强制用户在您的站点上创建一个帐户,并尝试以这种方式控制您的系统?
  • 不,我不希望用户拥有帐户。
  • 你为什么要关心别人是否看到你的 Web API 是如何工作的?如果它是公开的,它不应该是秘密的。如果您要存储个人身份信息或用户认为敏感的其他信息,请不要运行允许匿名用户访问它的 Web 服务,而不限制对经过身份验证和授权的连接的访问​​(即使他们必须首先从应用程序中提取您的公共加密密钥/幻数/哈希算法);没有人会为此感谢你。如果用户关心数据,他们可能不会介意使用某种形式的授权。
  • 你是对的。但是我存储在后端的数据并不敏感。用户不关心它。但我害怕孩子们用 PC 填满我的数据库。因此,我认为 HMAC 足以达到我的目标。

标签: php android security backend


【解决方案1】:

您可以为发送到服务器的所有数据创建某种散列,然后将该散列与数据一起发送到服务器,然后服务器可以计算相同的散列并根据发送的散列进行检查。那么除非他们弄清楚哈希是如何计算的,否则没有人可以发送自己的数据。

【讨论】:

  • 你能提示一下如何实现这个
  • 那不是要求服务器已经拥有用户发送的数据吗?散列非常适合将字符串转换为短的唯一字符串,但要转换回原始文本会有很多排列(以及需要很长时间)。或者至少那是我在散列方面的经验。
  • @cgoddard 会这样,如果我发送帖子变量 x=12、y=abc、z=xyz,那么我可以连同那些 hash=md5(12abcxyz) 一起发送等于。服务器将获取变量 x、y、z 和哈希,可以以相同的方式计算相同的哈希(按字母顺序连接 x、y 和 z 的值),然后将结果与之前的哈希变量进行比较也送了。如果匹配,则响应,如果不匹配,则不要。当然,真正的解决方案可能会变得更加复杂,加盐等等。
  • 确保您必须以明文形式发送数据。我认为他的意思是 HMAC 作为哈希。密钥用于创建散列。如果那个人有正确的钥匙,你可以在其他网站上查看
  • @tobias 是的,或者 sha512 等等。您正在制作它,因此您可以完全控制复杂性。如果他们反编译您的代码,请记住仍然可以破解。可以通过让他们登录并使用每个用户独有的盐和其他事物等来进一步复杂化......
【解决方案2】:

您可以使用ob_startob_get_contentsob_end_clean 来捕获您输出的所有数据,然后使用一些加密算法来保护数据(可能使用由您自己的基于时间的函数派生的私钥,然后在客户端运行一个程序来解密客户端的数据。

安全级别取决于您使用的技术,但如果您使用过于复杂的技术,您可能会牺牲一些性能。但是如果你使用你自己的,它会让别人很难破解,但这取决于他们试图破坏你的系统的努力程度。

如果你想让它更复杂,看看 Mentalis。他们制作了 SSL 服务器的开源 C# 实现,因此如果您需要一些灵感,可以使用其中的一些。

【讨论】:

  • 如果你自己做算法,别人很容易破解。除非你是密码天才。
  • 真的,总是这样。但是php中内置了很多预建的加密函数,可以为你做所有这些,只需使用与ssl类似的方法
  • 其实,如果你使用了一组漂亮而复杂的单向函数,那么它几乎不可能破解,
  • 问题是我在 Android 上也需要同样的东西。你知道我可以在 PHP 和 Android/Java 上使用的哈希/加密函数吗?
  • 几乎所有主要算法都应该在两个平台上都支持。问题是密钥交换。但是,如果您有可能在手机上创建一个密钥,然后以某种方式将其同步到您的服务器。但是人们可以只向您发送他们自己的密钥,并且仍然将数据发送到您的服务器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多