金字塔:CSRF正在某处检查,但我找不到它

时间:2014-08-17 02:33:35

标签: python pyramid csrf

我正在尝试对我收到的403错误进行排查:

403 Forbidden

Access was denied to this resource.

CSRF token is missing or invalid

我的功能被剥夺了裸机:

@view_config(permission='public', route_name='passwordrecovery', renderer='templates/password-recovery.pt')
def password_recovery(request):
    print('****************************************here')

    if 'email' in request.POST:
        print('****************************************here2')
        print(request.POST.csrf_token)
    else:
        logged_in = authenticated_userid(request)
        form = render('templates/password-recovery.pt', {'logged_in': logged_in}, request)

        return {
            'logged_in': logged_in,
            'form': form,
        }

和表格:

<div id="login_form" xmlns="http://www.w3.org/1999/xhtml">
    <form id="passwordrecovery" action="/password-recovery" method="post">
    <h2>Log In</h2>
    <fieldset>
        <input name="csrf_token" type="hidden"
            value="89418871070a0bed0e715ce79f4f2d3a0a149657">
        <label for="email">Email:</label>
        <input type="text" name="email" />
        <br />
        []
        <input type="submit" class="login" name="submit" value="Reset" />
    </fieldset>
    </form>
</div>

正如您所看到的,我在那里有一些调试打印。什么让我发疯的是,当我加载表格时,我得到了&#39; **************************** ************这里 &#39;在控制台上调试,但在我提交表单后,我立即得到403.我没有得到另一个&#39; ******************** ********************这里 &#39;,我也没有其他任何打印出来。

我目前在任何地方都没有任何CSRF检查代码,所以我无法理解它的检查位置。 Pyramid是否有自动CSRF检查器,我不知道?

/编辑我发现只有在调用令牌时才会出现此错误&#39; csrf_token&#39;。把它称之为其他一切,一切都按预期工作。

1 个答案:

答案 0 :(得分:0)

嗯,为了它的价值,我得到了它的工作,但我不确定为什么。

如果我将令牌的名称更改为&#39; _csrf&#39;而不是&#39; csrf_token&#39;,然后它停止了自动检查。

我怀疑自动检查来自金字塔1.5中的新功能:csrf checking with view predicates

我还发现,如果我把&#39; csrf_check = False&#39;进入我的装饰,它的工作。奇怪的是,csrf_check的任何其他值都会引发谓词不匹配错误。

相关问题