保护Web服务器上的文件并通过iPhone访问它们

问题描述:

我需要在需要安全保护(加密或基于访问权限?)的Web服务器上存储数千个PDF。保护Web服务器上的文件并通过iPhone访问它们

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

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

由于提前,利

+0

这里有很多的可能性,你会选择哪一种可能取决于你所需要的安全级别。话虽如此,我为文档服务器使用“ASP.Net”取得了类似的结果。它的限制已经足以满足我目前的需求。 至于在设备上显示它们,我使用了一个'UIWebview'来解决这个问题,正如在这个答案中所解释的:http://*.com/questions/19296260/how-to-upload-pdf-file-from- ibook或其他应用程序在ipad应用程序/ 19297490#19297490 – Robert

+1

一种方法是;将PDF文件存储在文档根目录之外并通过一些安全的PHP系统提供文件。 – vonUbisch

在应用程式中显示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; 
} 

您还可以查看PDF文件中一个UIWebView,但文档交互控制器可能更好。

要加密传输,您应该使用SSL(例如,使用HTTPS而不是HTTP)。你显然也应该确保你永远不会发送/存储密码。

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

对于一般安全问题,我可能会建议查看WWDC 2012视频The Security Framework。或WWDC 2011视频Security OverviewSecuring Application Data。另请参阅Security Starting Point for iOS文档。

+0

谢谢我会看那些,对于第3点你会建议使用什么,我知道你可以用htaccess保护目录,但不知道这是否足够好,或者如何访问iPhone。 – lellis2k

+0

@ lellis2k为了确保PDF不能直接访问,我喜欢user488074的建议,即确保PDF不在Web服务器的Web可访问文档树中。将PDF放在网络目录结构之外的某个位置,这可确保它们只能通过服务器的PHP(或其他)代码访问。然后确保该服务器PHP代码执行必要的身份验证。 – Rob

  1. 如果这些PDF文件中包含你应该使用一个牢不可破的加密算法,如AES-256加密他们的敏感信息,使用的mcrypt对称加密(见php.net/mcrypt) 。

  2. 我会建议你弹出iOS的默认PDF阅读器,这将是最简单的方法来做到这一点。

  3. 再一次,如果这些文件是超级敏感或什么的 - 当然,使用SSL/TLS。无论如何,建议使用它。

+1

所以用这种方法我会用mcrypt在本地加密文件,上传它们。然后在我通过SSL发送它们之前临时解密它们? – lellis2k

+0

不,您应该加密并将它们存储在网络服务器中,一旦文件被请求>您将它解密并通过SSL发送它们。 –