这个PHP脚本安全吗?

时间:2012-04-19 07:59:00

标签: php login

我是PHP开发的新手。而且我没有任何同事与PHP讨论过。所以我在这里发布我的问题。

我已经设法为自己做了一个登录脚本,女巫看起来很像这个网站上的脚本:http://www.phpeasystep.com/phptu/6.html

我的问题是。这是一种安全的方法吗? PHP登录脚本有一个很好的教程吗?在会话中存储信息的方法有问题吗?

6 个答案:

答案 0 :(得分:4)

您发布的教程有几个问题。

  1. 好像很老了。的stripslashes?了session_register?这些都是以前版本的PHP的构造,现在都被认为是不好的做法。
  2. 即使作者说它的mysqlinjection是安全的,它也不是,你也可以欺骗mysql_real_escape_string。将PDOprepared statements一起用于数据库内容。
  3. 从代码来看,似乎密码都是未加密存储在数据库中的,这是不明智的!检查Secure hash and salt for PHP passwords以了解如何以安全的方式散列/存储密码。
  4. 可读密码存储在会话中,有权访问您的cookie的任何人也可以从cookie中读取您的密码1对1。 BAD!
  5. 如果你想这样做,请阅读The definitive guide to form-based website authentication并实施它的建议。

答案 1 :(得分:2)

根本不安全:

  • 您正在将未加密的密码存储在数据库中。在数据库中只存储哈希值(sha256或更好:sha512)(带有salt),然后查询用户名和POST密码的哈希值
  • 您正在将未加密的密码存储在Cookie中。你根本不应该这样做。您应该在数据库中存储会话ID,您可以在每次加载页面时检查会话状态。
  • 我不知道您是否正在使用它,但尝试使用SSL加密(https)进行加密的用户凭据传输。

答案 2 :(得分:2)

绝对不安全,它将密码存储为文本,而不进行散列。检查密码哈希(至少sha256,从不md5或sha1)和盐渍 哈希将对密码进行编码,以便在成功进行数据库攻击时,没有人能够获取密码。 Salting将添加一些安全性,您只需在每个密码中添加一些字符串并将其哈希。您可以为每个用户提供自定义salt,并为一些不在键盘上的特殊字符提供服务器salt。这将使密码非常安全。 使用PDO和SQL查询参数可以使SQL注入攻击更安全 至于存储在会话中 - 确定,但从不存储密码,密码被插入,散列,并且从未再次使用过,至少在另一次登录之前。

答案 3 :(得分:0)

通过查看该脚本,我会说只要你实现了条带斜杠功能并使用散列算法(SHA256)来存储密码,那么你就会走很长的路线。您可以通过向哈希添加一个盐来进一步扩展这一点,如果有人攻击您的数据库并执行SELECT * FROM Password WHERE Password ='HASH',这将保护您;这将返回所有用户名并允许攻击者尝试使用这些凭据登录。 SQL Injections和XSS是网站上常见的攻击类型,可以通过登录系统执行。我建议你阅读它们。

其他资源:

http://www.webstockbox.com/php/7-tutorials-on-how-to-create-a-php-login-system/

http://en.wikipedia.org/wiki/Cross-site_scripting

http://en.wikipedia.org/wiki/SQL_injection

答案 4 :(得分:0)

没有。不按原样存储密码会更安全。您最好使用密码(即使用md5())并在DB中存储哈希值。要进行登录,您需要从表单发送密码,将其哈希并与存储在DB中的哈希进行比较。

答案 5 :(得分:0)

如果可能的话,SHA512哈希是使用salt的最好方法,但是我已经找到了关于这个和使用PDO的负载,但我不能使用sha512哈希的任何想法回复的注册表格