标签: csrf-protection

Django CSRF 保护强制设置“Vary: Cookie”标头,导致缓存效率低下

Django 的 CsrfViewMiddleware 设置了“Vary: Cookie”标头,这意味着缓存系统不仅会考虑页面 URL,还会考虑每个用户唯一的用户 Cookie。因此页面不会为所有用户缓存一次,而是为每个用户缓存一次。就我而言,我的网站负载非常大,这种行为并不令我满意。

  • 我对这个问题的看法是正确的还是错误的?
  • 我可以在不关闭 CSRF 保护的情况下关闭设置“Vary: Cookie”标头吗?

django cookies caching csrf-protection

6
推荐指数
1
解决办法
2068
查看次数

在服务Web和API的Rails应用程序中正确使用protect_from_forgery

我正在开发一个通过API为移动应用程序提供服务的Rails 4应用程序,并且有一个用于管理员管理应用程序的Web UI.还有一些用户可以看到的网页(成功的电子邮件确认和重置密码).

我创建了两组控制器:一组继承自APIController,另一组继承自AdminController.这两个都继承自ApplicationController.负责面向用户的网页的其余控制器也继承自ApplicationController.

鉴于此方案,我不确定如何使用protect_from_forgery正确实施CSRF保护.我目前有以下内容:

class ApplicationController < ActionController::Base
  # ...
end

module API
  class APIController < ApplicationController
    protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }
    # ...
  end
end

module Admin
  class AdminController < ApplicationController
    protect_from_forgery with: :exception
    # ...
  end
end

class UsersController < ApplicationController
  protect_from_forgery with: :exception
  # ...
end
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:这是正确的吗?有没有办法改善它?APIController中的检查是否毫无意义,因为所有API请求都只是JSON吗?

Brakeman抱怨说ApplicationController中没有protect_from_forgery调用,但也许它看不到子类中的调用.

提前致谢!

csrf-protection ruby-on-rails-4

6
推荐指数
1
解决办法
2091
查看次数

使用 React Form、Flask 服务器和 Flask-WTF 保护 CSRF

TL;DR 我需要保护我的表单免受 CSRF 攻击,我想在前端使用 ReactJS,在后端使用 Flask/Flask-WTF。

我正在重构一个使用 Python、Flask 和 Flask-WTF 构建的用于表单的网站,我想将 React 用于前端,而不是通过 PyPugjs 使用 Jinja2。我正在使用 Flask-WTF 来呈现表单,它负责处理 CSRF 令牌等。我知道如何使用 React 制作表单,但如何获得 CSRF 保护?

现在我的表单渲染看起来像这样:(使用 Pug)

mixin render_form(form, id='', action='Submit')
    form(method='POST', action='', id=id)
        =form.csrf_token

        each field in form
            fieldset
                if field.errors
                    each error in field.errors
                        .notification.error
                            #{error}

                #{field(placeholder=field.label.text)}

        button(type='submit') #{action}
Run Code Online (Sandbox Code Playgroud)

javascript csrf-protection flask-wtforms reactjs

6
推荐指数
2
解决办法
3202
查看次数

不记名令牌和 CSRF

我们正在使用 ASP.NET Core 构建 3 个不同的应用程序 MVC 应用程序、API、SPA(不是 Angular)。此应用程序中的所有操作仅适用于授权用户。这就是我们使用 IdentityServer 保护它们的原因。

我们使用 cookie 来存储不记名令牌的值。我知道 cookie 的值会自动发送到服务器。但是因为它应该作为授权标头添加,所以浏览器不会自动完成。

这是否降低了 CSRF 攻击的可能性?或者CSRF仍然可以使用不记名令牌,我们是否需要添加CSRF令牌?

asp.net-mvc csrf-protection openid-connect asp.net-core

6
推荐指数
2
解决办法
3826
查看次数

WebForms 应用程序中的 ValidateAntiForgeryToken

我已经阅读了一些关于使用ValidateAntiForgeryToken防止 XSRF/CSRF 攻击的文章。然而,我所看到的似乎只与 MVC 相关。

这些是我看过的文章:

ValidateAntiForgeryToken 用途、解释和示例

CSRF 和 AntiForgeryToken

ASP.NET MVC 和网页中的 XSRF/CSRF 预防

我如何在 WebForms 应用程序中实现这个或类似的东西?

c# asp.net webforms csrf-protection

6
推荐指数
2
解决办法
8300
查看次数

Laravel 419 错误 -VerifyCsrfToken 问题

我在同一台服务器上托管了多个 Laravel 站点。在我创建的最新网站中,联系表单拒绝提交,并且不会抛出 419 错误。我已经在 web.php 文件中设置了路由,就像其他网站一样,这些网站有实时、有效的联系表单,并且我以完全相同的方式生成和发送令牌 - 使用{{ csrf_field() }}.

我找到了类似问题的答案,指出您可以通过$except向 中的数组添加条目来禁用 Csrf 检查app/Http/Middleware/VerifyCsrfToken.php。我已经验证这确实解决了 419 错误:

protected $except = [
    'contact',
    'contact*',
];
Run Code Online (Sandbox Code Playgroud)

但我当然希望保留 Csrf 功能,并且我仅更新了$except用于故障排除值的数组。

有谁知道新的 Laravel 环境可能有什么不同,尽管传递了生成的令牌,但仍会出现 419 行为?我尝试过更新一些 ENV 设置并切换不同的东西,但除了修改$except数组之外,没有任何其他方法对这个问题产生任何影响。

更新

由于到目前为止已经进行了一些讨论,我想我应该提供一些额外的信息和代码。

首先,这是一个 ajax 形式,但先不要从座位上跳起来。我一直在使用和不使用ajax 的情况下测试表单。如果我想使用 ajax 进行测试,我只需单击连接到 jQuery 侦听器的按钮即可。如果没有,我会更改或删除按钮的 ID,或者$("#formName").submit();在控制台窗口中运行。

上述(ajax、老式提交和带有 的 jquery 选择器.submit();)都会产生完全相同的响应 - 419 错误。

为了完整起见,这是我的 ajax 代码,它可以在我托管的所有其他网站上运行。我定义了一个 postData 数组以使其保持整洁,并console.log()在其后面直接添加了一条语句以(再次)确认令牌生成良好并且正在随请求正确传递。

var postData = {
            
    name: $("#name").val(),
    email: …
Run Code Online (Sandbox Code Playgroud)

php csrf-protection laravel laravel-middleware

6
推荐指数
1
解决办法
2万
查看次数

如何使用 HttpClientXsrfModule angular 6 添加 x-xsrf-token

我正在使用JWT令牌进行身份验证并将其存储在本地存储中,现在想添加CSRF令牌,是否可以CSRF仅以角度激活?

由于 JWT 令牌生成是否可以CSRF随机生成并存储它?

我正在尝试像下面这样

身份验证.service.ts

    import { Injectable } from '@angular/core';
    import { HttpClient } from '@angular/common/http';
    import { Observable } from 'rxjs/Observable';
    import { map } from 'rxjs/operators/map';
    import { Router } from '@angular/router';

    export interface UserDetails {
    _id: string;
    email: string;
    name: string;
    exp: number;
    iat: number;
    }

    interface TokenResponse {
  token: string;
   }

   export interface TokenPayload {
  email: string;
  password: string;
  name?: string;
}

@Injectable()
export class AuthenticationService …
Run Code Online (Sandbox Code Playgroud)

authentication csrf csrf-protection angular csrf-token

6
推荐指数
0
解决办法
3274
查看次数

我们真的从CSRF中获得了保障吗?

confirm.php

<?php
 session_start();
 $token= md5(uniqid());
 $_SESSION['delete_customer_token']= $token;
 session_write_close();
?>
<form method="post" action="confirm_save.php">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
Do you really want to delete?
<input type="submit" value=" Yes " />
<input type="button" value=" No " onclick="history.go(-1);" />
Run Code Online (Sandbox Code Playgroud)

confirm_save.php

<?php
 session_start();
 $token= $_SESSION['delete_customer_token'];
 unset($_SESSION['delete_customer_token']);
 session_write_close();
 if ($_POST['token']==$token) {
   // delete the record
 } else {
   // log potential CSRF attack.
 }
?>
Run Code Online (Sandbox Code Playgroud)

假设我们有一个像这样的典型CSRF保护如果攻击者使用此代码绕过csrf令牌怎么办?

//On any site
<img src="http://cia.teletubbies.com/csrf.php" height="0" weight="0"/>

//csrf.php
$cont = get_file_contents("http://cia.google.com/confirm.php");
// parse the html using …
Run Code Online (Sandbox Code Playgroud)

php security xss csrf csrf-protection

5
推荐指数
1
解决办法
1602
查看次数

laravel 4:为什么Request :: header()没有得到指定的头?

我正在尝试获取标头值:

Request::header('csrf_token')

虽然,我的firebug在标题中说我将csrf_token设置为baMDpF0yrfRerkdihFack1Sa9cchUk8qBzm0hK0C.事实上,我可以csrf_token用本机的PHP代码来获取它:

getallheaders()['csrf_token']

现在问题是我正在进行XSRF保护吗?或者我的PHP代码有一个缺陷,我真的必须使用bug的laravel 4功能

Request::header('csrf_token')

它只返回空白.而我只是错过了一些东西.也许在我的Laravel 4配置等?

PS:我正在使用AngularJS,但也许我使用的客户端并不重要.我有这个链接作为我的指南:如何使用Laravel API在AngularJS表单中发送csrf_token()?

php header csrf-protection laravel angularjs

5
推荐指数
2
解决办法
1万
查看次数

Spring CSRF令牌生命

我正在根据文档使用Spring安全性实现CSRF保护

我有一个问题是:当这个令牌被Spring安全性失效时?令牌是否因每次请求提交而失效?

java spring-security csrf-protection

5
推荐指数
1
解决办法
3802
查看次数