1

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

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

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

4

6 回答 6

4

关于您发布的教程的几个问题。

  1. 好像真的老了。带斜杠?会话注册?这些都是来自以前版本的 PHP 的结构,现在都被认为是不好的做法。
  2. 尽管作者说它不是 mysqlinjection 安全的,但您也可以欺骗 mysql_real_escape_string。将PDO准备好的语句一起用于数据库内容。
  3. 从代码来看,密码似乎都未加密地存储在数据库中,这是不明智的!检查PHP 密码的安全散列和盐,以了解如何以安全的方式散列/存储密码。
  4. 可读密码存储在会话中,任何有权访问您的 cookie 的人也将能够从 cookie 中一对一地读取您的密码。坏的!

If you want to do it right read The definitive guide to form-based website authentication and implement it's suggestions.

于 2012-04-19T08:10:29.070 回答
2

这根本不安全:

  • 您将未加密的密码存储在数据库中。仅在数据库中存储哈希(sha256 或更好:sha512)(使用盐),然后查询用户名和 POST 密码的哈希
  • 您将未加密的密码存储在 cookie 中。你根本不应该那样做。您应该在数据库中存储一个会话 ID,您可以在每次加载页面时检查会话状态。
  • 我不知道您是否正在使用它,但请尝试使用 SSL 加密 (https) 来加密传输用户凭据。
于 2012-04-19T08:04:24.490 回答
2

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

于 2012-04-19T08:07:21.317 回答
0

通过查看该脚本,我会说,只要您实现带斜杠功能并使用散列算法 (SHA256) 来存储密码,那么您就会走在正确的路线上。您可以通过在哈希中添加盐来进一步扩展它,如果有人攻击您的数据库并执行 SELECT * FROM Password WHERE Password = 'HASH'; 这将保护您 这将返回所有用户名并允许攻击者尝试使用这些凭据登录。SQL 注入和 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

于 2012-04-19T08:05:44.583 回答
0

不,不按原样存储密码要安全得多。您最好散列密码(即使用 md5())并将散列存储在数据库中。要进行登录,您需要从表单发送密码,对其进行哈希处理并与存储在数据库中的哈希值进行比较。

于 2012-04-19T08:06:32.417 回答
0

SHA512 hashing is the best way with salt if possible but i have found loads about this and using PDO but i cant make a register form that uses the sha512 hash any ideas reply please

于 2012-12-21T23:58:12.443 回答