我正在使用 Selenium Python 登录 Instagram 并打开一些页面。它工作正常,但两天后 Instagram 开始发送消息“CSRF 令牌丢失或不正确”。现在我什至无法使用脚本或手动登录任何帐户以及笔记本电脑上的任何浏览器(例如 Chrome 或 FireFox)。
我不会用我的 Selenium 发送任何 cookie。大多数搜索结果都是关于我没有使用的 Django。
我删除了cookie,但它不起作用。
我尝试更改我的 IP 地址,以确定我是否被禁止使用 Instagram,但没有成功。
我尝试使用 Selenium 检查 URL 中的 scrf-token 并将其发送给驱动程序,但它不起作用。
我不确定解决方案是否在代码中,因为现在我什至无法手动登录,所以也许我的系统设置或 Instagram 端有问题。
我可以用 Selenium 解决这个问题吗?或者我该如何解决这个问题?
请帮我解决问题。我正在构建一个由 Django Rest Framework 和 ReactJS 组成的应用程序。我使用了视图集。
我的错误:
响应数据:
{"detail":"CSRF Failed: Origin checking failed - http://localhost:8000/ does not match any trusted origins."}
Run Code Online (Sandbox Code Playgroud)
ReactApp中的DeleteLead函数
export const deleteLead = (id) => (dispatch) => {
axios
.delete(`/api/leads/${id}/`)
.then((res) =>
dispatch({
type: DELETE_LEAD,
payload: id,
})
)
.catch((err) => {
console.log(err);
});
};
Run Code Online (Sandbox Code Playgroud)
LeadViewSet:从rest_framework导入视图集,权限从.serializsers导入LeadSerializers从leads.models导入Lead
# lead viewset
class LeadViewSet(viewsets.ModelViewSet):
queryset = Lead.objects.all()
# permission - bu ruxsat beruvchi
permission_classes = [
permissions.AllowAny # barcha uchun ruxsat
]
serializer_class = LeadSerializers
Run Code Online (Sandbox Code Playgroud)
LeadSerzializers:
# lead serializer …
Run Code Online (Sandbox Code Playgroud) 我在 Laravel 中遇到 csrf 令牌问题。有时请求 POST(通过 axios)返回419代码“CSRF 令牌不匹配”,但请求标头包含 CSRF 和 XSRF 令牌。有趣的是,这在隐身模式下不会发生。
应用程序刀片:
<meta name="csrf-token" content="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)
bootstrap.js:
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
Run Code Online (Sandbox Code Playgroud)
内核.php:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\Localization::class,
],
Run Code Online (Sandbox Code Playgroud)
我尝试清除缓存和配置,但没有结果。有什么想法如何修复它吗?
我添加了 SameSite=None; 安全的; 设置cookie。但未设置 cookie,我无法登录我的网站。
response.writeHead(200, {
'Content-Type': 'application/json',
'Set-Cookie': 'token=' + token + '; SameSite=None; Secure; Expires=' + time.toUTCString() + '; Path=/' + '; Domain=' + hostname,
'csrf-token': csrfToken
});
Run Code Online (Sandbox Code Playgroud)
我在应用程序>存储>Cookies 下的开发人员工具中查看了 cookie,并查看了更多详细信息。它显示了一条警告消息:
此 set-cookie 被阻止,因为它不是通过安全连接发送的
chrome 会阻止 cookie,因为我在开发环境中工作并发送 http 请求。但是这个在 Firefox 浏览器上的测试是正确登录的。
我把这个词保证该cookie里面和它的工作正常,但因为这个词保证,必须在下一个用来samesite =无用于跨来源,否则该cookie将被阻止。
我的问题是为什么当我使用secure 时,只有 Chrome 浏览器会阻止 cookie,但在其他浏览器中确实如此。而且,如果我不使用安全,我将无法测试支付网关,因为如果我不使用安全,它会阻止 Chrome 跨域......
我有一个简单的网络应用程序,\n并且我想添加 csrf 保护。但我不理解 Flask-WTF 提供的 csrf 包装器。我已经看过文档了。但仍然不明白\xe2\x80\x99 是如何工作的。
\n我的问题是:
\n(1)应用程序打包后,是否需要从路由中处理?或者烧瓶帮我处理这个?
\n(2)如果不是,我自己该如何处理?(请提供示例)。
\n注意:我不想使用 wtf 表单,我想使用自定义标签进行输入。
\n应用程序.py:
\nfrom flask import Flask, render_template\nfrom flask_wtf.csrf import CSRFProtect\n\napp = Flask(__name__)\napp.config['SECRET_KEY'] = 'secret'\ncsrf = CSRFProtect(app)\n\n@app.route('/', methods=['GET'])\ndef get_home():\n """Get home template"""\n return render_template('home.html')\n\n@app.route('/', methods=['POST'])\ndef post_home():\n """Handle posted data and do stuff"""\n return\n
Run Code Online (Sandbox Code Playgroud)\nhome.html(表单):
\n<form action="#" method="post">\n <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>\n <input type="text" placeholder="Name">\n <button type="submit">\n Submit\n </button>\n</form>\n
Run Code Online (Sandbox Code Playgroud)\n 我一直在尝试解决一个问题,即当我尝试登录 Nginx 代理后面的 pgAdmin(在 docker 容器中)时,出现 CSRF 令牌不匹配的错误。
请参阅https://en.wikipedia.org/wiki/Cross-site_request_forgery
坦率地说,问题是否与 nginx 相关,我不确定,但配置文件如下:
Docker Swarm 服务:
pgAdmin:
image: dpage/pgadmin4
networks:
- my-network
ports:
- 9102:80
environment:
- PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
- PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
- PGADMIN_CONFIG_SERVER_MODE=True
volumes:
- /home/docker-container/pgadmin/persist-data:/var/lib/pgadmin
- /home/docker-container/pgadmin/persist-data/servers.json:/pgadmin4/servers.json
deploy:
placement:
constraints: [node.hostname == my-host-name]
Run Code Online (Sandbox Code Playgroud)
Nginx 配置:
server {
listen 443 ssl;
server_name my-server-name;
location / {
proxy_pass http://pgAdmin/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-CSRF-Token $http_x_pga_csrftoken;
}
ssl_certificate /home/nginx/ssl/certificate.crt;
ssl_certificate_key /home/nginx/ssl/private.key;
ssl_session_cache builtin:1000 …
Run Code Online (Sandbox Code Playgroud) 我有一个安装了 Next-Auth 的 NextJS 前端和一个使用 Sanctum 的 Laravel 后端当我尝试使用 Next-Auth 的登录功能登录时,它给了我这个错误:
Request failed with status code 419
Run Code Online (Sandbox Code Playgroud)
419 与 CSRF 令牌有关,但我在调用登录方法之前通过调用 sainttum/csrf-cookie 路由来设置令牌
[...nextauth.js]
Request failed with status code 419
Run Code Online (Sandbox Code Playgroud)
apiClient.js
CredentialsProvider
({
name: 'Email and Password',
credentials: {
email: {label: "Email", type: "email", placeholder: "Your Email"},
password: {label: "Password", type: "Password"}
},
async authorize({email, password}, req) {
await apiClient.get("/sanctum/csrf-cookie");
const user = await apiClient.post('/customer/login', {
email: email,
password: password,
});
if (user) {
return user
} else {
return …
Run Code Online (Sandbox Code Playgroud) <form method="post" action="my_post_Action" class="login100-form validate-form">
<input type="hidden" name="_token" value="B6et9cJOP5wNKodCPgCbAafDjpA5EMcRaaJhEJ9F">
<span class="login100-form-title">
Admin Login
</span>
<div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz">
<input class="input100" type="text" name="email" placeholder="Email">
<span class="focus-input100"></span>
<span class="symbol-input100">
<i class="fa fa-envelope" aria-hidden="true"></i>
</span>
</div>
<div class="wrap-input100 validate-input" data-validate="Password is required">
<input class="input100" type="password" name="password" placeholder="Password">
<span class="focus-input100"></span>
<span class="symbol-input100">
<i class="fa fa-lock" aria-hidden="true"></i>
</span>
</div>
<div class="container-login100-form-btn">
<button class="login100-form-btn">
Login
</button>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
这是我的代码,如果我评论csrf
验证表单,kernal.php
则会话不起作用,我不知道我的登录路线有什么错误。
csrf_token() 在 l5-swagger 中为空,无法执行除 GET 之外的任何请求,因为标头丢失并且始终收到 419 错误代码
我试图向邮递员请求它并且它有效。但大摇大摆地却没有。我已经从这个链接看了一下(laravel 5 csrf_token value is Empty),但我仍然不知道如何解决我的问题。
如何在 l5-swagger 视图中获取 csrf_token?
一段时间以来,我一直在尝试从 Vue 前端向 Django 后端发送 POST 或 DELETE 请求。
我在 localhost:3000 上运行 Vue.js,在 localhost:8000 上运行 Django。我已经使用django-cors-headers设置了 CORS ,并且能够获取请求。但是,一旦我尝试删除或发布,就会收到此错误:
Forbidden (CSRF cookie not set.)
据我了解,我需要在请求标头中传递 CSRF 令牌,我有:
deleteImage() {
const url = this.serverURL + 'images/delete/' + this.image_data.pk;
const options = {
method: "DELETE",
headers: {'X-CSRFToken': this.CSRFtoken}
};
fetch(url, options)
.then(response => {
console.log(response);
if (response.ok){
// if response is successful, do something
}
})
.catch(error => console.error(error));
}
Run Code Online (Sandbox Code Playgroud)
我从 GET 请求获取,如果我使用Django 文档this.CSRFtoken
中显示的方法,令牌是相同的。
我的姜戈settings.py
看起来像这样:
rom …
Run Code Online (Sandbox Code Playgroud) csrf-token ×10
laravel ×4
csrf ×2
django ×2
php ×2
python-3.x ×2
vue.js ×2
cookies ×1
django-csrf ×1
docker ×1
flask ×1
html ×1
instagram ×1
javascript ×1
laravel-5.7 ×1
next-auth ×1
next.js ×1
nginx ×1
permissions ×1
pgadmin ×1
python ×1
samesite ×1
selenium ×1
swagger ×1