为什么恶意网站在攻击前不能通过GET获得CSRF令牌?
如果我正确理解,在CSRF攻击中,恶意网站 a 告诉我的浏览器将请求发送到网站 b .我的浏览器将在该请求中自动包含我的 b cookie.尽管 a 看不到那些cookie,但如果我已经在 b 中被认证,请求看起来合法,并且要求成功执行的任何操作.为了避免这种情况,每当我访问包含表格的 b 页面时,我都会收到CSRF令牌.这个令牌与我的会话相关联,因此,如果我发表 b ,我必须包括这样的令牌;否则 b 拒绝我的要求.该方案的好处是 a 将无法访问该令牌. 我有两个问题: 上面的描述正确吗? 如果是这样,为什么不能站点 a 首先告诉我的浏览器发送get to b ,从响应中获取CSRF令牌,然后使用令牌现在将帖子发送到 b ?请注意,令牌将有效并与我的会话相关联,因为get还包含我所有的 b cookie. 谢谢! 解决方案 您的描述正确. 如果网站A告诉您的浏览器转到B并获取令牌,那很好,但是由于它是跨域请求,因此A将无法访问JavaScript中的令牌
6 2024-04-03
编程技术问答社区
使用无状态(=无会话)认证时需要CSRF令牌?
当应用程序依赖无状态身份验证(使用HMAC之类的内容)时,是否有必要使用CSRF保护? 示例: 我们有一个单一页应用程序(否则我们必须在每个链接上附加令牌:.... 用户使用POST /auth对自己进行身份验证.在成功身份验证时,服务器将返回一些令牌. 令牌将通过JavaScript存储在单页应用程序中的某些变量中. 此令牌将用于访问/admin. 之类的限制URL 令牌将始终在http标题内传输. 没有HTTP会话,也没有cookie. 据我了解, 应该(?!)不可能使用跨站点攻击,因为浏览器不会存储令牌,因此它无法自动将其发送到服务器(这是当时会发生的情况使用cookie/session). 我错过了什么吗? 解决方案 我使用 no cookie找到了一些用于身份验证的CSRF +的信息: http://http://anguarl-tips. com/b
12 2024-03-19
编程技术问答社区
登录后AntiForgeryToken无效
我有一个表格,用户可以在不弹跳的情况下发布该表格.但是,如果识别他的电子邮件需要密码.密码表格通过AJAX验证,如果成功,则提交了主表单.两种形式都需要有效的抗抗科. 捕获量是,密码检查作为两种功能,还签署了用户(客户端的要求).这使令牌和主表单无效. 我尝试通过编程方式生成一个新的令牌,但我无法正常工作. 关于如何解决这个问题的任何想法? 最终解决方案 我找到了这个反射.但是,这是在正常情况下您避免入侵内部类型的主要原因,是在发行版之间大量的组装之间的类型.正如贝蒂(Betty)所建议的那样,请使用ILSPY查找东西. 这是最终代码. if (signIn) FormsAuth.SignIn(user.Email, false); var mvcAssembly = typeof(AntiForgery).Assembly; var afdType = mvcAssembly.GetType("System.Web.Helpers.
8 2024-03-13
编程技术问答社区
为什么AntiForgeryToken的验证总是失败?
我正在开发使用asp.net core2和Angular运行的Web API应用程序.详细的开发环境配置为在这里. 我正在尝试配置AntiForgeryToken验证,但它一直失败.我遵循配置. IServiceCollection服务: services.AddAntiforgery(options => { options.HeaderName = "X-CSRF-TOKEN"; options.SuppressXFrameOptionsHeader = false; }); 和IApplicationBuilder Configure: app.Use(next => context => { string path = context
2 2024-03-12
编程技术问答社区
单独使用nginx的简单CSRF保护
我有一个服务于普通HTML和JS文件的NGINX服务器. 然后,JS代码调用各种REST API以从API服务器获取/发布数据. 如果nginx收到了/api/位置的请求,则将请求转发到处理所有API的另一台服务器.该API服务器内置在Ruby上. 由于我所有的平原HTML页面都是由Nginx直接传递的,因此我在渲染时无法进行服务器端会话. 我该怎么做才能防止CSRF攻击? 解决方案 CSRF令牌的点是要求攻击者从您的域中读取一个值以发送请求. 因此,您可以在API中具有单独的端点,该端点只需返回CSRF表单令牌. 攻击者由于相同的原始策略而无法阅读令牌(由于他们无法从HTML源读取令牌的原因相同),因此您将是安全的. 这有需要额外的HTTP请求的缺点. 另外,请确保响应不是有效的JavaScript,否则攻击者可以将其运行为标签并使用原型和属性技巧来读取值 其他解决方案 由于您无法进行服务器端会话,因此您需要一
12 2024-03-03
编程技术问答社区
如何才能在某些情况下禁用Django的csrf保护?
我正在尝试在Django编写一个网站,其中API URL与面向用户的URL相同.但是我在使用Post请求和CSRF保护的页面上遇到了麻烦.例如,如果我有一个页面/foo/add,我希望能够通过两种方式向其发送发布请求: 作为最终用户(使用会话cookie认证)提交表格.这需要CSRF保护. 作为API客户端(使用HTTP请求标头进行身份验证).如果启用了CSRF保护,这将失败. 我找到了各种禁用CSRF的方法,例如@csrf_exempt,但所有这些都可以在整个视图中禁用它.有什么方法可以在更细粒度的水平上启用/禁用它?还是我只需要通过自己的CSRF保护实施? 解决方案 有Django的CSRF保护文档的一部分,标题为视图需要一条路径的保护描述了解决方案.这个想法是在整个视图上使用@csrf_exempt,但是当API客户端标头不存在或无效时,请致电函数 用@csrf_protect. 注释 其他解决方案 修改urls.py 如果您在urls.py中管理
6 2024-03-01
编程技术问答社区
使用AngularJS与SpringSecurity3.2进行CSRF
angularjs index.html springsecurity 3.2 春季使用 httpsessioncsrftokenrepository ,默认情况下,它以 x-csrf-token 为CSRF的标题名称,但是Anuglar惯例是 x-xsrf-token 我想扩展 httpsessioncsrftokenrepository 并覆盖标题名称,但是由于标记为最终,我最终实现了一个自定义令牌存储库. @Component public class CustomCsrfTokenRepository
4 2024-02-24
编程技术问答社区
如何对跨域请求实施CSRF保护
我有两个Web应用程序,一个用于AngularJS的Web UI,一个用于Java的REST Web服务.两者都部署在单独的域中. 应用程序使用cookie进行身份验证.每当用户输入有效的用户名和密码时,服务器都会返回一个只有包含令牌的cookie返回,并且该cookie将在所有请求中传递.我已经在两个应用程序上启用了CORS,这就是为什么会话Cookie正常工作的原因. 现在,我正在尝试为此添加CSRF保护.我试图使用CSRF cookie,其中服务器中将将CSRF cookie(不是httponly)发送为REST响应的一部分,UI将从cookie中读取该值,并在CSRF令牌标头中传递其他休息呼叫. 我面临的这种方法的问题是,由于服务器在不同的域中,因此我无法使用AngularJS中的$ cookie阅读cookie.有没有办法读取该cookie的值? 如果不是,那么我可以以其他方式实现CSRF吗? 我还试图在浏览器中在Web UI上实现CSRF Coo​​k
6 2024-02-23
编程技术问答社区
如何使用Laravel API在AngularJS表单中发送csrf_token()?
我正在尝试构建Angular + Laravel Rest应用程序.我可以获取数据库的视图.当我尝试添加新项目时.我得到500 error告诉我不匹配的CSRF令牌. 我的形式布局是: 这就是我尝试将项目添加到数据库的方式: $scope.addItem = function(CSRF_TOKEN) { $http.post('/shop', { text: $scope.itemEntry, csrf_token: CSRF_TOKEN} ).success(function(data, status) { if(data) {
6 2024-02-23
编程技术问答社区
如何在Angular 2应用程序中添加csrf令牌
我由于维护Angular2和Spring App之间的用户会话而启用了Java后端中的CSRF(在 securityconfig.java 文件中).但是,当提交帖子发射时,我还没有看到任何CSRF代币. 如何将 csrf 令牌添加到我的 angular2 应用程序. (添加到邮政请求) loginservice.ts userLogin(loginDTO){ let headers = new Headers({ 'Content-Type': 'application/json' }); let options = new RequestOptions({ headers: headers }); var result = this._http.post(this._rest_service_login, JSON.stringify(loginDTO),options) .map(res => res.json());
6 2024-02-21
编程技术问答社区
angular4 httpclient csrf不发送x-xsrf-token
在Angular文档中,提到Angular httpclient将自动发送cookie XSRF-TOKEN的值XSRF-TOKEN在邮政请求的标题X-XSRF-TOKEN中. 文档链接 ,但它不会为我发送标头.这是我的代码 nodejs代码设置cookie router.get('/set-csrf',function(req,res,next){ res.setHeader('Set-Cookie', "XSRF-TOKEN=abc;Path=/; HttpOnly; SameSite=Strict"); res.send(); }) 我在app.module.ts 中使用了httpclient imports: [ HttpClientModule ] **上述代码仅出于调试目的.我没有set-csrf端点. ,但是当我发送发布请求时,它不会发送任何标头.我无法调试. 我也在角度的GitHub存储库中添加了问
12 2024-02-20
编程技术问答社区
无法登录mediawiki:作为对会话劫持的预防措施,取消了?
我正在使用在AWS EC2实例上托管的私人媒体维基 我认为某些扩展程序出了问题,特别是在数学渲染的中间停止,所以我试图通过Google Chrome浏览器的缓存重新加载页面. 之后,我无法登录此消息:"您的登录会话似乎存在问题;此操作已被取消,以预防会议劫持.返回上一页,重新加载该页面然后再试一次." 我尝试了, 1.重新启动Apache服务器 2.尝试 ersewiki sersions and cookie and cookies and cookies and Cookies Cloudflare背后的多服务器 3.尝试 MediaWiki,密码更改后无法登录 4.尝试"在localsettings.php中浏览,最后添加以下行码:session_save_path(" tmp");在您的Wiki安装目录中创建一个文件夹" tmp". a href="https://www.mediawiki.org/wiki/Topic:Pjby0sdeg3e60rfy" rel="n
96 2024-01-24
编程技术问答社区
codeigniter csrf保护错误与ajax
我在这里有一个小问题,我无法解决,这篇文章会通过,但是响应返回" 500内部服务器错误" 谁可以修复它? 在CI论坛进行搜索后,我发现了此链接 codeigniter- csrf保护与ajax ,但我无法解决. 解决方案 您应该在AJAX POST请求中包含CSRF密钥以使操作工作. 但是,您只获取数据,因此使用method:'get'而不是method:'post'应该做到这一点并使您的请求起作用. 请参阅此问题,以了解何时使用帖子以及何时使用 如果您确实计划将数据发布到服务器,并且抱怨缺乏CSRF密钥,则有两种方法可以将其添加到请求中: 使用插件允许原型从Codeigniter设置的CSRF Coo​​kie中提取数据;这可能更优雅,但会为您的总脚本增加更多.这是一篇有关如何在原型中访问cookie 如果您是从现有表单发送此请求,则该请求应具有包含键的隐藏输入字段,您可以简单地使用var csrf = $("input[name=csrf_k
4 2024-01-22
编程技术问答社区
Codeigniter csrf token with ajax request (500 internal server error)
我很难通过启用CSRF令牌的CI表单来提出AJAX请求.我一直在进行一项漫长的研究,我想出了相同的解决方案在与该问题相关的每个问题中都发布了,该问题将令牌瓦尔添加到Ajax请求中的序列化数据中.我在ajaxsetup中做到了这一点,我得到了令牌,但仍然遇到同样的问题.这是我的代码. //AJAX Setup $.ajaxSetup({ data:{ csrf_test_name: $("input[name='csrf_test_name']").val() } }); //Function ajax login $("form#login").on("submit", function(e){ var $this = $(this); var mensaje = $("div.msglogin"); $.ajax({ type: "POST", url: $this.a
8 2024-01-21
编程技术问答社区
JQuery + AJAX + Django = CSRF ?
可能的重复: "通过django中的ajax发布参数 我想通过AJAX发送登录数据以对用户进行身份验证,但是由于CSRF,这是不可能的.你能告诉我要添加什么使其炒制吗? 我的JavaScript文件: $("#login").live("click", function() { var username = $(".login_username").val(); var password = $(".login_password").val(); $.ajax({ url: "/login", type: "POST", data: { username: username, password: password }, cache: false, success: function(tekst) {
12 2024-01-20
编程技术问答社区
Yii2 如何在gridview中为批量操作正确创建复选框列?
我需要创建类似于WordPress帖子管理类似的"批量操作",因此您可以一次删除多个记录. 这是我的方法,效果很好,但是我敢肯定这不是最好的方法,因为此方法容易受到CSRF Hacks的影响. GridView中的复选框: GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ ['class' => 'yii\grid\CheckboxColumn'], 'id'=>'grid', 'country', ], ]); 触发功能的按钮 功能: function bulkAction(a) { var keys = $('#grid').yiiGridView('getSelectedRows'); window.location
18 2023-12-25
编程技术问答社区
用Flask WTF-Form手动生成CSRF令牌
我想仅使用Python代码创建并填写烧瓶WTF形式.但是,当我使用Python代码创建它时,该表单不会自动生成CSRF令牌.有什么方法可以手动执行此操作? 所讨论的形式: from flask_wtf import Form from wtforms import StringField from wtforms.validators import DataRequired, URL class URLForm(Form): url = StringField('url', validators=[DataRequired(), URL(), Level3Url()]) 我用来生成表单的代码: from forms import URLForm form = URLForm() if 'url' in request.args: url = request.args.get('url') form.url.data = url if
16 2023-12-15
编程技术问答社区
在WebForms应用程序中验证AntiForgeryToken
我已经阅读了一些有关ValidateAntiForgeryToken的使用来防止XSRF/CSRF攻击的信息.但是我看到的似乎仅与MVC有关. 这些是我看过的文章: 在 如何在WebForms应用程序中实现此问题? 解决方案 我找到了这篇文章如何修复交叉 - 使用Microsoft .NET ViewStateUserKey和Double提交Cookie 使用以下信息代码和说明: 从Visual Studio 2012开始,Microsoft向新的Web Forms应用程序项目添加了内置CSRF保护.要使用此代码,请在解决方案中添加新的ASP .NET Web Forms应用程序,然后查看网站.页面背后的Master代码.该解决方案将对从网站继承的所有内容页面应用CSRF保护. . 必须满足此解决方案的工作: •所有制作数据修改的Web表单都必须使用该网站. 页. •所有进行数据修改的请求都必须使用ViewState. •该网站必须没有所有跨
8 2023-11-30
编程技术问答社区
vaadin中每个请求的csrf令牌
我是Vaadin的新手,我想实现CSRF代币保护,我发现Vaadin已经在请求中注入CSRF代币,但问题是CSRF令牌在每个请求中都是相同的,它们是他们在Vaadin中的任何配置在每个请求中生成新的令牌?还是他们有任何方式强迫瓦丁在创建新会话时再生CSRF代币? 我使用以下代码来求解会话固定漏洞,但问题是CSRF令牌在上一个会话代币中保持不变;因为重新引入化方法创建了一个新的会话,并带有相同的内容,并具有新的JsessionId VaadinService.reinitializeSession() 解决方案 当前有一个添加这种功能的拉动请求:
18 2023-11-12
编程技术问答社区