标签: csrf-protection

django csrf令牌在每个请求中都必须是唯一的吗?

我有一个关于Django CsrfViewMiddleware机制的问题.我知道,Django:

  1. 在每个请求上设置新的csrftoken cookie.
  2. 检查,比X-CSRFToken标头值(或隐藏输入"csrfmiddlewaretoken")必须等于csrftoken cookie.

但Django不检查令牌是否已被使用(例如来自CsrfViewMiddleware):

if not constant_time_compare(request_csrf_token, csrf_token):
            return self._reject(request, REASON_BAD_TOKEN)
Run Code Online (Sandbox Code Playgroud)

所以我可以使用相同的令牌POST多个请求(我在我的服务器上测试它).

它是标准的行为,还是我的Django设置不正确?谢谢.

python django django-csrf csrf-protection

7
推荐指数
1
解决办法
1323
查看次数

如何使用最新版本的ring/compojure环防伪/ CSRF令牌?

我复制了一些在compojure 1.1.18和其他旧库中运行的旧代码,但是使用最新版本我无法使用它.

这里是我的小例子,代码从复制这里的小例子来证明,用最新环的Compojure库,我得到一个错误,当我发送一个HTTP POST,甚至与报头组.

lein ring server 启动它,然后做

curl -X GET --cookie-jar cookies "http://localhost:3000/" 结果是这样的:

{"csrf-token":"7JnNbzx8BNG/kAeH4bz1jDdGc7zPC4TddDyiyPGX3jmpVilhyXJ7AOjfJgeQllGthFeVS/rgG4GpkUaF"}
Run Code Online (Sandbox Code Playgroud)

但是当我这样做的时候

curl -X POST -v --cookie cookies -F "email=someone@gmail.com" --header "X-CSRF-Token: 7JnNbzx8BNG/kAeH4bz1jDdGc7zPC4TddDyiyPGX3jmpVilhyXJ7AOjfJgeQllGthFeVS/rgG4GpkUaF" http://localhost:3000/send
Run Code Online (Sandbox Code Playgroud)

我明白了 <h1>Invalid anti-forgery token</h1>

难道我做错了什么?

我借用的代码旨在回答这个问题.

clojure compojure ring csrf-protection

7
推荐指数
1
解决办法
3046
查看次数

Laravel 5和Internet Explorer:Token Mismatch

我的Laravel5网站使用csrf令牌来防止CSRF攻击.在Chrome和Firefox上,eveything工作正常.

我提交了我的客户端网站进行测试,当他使用Internet Explorer(9/10)时,他使用令牌在evey页面上出现"Token mismatch"错误.

我认为这是一个cookie /会话问题.

经过一些研究,我尝试删除cookie名称中的斜杠("laravel_session"),并更改会话驱动程序(默认情况下为"file").它没有帮助.

我知道我的客户可以在IE中更改其"信任策略",但它是一个公共站点,这只是一个临时解决方案.

有什么奇怪的问题吗?

php internet-explorer csrf csrf-protection laravel-5

7
推荐指数
1
解决办法
3988
查看次数

Django中的Ajax调用失败

我有以下ajax调用来更新模型的特定字段

$("#updateLink").click(function(){
    var dec_text = $('#desc_text').val();

    $.ajax({
        type: "POST",
        url:"/users/update_desc/",
        data: {
        'val': dec_text,
        },
        success: function(){
            $(".display, .edit").toggle();
            $("#descText").html(dec_text);
        },
        error: function(){
            alert("Error");
        },
    });
    return false;
});
Run Code Online (Sandbox Code Playgroud)

我的观点是这样的

@csrf_exempt
def update_desc(request):
    if request.is_ajax():
        if request.method == 'POST':
            desc_text = request.POST.get('val', False)
            if desc_text:
                profile = user.profile
                profile.desc = desc_text
                profile.save()

            return_message = "Sent mail"
            return HttpResponse(return_message,mimetype='application/javascript')
Run Code Online (Sandbox Code Playgroud)

我不断收到错误消息,我不知道如何解决这个问题.我甚至使用csrf_exempt装饰器来解决问题,如果问题是由于缺失引起的,csrf token但问题仍然存在.

除了ajax post在我的base模板中所有ajax调用都失败的情况.任何人都可以帮助了解这里发生的事情.如果需要,我可以提供更多细节.

编辑:

我在我的基本模板中添加了一个js包含此https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax的文件,因此这意味着它存在于我的所有模板中.我正在使用django 1.3版本.

django ajax jquery django-csrf csrf-protection

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

在服务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
查看次数

处理来自AWS Lambda的CSRF攻击?

通常,服务器会生成一个csrf令牌,然后将其发送给客户端。当客户端提交表单时,令牌将被传递回服务器,服务器随后将对其进行验证。

如果我仅使用API​​ Gateway和Lambda,我将如何确保所有POST / PUT请求均有效,并防止csrf攻击?关于该主题,我找不到很多文章,而且我不确定如何持久保存生成的csrf令牌,以便所有lambda函数都可以访问它。

这是AWS已经为我处理的事情,还是我需要以特殊方式专门配置它?

amazon-web-services csrf-protection aws-lambda aws-api-gateway

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

如何使用防伪令牌攻击后期数据

我知道ASP.NET MVC中的防伪令牌是如何工作的.但是仍然不清楚几个场景.我在下面提到的一个.

提交以下信息的帖子请求

  • cookie令牌(antiforgerytoken)
  • 表格数据(名字和姓氏)
  • 表单输入隐藏令牌(antiforgerytoken)

在到达服务器之前,黑客修改了表单数据(名字和姓氏),使标记信息保持不变.

在这种情况下,我们如何确保安全提交的数据无需任何修改即可到达服务器

实际上这个问题是由面试官提出的.我与同事讨论过,我也在谷歌搜索过.由于我无法找到清晰度,我想在这里问一下.

我不确定这是否是一个有效的问题.如果是的话,任何帮助将不胜感激

c# asp.net-mvc csrf csrf-protection web

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

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万
查看次数