防止、启用CSRF2024 年 8 月 29 日 | 阅读 3 分钟 在本教程中,我们将学习如何保护CodeIgniter应用程序免受跨站请求伪造攻击。这是Web应用程序中最常见的漏洞之一。由于CodeIgniter的内置功能,CSRF保护非常容易实现。 什么是CSRF攻击CSRF攻击会强制已登录受害者的浏览器发送伪造的HTTP请求,包括受害者的会话cookie和其他身份验证信息到Web应用程序。 例如,假设您有一个包含表单的站点。攻击者可以在其站点上创建一个虚假表单。此表单可能包含隐藏的输入和恶意数据。实际上,此表单并未发送到攻击者的站点,而是发送到您的站点。您的站点会认为该表单是真实的,因此会对其进行处理。 现在,假设攻击者的表单指向您站点中的删除表单。如果用户已登录并重定向到攻击者的站点,并且执行搜索,则他的帐户将在不知情的情况下被删除。这就是CSRF攻击。 令牌方法为了防止CSRF,我们需要连接HTTP请求、表单请求和表单提交。有多种方法可以做到这一点,但在CodeIgniter中使用了一个名为CSRF令牌的隐藏字段。CSRF令牌是一个随机值,每次发送HTTP请求时都会更改。 将CSRF令牌插入网站表单时,它也会保存在用户的会话中。提交表单时,网站会匹配两个令牌,提交的令牌和保存在会话中的令牌。如果它们匹配,则请求是合法的。令牌值每次加载页面时都会更改,这使得黑客很难猜测当前的令牌。 启用CSRF保护要启用CSRF,请在application/config/config.php文件中将以下语句从FALSE更改为TRUE。 令牌生成每次请求都会生成一个新的CSRF令牌。创建对象时,会设置令牌的名称和值。 其函数是: 首先,该函数检查cookie是否存在。如果存在,则使用其当前值,因为多次实例化安全类时,每个请求都会覆盖前一个请求。 该函数还会创建一个全局可用的哈希值,并保存该值以供进一步处理。生成令牌的值。现在必须借助函数form_open()将其插入到网站的每个表单中。 每次发送表单时,都会调用方法csrf_verify()。此方法执行两项操作。如果没有收到POST数据,则会设置CSRF cookie。如果收到POST数据,则它会检查提交的值是否与会话中的CSRF令牌值相对应。在第二种情况下,CSRF令牌值将被丢弃,并为下一个请求再次生成。此请求是合法的,整个过程再次开始。 下一个主题CodeIgniter面试题 |
我们请求您订阅我们的新闻通讯以获取最新更新。