【问题标题】:php - secure access to filephp - 安全访问文件
【发布时间】:2011-06-19 06:17:51
【问题描述】:

我有一个从一组 php 文件中获取数据的 iphone 应用程序。 php 文件根据查询字符串参数返回 XML。 保护和限制对这些“网络服务”的访问的最佳方式是什么?

谢谢!

编辑:服务器正在运行 CentOS/Apache,我想限制访问,以便只有应用程序能够访问文件。我不希望从应用程序外部访问这些文件。 (该应用程序也将移植到 android 和 blackberry)。

【问题讨论】:

  • 即使我知道可以帮助我给你一个大概答案的细节,比如你使用的网络服务器,你想要的锁定类型(IE:只有iphone?只有一部iphone?)->有了这个问题所有可能的答案,我认为没有“最好”的方法。
  • @stefgosselin - 编辑了帖子并提供了一些细节。

标签: php iphone web-services


【解决方案1】:

您可以在您的 iPhone 应用程序中生成一个哈希值,该哈希值与其他查询应变参数一起传递。哈希应该包括一个只有 Web 服务器和 iPhone 应用程序知道的“密钥”(或“共享密钥”)以及传递的一个或多个查询字符串参数。

接收信息的 PHP 脚本可以重新生成哈希,因为它知道“密钥”。如果“key”与查询字符串中的匹配,则请求有效并且来自 iPhone,否则无效。

更新:为防止有人使用相同的查询字符串一遍又一遍地请求相同的信息,您可以在查询字符串和哈希中添加“过期”时间戳并检查请求是否如果哈希有效,则未过期。

我无法提供 Objective-C,但您的 PHP 脚本可能如下所示:

<?php

$hash = md5('SHAREDSECRET'.$_REQUEST['expiry'].$_REQUEST['param1'].$_REQUEST['param2']);

if ( $hash != $_REQUEST['$hash'] || time() > $_REQUEST['expiry'] )
  die('Invalid request.');

// Some additional code here for valid requests.

?>

根据上面的示例,您希望 iPhone 应用程序创建共享密钥(在本例中为“SHAREDSECRET”)、“param1”和“param2”的 MD5 哈希,并将其包含在对PHP 文件。

iPhone 请求的 URL 应如下所示:

http://example.org/file.php?hash=value&expiry=timestamp&param1=value&param2=value

当然,“密钥”本身不会在查询字符串中传递,这使得某人很难弄清楚如何获取您的信息(当然,除非是通过 iPhone 应用程序)。

【讨论】:

  • 与上述相同的评论。有人不能只检查查询字符串并在散列后使用该字符串吗?
  • @Elad Lachmi - 如果你的意思是他们会一遍又一遍地使用相同的哈希来检索相同的信息吗?是的,他们可以。但是为了规避这个问题,您可以在查询字符串以及哈希计算中包含一个“过期”参数(即当前时间 + 1 分钟),并确保如果请求在另一端有效,则该请求不会过期.
  • @Elad Lachmi - 通过使用我建议的解决方案,您无需依赖用户代理字符串,这意味着它肯定可以在 iPhone、Blackberry 和 Android 设备上运行.
  • 只是为了检查我是否理解您的建议:将时间戳添加到哈希中,这样即使再次使用哈希,它也将无效?
  • 似乎是一种固溶体。谢谢!
【解决方案2】:

作为第一步,您可以检查用户代理是否与 iphone 匹配。

在我们的例子中,我们计算一个静态查询参数(或路径字符串)与盐相结合的哈希,并将其作为额外的查询参数发送。我们在 PHP 端做同样的检查,以确保哈希是否相同。这可用于任何客户端,但您可以为每个与您的 PHP 服务对话的客户端设置不同的 salt 值。

【讨论】:

  • 难道不能有人只查看请求并从应用程序外部模仿散列字符串吗?
  • 是的,这是可能的,但您可以只使用现有查询参数之一来提供更多随机性,但如果请求被窥探并按原样发送,则无法阻止。除了上述帮助之外,还会做一个用户代理检查(尽管它可能是伪造的)吗?
  • 如果请求被窥探并按原样发送,则可以阻止它。看我的回答。
  • 不安全的安全性的好例子。 Security through obscurity 不被视为一种安全措施,因此不应使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多