所以我需要一些建议。我正在建立一个仅供学术界使用的网站,仅限于一小部分人。本网站的唯一目的是作为文件上传的GUI。这些文件的大小通常介于10-12GB之间。
通过做reasearch,我发现我可以使用php脚本上传文件并更改php.ini中的最大文件上传大小(但我找不到最大文件上传大小限制)。我有几个问题。
1)我是否需要以某种方式找出维护网站与用户之间连接的方法,以避免连接超时等问题?如果是这样,是否足以在服务器端执行此操作?或者这些使用者将使用的Web浏览器也存在问题(Web浏览器会超时连接)吗? ---我问这个是因为这些上传需要花费大量时间。
2)我必须考虑哪些安全问题?到目前为止,我已经发现并考虑了以下内容:
仅限制从多个子网(我想要的学术用户)访问网站
将要上传到网站的文件是一种特殊格式,由唯一标头组成) - 从而检查这些标头。
使用.htaccess
将所有上传内容移至www根文件夹
可能会发现反病毒检查这些文件
最初所有这些用户都会进行身份验证以访问此网站 - 这也是我必须考虑的第一个问题 - 他们可以保持多长时间登录以及如何控制
本网站的安全性方面对其开发至关重要,当您使用12 GB文件时,这是一个非常棘手的问题。
这些是我认为难以实现的一些事情,但我相信还有更多。你们认为我还应该考虑什么?如果还有其他实施方法,请不要犹豫。
有条件的信息:
谢谢你们,我知道这是很多东西,但任何帮助都会非常感激。
答案 0 :(得分:10)
您无法通过PHP上传大型文件。无论你投入多少服务器资源(内存)(并且相信我,你需要很多!),PHP中有一个限制将阻止你这样做。
在php.ini中,有一个名为“post_max_size”的变量会影响您可以发送到服务器的最大数据大小。此变量是无符号的32位整数,这意味着您不能高于4,294,967,295。
一个好的解决方案是使用Flash将文件拆分成几个小部分,然后进行文件上传。我找到了一个适合您的库:http://www.blog.elimak.com/2011/08/uploading-large-files-with-flash-splitting-the-bytearray-in-chunks/
如果您在PHP中遇到内存问题,只需缩小块。
祝你好运!编辑:要回答你的第二个问题,你已经掌握了大部分问题。如果您担心数据可能在途中被劫持,请使用SSL进行转移。对于身份验证,请考虑使用OAuth,并确保在传输不活动时撤消用户的访问令牌。将php_flag engine off
添加到.htaccess文件中以防止上载的PHP文件运行。并且服务器病毒扫描程序定期运行也不是坏事:)
答案 1 :(得分:2)
不了解您的用户,我建议坚持使用SCP。所有的安全问题都已通过SCP解决,并且可以广泛免费获取。
话虽如此,据我所知,如果你的用户不是技术用户,SCP会很痛苦。如果我是你,我不会尝试将其完全实现为Web应用程序。我会有一个Web前端,它只是为用户生成适当的SCP命令,并为它们执行它。使用Java applet应该很容易,只需将它反馈给您的进程的SCP进度转换为Java,就可以通过浏览器提供粗略的进度。如果你去applet路由,你会遇到一些安全问题,因为applet通常不能在客户端的PC上启动进程。要解决此问题,您需要签署小程序和/或请求更高级别的权限。根据用户的技术水平,这可能也可能不是一个好的解决方案。
如果您坚持使用网络应用程序路线,请确保使用SSL / TLS进行传输。这会照顾你的数据包嗅探问题。还要确保没有在任何大文件上设置可执行位。如果它们需要可执行,则坚持用户在下载时设置可执行位,而不是在存储时。如果必须在服务器上执行,请使用内置文件系统权限对应用程序进行沙盒处理。如果必须以root身份在服务器上上传和执行,Heaven会帮助您。如果是这种情况,则安全性是不可能的: - )
使用防病毒检查文件是好的,但请注意检测率很差。我已经看到过一个文件受到严重感染并被35个AV程序中的30个发音干净的情况。假设所有文件都被感染并适当地限制其权限。
真正的风险是有人可能会上传包含漏洞的代码。只要文件不可执行就更难了。如果无法访问编译器,则更难。如果限制文件只能访问某些程序的方式,那么对于开发人员来说就更难了。为防止这种情况,您可以做的最好的事情就是安装补丁。更新可以确保您的安全,即使它们有时会破坏内容。
如果用户值得信任,您可以允许他们自己设置权限,以便谁可以读/写文件。这样可以控制个人的敏感信息,如果有人将权限设置为松散,则存在一些责任。
这是一个很难解决的问题,我知道我只是触及了表面。我希望它至少有一点帮助。
答案 2 :(得分:1)
如你所说,有效地建立这样一个网站真的很棘手。但是,您可能需要考虑使用以Java或C#构建的GUI程序作为更合适/安全的方法。原因和优势很多。
首先,建议您在上传之前在客户端进行拆分。您的用户可以轻松使用为此设置的功能强大的实用程序,例如FFSJ Command Line Interface(适用于Windows)或JJSplit (Java Open Source)。
使用这样一个程序的好处如下:
我可以继续,但你得到了要点。但是,如果您不是程序员,这个选项的明显缺点是财务成本和时间。
然而,一个已经具备拆分和上传基本功能的程序是GSplit。在基于Unix的系统上,他们也可以在上传之前拆分文件,或者使用HJSplit等程序。
如果您必须坚持使用PHP,请查看Open Upload。它类似于RapidShare克隆,已经有ip限制,用户身份验证,验证码等。
我希望能够详尽地回答你的问题。祝你好运。
答案 3 :(得分:0)
您可以使用ajax函数来保持会话或使用ob函数来控制流。 见http://www.php.net/manual-lookup.php?pattern=ob&lang=pt_BR&scope=quickref
答案 4 :(得分:0)
是的,你可以在没有flash或java的情况下使用HTML5。您可以通过FileReader对象创建文件的读片,然后通过ajax将原始块发送到服务器,然后您可以读取它们并在PHP中组装它们。好的想法是,当你将文件发布到PHP时,你可以在ajax post请求中传递开始字节和结束字节等附加属性,这样你就可以跟踪哪些部分被上传,你可以构建一些排序如果需要,暂停/恢复逻辑有关更多信息,请查看:
http://www.html5rocks.com/en/tutorials/file/dndfiles/ http://www.webiny.com/blog/2012/05/07/webiny-file-upload-with-html5-and-ajax-using-php-streams/
我宁愿使用HTML5而不是java或flash。您可以使用SSL,如果您确实希望它更安全,您可以在发送之前为这些用户提供私钥来加密数据,然后您可以在服务器上解密(如果您使用SSL,这将是多余的)。请记住,解密12 GB的数据文件可能会相当慢。
答案 5 :(得分:0)
恕我直言,FTP在这种情况下更适合。
答案 6 :(得分:0)
我会认真建议FTP +显式/隐式SSL。这肯定会解决你的问题。
有一些提前的ftpds,支持:
唯一的缺点是下载客户端并设置它,这不是每个人的最爱。
与HTTP一样,您需要某种浏览器来查看内容,您还需要FTP客户端来分别操作它。