我即将编写一个需要在服务器上存储一些文件的小webapp /工具/小部件。为了避免服务器端的不必要的负载,我想在客户端创建文件哈希(使用SHA,MD5或其他...)。它可以通过HTML5 FileAPI进行管理,但Opera和IE9用户将被解雇。可以使用JAVA或Flash applet代替HTML5方法,以保持应用程序跨浏览器兼容。但由于我不熟悉JAVA / Flash(我只会在生死场合使用它们),如果可能的话,我想坚持使用JS。但欢迎所有客户端建议...... JS,JAVA,Flash,等等...
无论用户代理如何,传统的POST方法(使用PHP)都可以实现。而AFAIK则更安全。
长话短说,我的问题是: 为什么我更喜欢客户端而不是服务器端哈希?
你能提供两种方法的优点和缺点吗?
答案 0 :(得分:2)
服务器端 更多的负载,但没有那么多。编写代码,计时,测量内存使用情况等。我怀疑这将是一个大问题,特别是如果你可以用cron工作来扩散负载,如果它是巨大的。
客户端 您无法信任哈希值,并且验证它们需要您在服务器上重新计算它们。减少服务器负载,但如果需要一段时间来散列大文件,这对用户来说会很烦人。
除非你每分钟都有数千个巨大的文件,否则我会在服务器端做这个!
答案 1 :(得分:2)
我试图在客户端写一些专业人员来做这件事,但老实说,你只会让自己变得困难。以及如何确保提交的哈希是由您生成的?任何人都可以轻松使用像Firebug这样的工具并更改正在运行的代码(纠正我如果我对此错了,从未实际使用它:D)。此外,他们可以创建/伪造自己的请求并将其发布到您的PHP文件中,这样您就会失去很多控制权。
那你怎么检查数据呢?生成另一个哈希并相互检查它们?但是那时你已经在服务器端了!
因此,请考虑将哈希操作服务器端保持在控制环境的位置。哈希算法已经存在多年了,所以我相信他们已经对它进行了很多优化。并且您将确保为您的客户提供更多兼容性。
如果你获得足够的流量,哈希是主要的性能影响,那么也许是时候升级到更大的东西......
但是不要误解我这是非常可能的并且有道理 - http://www.movable-type.co.uk/scripts/sha1.html - 但我无法让自己相信这个解决方案。
答案 2 :(得分:0)
如果JavaScript被关闭怎么办?如果你在服务器端做,你不必依赖JavaScript来完成你的工作。宁愿使用额外的服务器资源100%保证它能够正常工作!