【问题标题】:Authorizing user uploads授权用户上传
【发布时间】:2012-05-18 18:42:45
【问题描述】:

我网站的一个部分允许用户上传文件。这些文件不会上传到网站所在的服务器(比如说site.com),而是上传到s1.site.coms2.site.com 等。这些子域指向与主服务器不同IP 地址的服务器.我正在使用 Uploadify jQuery 插件进行文件上传。

现在,当用户登录并上传文件时,我希望上传的文件出现在“文件”下的帐户页面中。我不知道最好的方法是什么。

我可以为 Uploadify 设置选项,以便在上传的同时发送额外的 POST 数据。简单的解决方案是将上传文件的用户的用户名与文件上传一起发送,但是其他用户可以欺骗他们的用户名并将文件上传到其他人的帐户。不酷。所以我需要一种方法来告诉用户正在上传文件,同时停止用户名欺骗。

我考虑将用户会话作为 POST 数据发送,有点像这样:

$('#file_upload).uploadify({
    formData : { '<?php echo session_name();?>' : '<?php echo session_id();?>' }
});

但我对会话一无所知。 CodeIgniter 正在处理我的用户登录。这行得通吗?有人可以向我解释一下我将如何去做吗?

谢谢。

【问题讨论】:

    标签: php javascript jquery session uploadify


    【解决方案1】:

    我喜欢做一些事情,比如使用md5 hashing 根据用户名创建一个唯一的哈希值。一旦用户第一次创建了他或她的帐户,我就会这样做。然后我将该哈希值存储在名为hash_validation 的列中。

    接下来,我将(在用户登录时(为此使用 CodeIngiter))为哈希值创建一个会话变量。然后,出于安全目的,我可以对照表和用户名检查哈希值。很简单 ->

    $_SESSION['hash_value'] = $row['hash_validation']; //general example of grabbing the row we created
    

    我喜欢将我的 SESSION 值隐藏在页面上的一个 div 中,这样我就可以使用 JavaScript 不断地引用它们,而无需与服务器通信。

    完成上述所有操作后,我们可以使用 formData 方法将哈希值发送到服务器(无需像上面那样使用 php。)然后服务器可以根据现有哈希值检查哈希值表中所述用户名的值,如果正确,我们将上传文件。

    【讨论】:

    • 如果 key/salt/hash 永远不会改变,你最好只使用 GUID,因为哈希值无论如何都会暴露在数据库中。
    • 当然。这种技术都是一样的——对于未来的这篇文章; PHP uniqid
    • 糟糕!忘了提一下,您可以在用户每次登录时重新写入哈希值,因此如果您非常担心安全漏洞,您不必总是处理相同的值。
    猜你喜欢
    • 2011-12-26
    • 2013-06-24
    • 2015-10-27
    • 1970-01-01
    • 2017-11-16
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    相关资源
    最近更新 更多