网络漏洞很猖獗,而且不断增加。维护你的用户的安全和隐私比以往任何时候都更重要。 不解决网络漏洞会导致声誉毁于一旦,并被监管机构处以巨额罚款,你还会失去用户的信任。 网站和网络应用程序很容易受到恶意软件、垃圾邮件和其他攻击–本文重点讨论其中一个攻击媒介–跨站请求伪造(CSRF)攻击。CSRF攻击特别令人不安,因为它们可以在用户不知情的情况下发生。开发人员或网站所有者也很难发现它们,因为恶意请求看起来与真实请求高度相似。 本文探讨了CSRF攻击,它是如何工作的,以及你可以采取哪些步骤来准备应对。 什么是CSRF攻击? CSRF攻击是如何工作的? GET请求的CSRF POST请求的CSRF 减轻CSRF攻击的3种方法 如何使用CSRF令牌防止CSRF攻击 如何利用Referrer标头来防止CSRF攻击 什么是CSRF攻击? 跨站请求伪造攻击,也被称为CSRF攻击,通过提交恶意请求,在不知不觉中欺骗认证用户,使其执行非预期的操作。 CSRF攻击是如何工作的。(图片来源: Okta) 通常情况下,CSRF攻击涉及改变状态的请求,因为攻击者没有收到回应。这类请求的例子包括删除记录、更改密码、购买产品或发送消息。这些都可以在用户不知情的情况下发生。 恶意攻击者通常使用社会工程,通过聊天或电子邮件向毫无戒心的用户发送一个链接。 当用户点击该链接时,它就会执行攻击者设置的命令。 例如,点击一个链接可以从用户的账户中转移资金。或者,它可以改变用户的电子邮件地址,使他们无法重新获得账户访问权。 CSRF攻击是如何工作的? 让用户在登录时发起一个改变状态的请求是CSRF攻击的第一步,也是最关键的一步。通过CSRF攻击,攻击者的目的是让已认证的用户在不知情的情况下向网站或网络应用程序提交一个恶意的网络请求。这些请求可以包括cookies、URL参数和其他在用户看来正常的数据类型。 要使CSRF攻击成功,必须发生以下条件: 一个经过验证的用户必须登录到一个使用cookies进行会话管理的网络应用程序。 攻击者必须创建一个改变状态的伪造请求。 由目标服务器处理的真正的请求不应包含不可预测的参数。例如,在启动状态改变请求之前,请求不应该期望有一个密码作为验证的参数。 完成CSRF攻击的最常见方法是在具有薄弱的SameSite cookie策略的应用程序中使用cookie。 网络浏览器自动地、通常是匿名地包括cookies,它们在用户向某个域发出的任何网络请求中保存该域所使用的cookies。 SameSite cookie策略定义了浏览器在跨站浏览情况下如何对待cookie。如果设置为严格,cookie就不会在跨网站浏览的情况下共享,从而防止CSRF攻击。如果设置为无,浏览器会在所有的跨网站上下文中附加cookie。这就使应用程序容易受到CSRF攻击。 当用户在不知情的情况下通过网络浏览器提交一个恶意请求时,保存的cookie会使该请求在服务器看来是合法的。然后,服务器通过改变用户的账户、改变会话状态或返回所请求的数据来响应该请求。 让我们仔细看看CSRF攻击途径的两个例子,一个是GET请求,另一个是POST请求。 GET请求的CSRF 首先,考虑一个金融银行网络应用程序使用的GET请求,攻击利用了GET请求和超链接传递。 假设转账的GET请求看起来是这样的: GET https://xymbank.com/online/transfer?amount=1000&accountNumber=547895 HTTP/1.1 在上面的真实请求中,用户要求将1000美元转到 547895 的账户中,作为购买产品的付款。 虽然这个请求是明确、简单和实用的,但它使账户持有人暴露在CSRF攻击之下。这是因为该请求不需要攻击者可能不知道的细节。因此,为了发起攻击,攻击者只需要改变这个请求的参数(金额和账户号码),就可以创建一个可执行的伪造请求。 恶意请求对银行的任何用户都有效,只要他们正在进行cookie管理会话。 以下是伪造的向黑客账户(此处为 654585)转账500美元的请求。请注意,下面的示例是CSRF攻击中涉及的步骤的高度简化版本,以供解释。 GET https://xymbank.com/online/transfer?amount=500&accountNumber=654585 HTTP/1.1 一旦完成,攻击者必须找出一种方法,诱骗用户在登录在线银行应用程序时发送此请求。实现这一点的方法之一是创建一个无害的超链接,以吸引用户的注意。链接可能如下所示: <a href=”https://xymbank.com/online/transfer?amount=500&accountNumber=654585″>Click here to get more information</a>. 如果攻击者找到了目标的正确电子邮件地址,他们可以通过电子邮件将其发送给许多银行客户。那些在登录时单击链接的人将触发请求,从登录的帐户向攻击者发送500美元。 POST请求的CSRF 让我们看看,如果同一个金融机构只接受POST请求,他们会如何经历CSRF。在这种情况下,在GET请求的例子中使用的超链接传递将不起作用。因此,一个成功的CSRF攻击将需要攻击者创建一个HTML表单。为购买的产品发送1000美元的真正请求看起来是这样的: POST […]

