保护网络服务器上的文件并通过 iPhone 应用程序访问它们

Posted

技术标签:

【中文标题】保护网络服务器上的文件并通过 iPhone 应用程序访问它们【英文标题】:Securing files on web-server and accessing them via iPhone app 【发布时间】:2013-10-10 14:41:56 【问题描述】:

我需要在需要保护的网络服务器上存储数千个 PDF(加密或基于访问权限?)。

我希望访问这些文件的唯一方法是通过我目前正在制作的 iPhone 应用程序,该应用程序受用户名/密码保护。 (我通常使用 php 从应用程序与数据库/文件进行通信)

    我应该首先使用哪些技术来保护文件? 我应该使用什么 ios/php 代码/框架在设备上显示它们? 是否需要通过 ssl 或其他方式加密传输?

提前致谢,利

【问题讨论】:

这里有很多可能性,您选择哪一种可能取决于您需要的安全级别。话虽如此,我使用ASP.Net 为文档服务器实现了类似的功能。到目前为止,它的内置限制足以满足我的目的。至于在设备上显示它们,我为此使用了UIWebview,如本答案所述:***.com/questions/19296260/… 一种方法是;将 PDF 文件存储在文档根目录之外,并使用一些安全的 PHP 系统提供文件。 【参考方案1】:

    如果这些 PDF 文件包含敏感信息,您应该使用不可破解的加密算法(例如 AES-256)对其进行加密,使用 mcrypt 进行对称加密(请参阅php.net/mcrypt)。

    我建议你弹出iOS的默认PDF阅读器,这是最简单的方法。

    同样,如果这些文件是超级敏感的或什么的 - 当然,使用 SSL/TLS。建议还是用吧。

【讨论】:

因此,使用这种方法,我将使用 mcrypt 在本地加密文件,然后上传它们。然后在我通过 SSL 发送它们之前暂时解密它们? 不,您应该在请求文件后加密并将它们存储在网络服务器中 > 您可以即时解密并通过 ssl 发送它们。【参考方案2】:

要在您的应用中显示 PDF,您可以使用 UIDocumentInteractionController。见Document Interaction Programming Topics for iOS。比如:

NSURL *url = ... // the file URL for the PDF
UIDocumentInteractionController *controller = [UIDocumentInteractionController interactionControllerWithURL:url];
controller.delegate = self;
[controller presentPreviewAnimated:YES];

显然,您必须将视图控制器指定为符合UIDocumentInteractionControllerDelegate 协议,并且至少要实现documentInteractionControllerViewControllerForPreview

- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller

    return self;

您也可以在UIWebView 中查看 PDF,但文档交互控制器可能更好。

要加密传输,您应该使用 SSL(例如,使用 HTTPS 而不是 HTTP)。显然,您还应该确保永远不要以明文形式发送/存储密码。

就保护服务器上的文件而言,至少要确保它们在不经过一些授权过程的情况下是不可访问的。也就是说,不要只是将文件放在 Web 服务器上,然后在某些应用程序级别的安全性上进行回复以检索 URL。将文件存储在 Web 服务器根目录之外的其他位置,并通过您的安全 Web 界面控制对文件的访问。始终假设您的 URL 可能会受到攻击。根据所需的安全级别,您可能还希望加密服务器上的文件并让应用解密它们。

出于一般安全问题,我建议您查看 WWDC 2012 视频 The Security Framework。或 WWDC 2011 视频 Security Overview 和 Securing Application Data。另请参阅Security Starting Point for iOS 文档。

【讨论】:

谢谢,我会看那些,对于第 3 点,您建议使用什么,我知道您可以使用 htaccess 保护目录,但不知道这是否足够好,或者如何授予访问权限iPhone。 @llellis2k 在确保 PDF 不能直接访问方面,我喜欢 user488074 的建议,即确保 PDF 根本不在 Web 服务器的 Web 可访问文档树上。将 PDF 放在 Web 目录结构之外的某个位置,以确保它们只能通过服务器的 PHP(或其他)代码访问。然后确保该服务器 PHP 代码执行必要的身份验证。

以上是关于保护网络服务器上的文件并通过 iPhone 应用程序访问它们的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有注册 Swift iPhone 应用程序的情况下保护数据

iOS - 如何通过 Objective-C 定位我的 iPad/iPhone 上的所有文件

iPhone 上的 Facebook 登录出现错误

使用 MVC 为 iPhone 应用程序构建 RESTful API - 如何保护它?

iPhone上的COMET(服务器推送到客户端)[关闭]

在 iPhone 上的 Web 应用程序中维护 PHP 会话