ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

【Play Framework】CSRFの状況でのjQuery append()

スポンサードリンク

jQueryでDomを生成して、htmlソースに追加しようと思って実行

CSRF token not found in body or query string

おうおうおう(^ω^;

github.com

@Override
public F.Promise<Result> call(Http.Context ctx) {
    RequestHeader request = ctx._requestHeader();
    // Check for bypass
    if (CSRFAction.checkCsrfBypass(request, config)) {
        return delegate.call(ctx);
    } else {
        // Get token from cookie/session
        Option<String> headerToken = CSRFAction.getTokenFromHeader(request, config);
        if (headerToken.isDefined()) {
            String tokenToCheck = null;

            // Get token from query string
            Option<String> queryStringToken = CSRFAction.getTokenFromQueryString(request, config);
            if (queryStringToken.isDefined()) {
                tokenToCheck = queryStringToken.get();
            } else {

                // Get token from body
                if (ctx.request().body().asFormUrlEncoded() != null) {
                    String[] values = ctx.request().body().asFormUrlEncoded().get(config.tokenName());
                    if (values != null && values.length > 0) {
                        tokenToCheck = values[0];
                    }
                } else if (ctx.request().body().asMultipartFormData() != null) {
                    String[] values = ctx.request().body().asMultipartFormData().asFormUrlEncoded().get(config.tokenName());
                    if (values != null && values.length > 0) {
                        tokenToCheck = values[0];
                    }
                }
            }

            if (tokenToCheck != null) {
                if (tokenProvider.compareTokens(tokenToCheck, headerToken.get())) {
                    return delegate.call(ctx);
                } else {
                    return handleTokenError(ctx, request, "CSRF tokens don't match");
                }
            } else {
                // ここにひっかかっているっぽい
                return handleTokenError(ctx, request, "CSRF token not found in body or query string");
            }
        } else {
            return handleTokenError(ctx, request, "CSRF token not found in session");
        }
    }
}

そして色々検証してみる。

bodyappend() => エラー!

$('body').append(hiddenInput);

formappend() => エラー!

$('form').append(hiddenInput);

じゃ、じゃあ、idに直接append() => エラー!

$('#hidden_list').append(hiddenInput);

全部だめ! 厳しい! 流石! (´;ω;`)ブワッ

あきらめて、htmlに直書きすることにしました。