php
  • sql
  • security
  • 2013-08-25 22 views 0 likes 
    0

    我的代码:会话ID的md5(时间())

    if ($usernamelogin == $dbusername && $passwordlogin == $dbpassword) 
    { 
        $hash = md5(time()); 
        mysqli_query($connection, "UPDATE users SET sessionid='$hash' WHERE username='$usernamelogin' AND password='$passwordlogin'"); 
        $_SESSION['id'] = $hash; 
        $_SESSION['un'] = $usernamelogin; 
    } 
    else 
    { 
        echo ('Wrong username or password.'); 
    } 
    

    然后我使用$会话ID,在SQL会话ID和用户名,以验证用户是否是真实的。这意味着,假设我有防SQL注入的保护,安全风险相对较少,对吧?

    我来这里问,因为这看起来像一个过于简单的解决方案,一个复杂的问题。我去过的所有文件和网站都实施了更复杂,更易混淆,并且有时不安全的方法来验证用户是否已登录。

    这是安全吗?

    +4

    请告诉我你没有在数据库中以纯文本存储密码?如果你那么**没有**你不安全。另外,如果您不使用SSL,会话可以被拦截。即使你是,许多“最佳实践”指南建议经常更新会话ID(5-10分钟)。最后,为什么选择一个可预测的会话ID?如果有人可以粗略地猜测会话何时被创建,他们可以猜出该id(以小范围)。使用GUID/UUID – Basic

    +0

    我还没有切换,但没有我不会以纯文本格式存储它们。我仍处于开发阶段。 –

    +1

    哦,你也容易受到SQL注入的影响。尝试输入密码“pass”; DROP TABLE用户 - '(好吧,不要但你明白了)。 – Basic

    回答

    1

    您不应该使用md5(time())来生成会话ID,这是不安全的。时间是班轮的,可以猜测,例如有些网站会显示用户何时进入,您可以使用这些信息和蛮力来劫持他的会话ID。

    第二件事,你也可以在随机时间蛮横的,而且很有可能你会得到一些随机的用户会话ID。另外,如果两个用户同时登录,则两个用户拥有相同的第二个事件的可能性很大。

    看看这个伟大的演讲(DEFCON 18: How I Met Your Girlfriend 1/3),我看了很长一段时间,我不记得细节,但我记得演讲者提出了关于会议弱点的系列观点。另请参阅OWASP wiki,它在Web安全性和会话安全性方面拥有丰富的资源。

    +0

    这将通过用户名检查来解决(他们不会有相同的会话ID和用户名,所以没有问题),但如果你检查OP的评论,我不再使用MD5(时间()) 无论如何。我会观看视频,我已经在看OWASP wiki。谢谢。 –

    +0

    @JamesG。会话ID的重点在于它是客户需要知道的唯一事情......否则,如何阻止我修改Cookie /您在浏览器中存储的任何内容以假装成其他人?你不能相信客户提供的_anything_。会议ids _必须是唯一的,不可猜测的 – Basic

    2

    请不要采取这种错误的方式,但如果你不明白SSL,你不应该处理金钱。

    SSL用于加密浏览器和服务器之间的通信。没有它,浏览器和服务器之间的网络,任何人都可以看到以明文形式发送的每一个请求/响应 - (?)密码,帐户ID,信用卡号码等

    这是http://地址和https://之间的区别地址。它需要服务器和代码更改

    服务器需要来自可信机构的证书来启用SSL(以及一些配置更改),但这还不够。你还需要确保你的代码只处理问题secure cookies - that is, cookies that can't be sent over http,在服务器配置错误等情况下,检查传入请求是否启用了SSL。这是一个巨大的话题,我无法在一个答案中告诉你足够的答案你安全。

    作为绝对最低限度,您的代码应该对所有OWASP Top 10 vulnerabilities安全。这是使任何网站安全的绝对面包和黄油的东西。您还需要阅读SSL/TLS and encryption in general。这将给你一个握手/消息如何来回传递的概述。

    +0

    我同意,除非我知道它是100%安全的,否则该网站将不会处于活动状态。该网站不在线,仍在开发中。我想确保在任何事情公开之前我完全理解安全。谢谢。 –

    相关问题