Laravel app我正在尝试在 中的其他一些域中使用iframe。
我写了一个FrameMiddleware,其中我在标头中允许该域
public function handle(Request $request, Closure $next)
{
$response = $next($request);
$response->header('Content-Security-Policy', 'frame-ancestors http://localhost');
return $response;
}
Run Code Online (Sandbox Code Playgroud)
并通过使用上面的中间件 cors origin 错误被删除。
因为我Laravel app需要来自 iframe 的身份验证。它使用表单提交,而不是 API。然后它开始给出一个
419 error. VerifyCsrfToken我通过在中间件数组中添加登录路由$except来排除csrf错误来解决。
然后我检查登录请求给出 302network错误post
我测试了身份验证方法,经过身份验证的用户对象通过页面重定向返回Dashboard,然后302 error code显示。
而且,我已经开始same_site => null工作了config/session.php,但仍然没有工作。
我有一个项目是前一段时间用 Symfony 4 开始的。我从php bin/console make:auth命令生成了登录文件。今天我看到新文档中的文件信息发生了一些变化,所以我想更新我的。我再次运行相同的命令,重命名新的控制器和身份验证文件。但是当我尝试时,我收到了这个错误:
无法自动装配服务“App\Security\LoginFormAuthenticator”:方法“__construct()”的参数“$csrfTokenManager”引用接口“Symfony\Component\Security\Csrf\CsrfTokenManagerInterface”,但不存在这样的服务。您是否创建了实现此接口的类?
这是什么意思?
在 Rails API 应用程序中,我们没有现成的 CSRF 保护。特别是,不建议将访问令牌(例如 JWT)存储在 localStorage 中,建议存储在 cookie 中(带有 httpOnly 标志、SameSite 等)。但这一次我们很容易受到潜在的 CSRF 攻击。在全栈生成的 Rails 应用程序中,每次打开表单时都会生成并嵌入一个 CSRF 令牌。但是,我不知道也找不到任何我们如何在 Rails API 应用程序中使用令牌来防止 CSRF 的信息。我们有最佳实践吗?或者有人可以建议一种方法吗?我使用访问和刷新 JWT。
如何在我的 Laravel 应用程序的 ajax 请求(GET 或 POST)中自动添加 csrf 令牌,而无需手动将其添加到每个请求中。
我的ajax请求
$.ajax({
type:'post',
url: "/email/unique",
data: { "_token": "{{ csrf_token() }}", "email": email }
success: function(data) {
console.log(data);
}
});
Run Code Online (Sandbox Code Playgroud) 在我的网络应用程序中,csrf 令牌工作正常。但我想禁用从我的 Android 应用程序进行 API 调用的 API 调用。我正在为我的 API 使用另一种身份验证。请告诉我如何禁用 API 控制器的所有功能的 csrf 令牌。我尝试在控制器中添加访问权限作为标头,但它不起作用。请帮我。
public function __construct() {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow- Methods: POST, GET, PUT, DELETE, OPTIONS');
}
Run Code Online (Sandbox Code Playgroud) 我只在 cookie 中设置访问令牌。但我在cookies中也发现了CSRF_token。我不明白为什么会发生以及它是如何发生的。
看我的代码:- 设置访问令牌。
access_token = create_access_token(identity=user.id, fresh=True)
refresh_token = create_refresh_token(identity=user.id)
resp=Response.SUCCESS(data={'id': user.id, 'refresh_token': refresh_token})
set_access_cookies(resp,access_token)
return resp
Run Code Online (Sandbox Code Playgroud)
饼干
当我使用@jwt_requiured((locations=['cookies'],fresh=True) 它时返回Missing CSRF token。在这里,我需要通过 header 传递 CSRF 令牌。有谁知道这里发生了什么?我应该做什么?
python access-token flask-restful flask-jwt-extended csrf-token
我正在构建一个 Next.js 应用程序,在其中一个页面上,我需要调用其中一个路由/api。
调用此 API 路由会执行状态更改操作,因此确保调用不是来自试图冒充我的用户的攻击者非常重要。
以下面为例:
fetch('/api/grantPermissions', {
headers: ...,
method: 'POST',
body: JSON.stringify({resource: 'someresourceid', permission: 'somepermission'})
})
Run Code Online (Sandbox Code Playgroud)
我注意到没有很多解决方案可以保护 Next.js API 路由免受 CSRF 攻击,所以我考虑的是以下内容:
/api/grant检查提供的 CSRF 令牌是否与会话中的相同这是使用同步器令牌模式防止 CSRF 攻击的安全方法吗?这种方法可能会导致哪些漏洞?
我尝试过以下事情。但当 sedning post 请求从 React 发送到 Laravel 时,CSRF 问题仍然存在
我已经使用 barryvh 中间件 cors 来修复 cors 问题
在 cors.php 中
'supportsCredentials' => false,
'allowedOrigins' => ['*'],
'allowedHeaders' => ['Content-Type', 'X-Requested-With','token','user_token','_token','X-CSRF-TOKEN'],
'allowedMethods' => ['*'], // ex: ['GET', 'POST', 'PUT', 'DELETE']
'exposedHeaders' => [],
'maxAge' => 0,
Run Code Online (Sandbox Code Playgroud)
页面中的元标记
return (
<div className="Login" style={{fontFamily: 'Montserrat, sans-serif',height:'36em'}}>
<input type="hidden" name="_token" value="{{ csrf_token() }}"></input>
<meta name="csrf-token" content="{{ csrf_token() }}"/>
{/* { csrf_token() } */}
{/* { @csrf } */}
{/* { csrf_field() }*/}
Run Code Online (Sandbox Code Playgroud)根目录中的元标记 (index.html)
尝试遵循帖子中的注释代码 …
我要求实施 CSRF 来防止对 java 服务器应用程序的攻击。这是一个提供大量 Web REST API 服务的应用程序。\n我查看了许多指南并在堆栈上进行了搜索,但仍然有一些顾虑。\n我知道对于 GET 请求来说是不需要的。
\n所以,如果我错了,请纠正我。
\n这是我的过滤器。
\n public class ValidateCSRFToken implements Filter {\n\n private static final Logger LOGGER = LoggerFactory.getLogger(ValidateCSRFToken.class);\n\n @Override\n public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {\n HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;\n HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;\n // Spring put the CSRF token in session attribute "_csrf"\n CsrfToken csrfToken = (CsrfToken) httpServletRequest.getAttribute("_csrf");\n\n // Send the …Run Code Online (Sandbox Code Playgroud) 我正在使用laravel 6。我希望我的laravel CSRF 令牌每 60 秒过期一次。
配置/会话
'一生' => 60,
因此,我对我的项目进行了部署,在我的网络使用 HTTPS 后,Django 现在向我显示此错误:

它发生在我的登录页面之后:login.html
{% load i18n static bootstrap4 %}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="{% static 'web_site/css/login.css' %}" />
<script src="https://code.jquery.com/jquery-3.6.0.min.js"
integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="{% static 'web_site/js/login.js' %}"></script>
</head>
<body>
<div class="wrapper">
<div class="container">
<h1>Welcome</h1>
{% if context %}
<ul class="messages">
<li class="error">{{ context }}</li>
</ul>
{% endif %}
<form class="form" action="" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<button type="submit" id="login-button">Login</button>
</form>
</div>
<ul class="bg-bubbles">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li> …Run Code Online (Sandbox Code Playgroud) csrf-token ×11
csrf ×4
laravel ×4
php ×3
access-token ×1
ajax ×1
django ×1
django-csrf ×1
http ×1
iframe ×1
java ×1
javascript ×1
jquery ×1
laravel-8 ×1
next.js ×1
python ×1
rails-api ×1
security ×1
spring-boot ×1
symfony4 ×1