我正在尝试了解安全的登录身份验证。以下链接中提供了用于实现登录功能的代码。 (在这种情况下,使用的是Guid,但在现实生活中,可以使用更好的机制)
用户登录后,欢迎页面将在以下链接中提供代码以检查用户的真实性。 (这是我发现的用于验证用户身份验证的最常见代码)
我在想一个失败的场景。考虑这种情况
我知道上述可能性没有严重影响,但是仍然可以避免这种情况吗?还是这是一个有效的方案?我想念什么吗?
这是我的问题
答案 0 :(得分:0)
在此示例中,您提到这是另一种攻击情形(CSRF)。
CSRF的基本含义:攻击者代表受害者执行操作。该操作或该操作的原始请求将来自另一个站点。
要防御CSRF,您可能需要遵循OWASP指南。 (https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.md)
但以您为例。假设您要保护名为Order的操作。
您的服务器上将生成一个令牌。然后,该令牌将被呈现或发送给客户端。
具有Post参数的有效请求看起来像www.somewebsite.com/Order
Order=Something & Token="RANDOM_TOKEN"
此令牌将在执行此操作之前由服务器检查。
如果攻击者只是从另一个站点/域发起此请求,因为它已在客户端页面上呈现,那么攻击者将无法访问此令牌。
攻击者是否有可能访问此令牌?
是的,如果该应用程序容易受到(XSS)的攻击,则有可能。 攻击者可以使用JS命令使用JS命令将恶意链接发送给受害者,
尽管XSS经常窃取受害者的Cookie,但通常情况下。但是,如果将Cookie标记为HTTPOnly
,则可能会发生CSRF攻击。