2012-04-19 67 views
2

我是PHP开发新手。我没有任何同事讨论PHP。所以我会在这里发布我的问题。这个PHP脚本是否安全?

我已成功地为我自己做的登录脚本,女巫看起来很像本网站上的脚本:http://www.phpeasystep.com/phptu/6.html

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

回答

5

您发布的教程中存在一些问题。

  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地读取您的密码。坏!

如果您想要做的正确,请阅读The definitive guide to form-based website authentication并实施它的建议。

+0

我同时加密和密码。这里没有问题。 只是想知道“从数据库中选择 - >在会话中存储”的方法。 PHP新手,不想让门打开:) – hogni89 2012-04-19 08:28:29

2

它不是安全可言:

  • 你存储的密码数据库加密。只存储数据库中的散列(sha256或更好:sha512)(带盐),然后查询用户名和密码的密码
  • 您正在cookie中存储未加密的密码。你根本不应该这样做。您应该在数据库中存储会话标识,每次加载页面时都可以检查会话状态。
  • 我不知道你是否使用它,但尝试使用SSL加密(https)加密传输用户凭证。
+2

SHA1不被认为是安全的一个登记表,更喜欢sha256或sha512 – 2012-04-19 08:13:17

+0

是的。刚刚编辑:-) – Stefan 2012-04-19 08:14:11

0

看看这个脚本,我会说只要你实现了带斜杠功能并使用哈希算法(SHA256)来存储密码,那么你会走很长的路线。你可以通过向hash添加一个salt来进一步扩展它,如果有人曾经攻击过你的数据库并且执行了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

0

号它更安全不存储密码原样。你最好散列密码(即使用md5())并将散列存储在数据库中。要进行登录,您需要从表单发送密码,对其进行散列并与存储在数据库中的散列进行比较。

+2

我会建议使用比md5更安全的东西。即SHA256 – 2012-04-19 08:25:05

2

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

0

SHA512散列是盐,如果可能最好的方式,但我发现这个负载和使用PDO,但我不能让一个使用SHA512哈希任何想法回复请

+0

如果你有问题,你应该启动一个新的 – 2012-12-22 00:18:21