登录网站时会发生什么?
我知道存储cookie和一些信息(什么信息?)被发送到服务器......但也许更详细一些?
我一直在开发一个基于PHP的CMS,用于我的机器人团队的网站.当然,还有很多其他平台,但有什么好玩的呢?
但是,尽管如此,我们确实得到了额外的分数,因为我们可以说我们做的不仅仅是为Drupal或WP制作模板.这有点无关,但我希望有一天能够将CMS作为FOSS发布,但它肯定会成熟并且更加安全.但我离题了.
我已经到了开发这个需要登录系统的系统的地步.这比我预期的更令人沮丧.在安全方面,我可以一丝不苟,这不是一个例外.问题是,我知道如何处理数据库安全(不信任用户输入,将密码存储为随机盐的哈希等),但我缺乏建立良好的客户端 - 服务器系统的知识.这方面有几个问题:使用会话变量有多安全?在这方面如何正确实现会话变量?是否应在每次网页浏览时重新生成会话cookie?在使用cookie来保持用户登录任何时间时,您放弃了很多安全性,但实现此类系统的最佳实践是什么?
关于这个主题的好教程也会有很大帮助.
谢谢你的时间.
我希望能够根据失败的尝试来限制登录尝试,但我有一些问题.
我应该使用MySQL吗?(请注意,它可能会导致数据库紧张)
我应该为每个用户和系统范围或仅在系统范围内进行限制吗?(这样可以阻止普通人猜测密码)
我应该如何计算我的门槛?(因此它会自动适应变化/增长)
我应该如何检索此阈值?查询/计算缓存中的每个失败或存储?
我应该用什么节流?(读取睡眠()可能最终导致服务器紧张的响应)
有没有人有一些示例代码?
我是新手,所以我很感激你的帮助!谢谢
我的代码中有许多实例需要快速访问登录的用户名和用户ID.我目前使用cookies.这不安全.
我认为会议将是一个解决方案,但会议到期.
另一种选择是将唯一令牌存储在cookie中,然后与数据库中存储的令牌匹配,以检索登录的用户数据.这是最安全的解决方案,但我看到的问题是,在我的代码中有很多次需要登录的用户名和用户ID,但是一直查询会占用资源不必要(这是真的吗?)
解决办法是什么?
我已经以编程方式实现了登录功能.
此代码如下:
$token = new UsernamePasswordToken($user, $user->getPassword(), 'main', $user->getRoles());
$this->get('security.context')->setToken($token);
$event = new InteractiveLoginEvent($this->getRequest(),$token);
$this->get('event_dispatcher')->dispatch('security.interactive_login', $event);
Run Code Online (Sandbox Code Playgroud)
在此之后,我该如何实现记住我?
(我知道如何使用表单,但我想实现以编程方式记住我.)
请帮忙...
最初的想法:在“改进的持久登录 Cookie 最佳实践”一文中,( http://jaspan.com/improved_persistent_login_cookie_best_practice ) bjaspan 提出了一种通过创建系列标识符来捕捉潜在 cookie 窃贼的聪明方法,简单来说, 如果两台计算机尝试使用相同的系列标识符,则标记可能存在安全问题。
问题:然而,正如“基于表单的网站身份验证的权威指南”第二部分第 1 点正确指出的那样,黑客只需在为自己复制用户的 cookie 后删除它,就很容易打败它。由于这篇文章相当受欢迎,任何有足够技巧来窃取 cookie 的人都可能知道删除旧的。
问题:是否有解决方案可以克服这个问题?能够检测 cookie 盗窃(即使不是即时的)的好处对于持久登录安全是相当有价值的。有没有更好的方法来防止或检测 cookie 盗窃?
我在凤凰城创建了一个webapp,我想知道在它中实现用户注册/身份验证和会话管理的更好方法.
但我不确定这些是多么稳定,是否在某个地方用于生产.如果有一些库可以安全地用于生产,并且有一些示例实现,请告诉我.
我们目前正在为我们拥有的网络应用程序存储纯文本密码.
我一直主张转移到密码哈希,但另一位开发人员表示这样不太安全 - 更多的密码可以匹配哈希,字典/哈希攻击会更快.
这个论点有什么道理吗?
我正在尝试按照此处提供的指南实现" 记住我 "功能:基于表单的网站身份验证的权威指南,此处:http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/
看来,"cookie令牌"应该在存储在数据库中时进行哈希处理(如果攻击者可以访问数据库,则未使用的令牌看起来像普通的登录/密码,允许登录网站).
寻找一个好的哈希算法,我发现这个推荐的技术使用bcrypt:https://stackoverflow.com/a/6337021/488666
我已经尝试过,发现随着建议的轮数(15)导致处理时间非常慢(在2,3或者英特尔2核E500 + 4 GB RAM上验证2,3s)
我知道哈希算法应该相对缓慢阻碍攻击者,但在这个层面上,它阻碍了用户使用网站:)
你认为减少轮数(例如7,将处理时间减少到10ms + 10ms)就足够了吗?
关于REST和安全性的主题,有许多关于SO的优秀问题(和答案).许多人说"纯粹主义者不喜欢这样,但是等等等等......"然后其他人说"你永远不应该这样做,因为等等等等".
但我还没有看到"纯粹主义者"为以下情况提出建议的解决方案.所以我的问题是 - 以下场景中的"纯RESTful解决方案"是什么?
简单的场景......
想象一下,建立一个数据库/网站,让用户管理自己喜欢的食谱.该网站公开了RESTful API,以便用户可以从他们想要编写的自定义程序(利用此API)查询和操作他们的列表.
因此,用户"A"有3个最喜欢的食谱,ID为"1","2"和"3".
用户"B"有两个最喜欢的食谱,ID为"4"和"5".
我们需要确保如果用户A发送DELETE命令/Recipes/4,他将得到Forbidden (403)响应.
我通常会做什么......
我通常会做的是让他们首先调用一个身份验证方法,然后向他们发送一些有效30分钟左右的auth-token.通常,此令牌将通过cookie传递.
什么是纯粹的解决方案?
纯REST解决方案是让它们将它作为查询字符串中的变量传递吗?饼干是魔鬼吗?令牌是否应该用作URL的一部分(而不是查询字符串参数)?还有其他东西可以清楚地回答这个问题吗?