0

私は個人的なプロジェクトにPHPスリムフレームワークを使用しています。何らかの理由で、Request in Slim の PSR 実装は明らかに一部のヘッダーをフィルタリングしています。カスタム CSRF トークンを設定しようとしていますが、$request->getHeaders() 経由では利用できません。問題を示す一例を次に示します。

$app->get('/bar', function ($request, $response, $args) {
    echo "PHP's getallheaders() <br>";
    foreach (getallheaders() as $name => $value) {
        echo "$name: $value <br>";
    }
    echo "Slim's GetHeaders() <br>";
    foreach ($request->getHeaders() as $name => $values) {
        foreach ($values as $value) {
            echo "$name: $value <br>";
        }
    }
});

私はこの出力を得る:

PHP's getallheaders()
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: null
Accept-Encoding: gzip, deflate
csrf_name: csrf56fc038c2f6eb
csrf_value: 4e077c04dadf22377da2aebc1a8caa78
Cookie: PHPSESSID=41016nbag70gi6shq4u2tg0aq1
Connection: keep-alive

Slim's GetHeaders()
Host: localhost
HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_LANGUAGE: null
HTTP_ACCEPT_ENCODING: gzip, deflate
HTTP_COOKIE: PHPSESSID=41016nbag70gi6shq4u2tg0aq1
HTTP_CONNECTION: keep-alive 

カスタムヘッダーの理由を理解しようとしています:

csrf_name: csrf56fc038c2f6eb
csrf_value: 4e077c04dadf22377da2aebc1a8caa78 

Slimによって削除されています。

4

2 に答える 2

2

Slim ではなく、Web サーバーです。

名前にアンダースコアが含まれるヘッダーは HTTP 仕様では有効ですが、セキュリティ上の理由から、 NginxApacheの両方がこれらのヘッダーを黙って削除します。a..zA..Z一般に、 および-文字を含むヘッダーのみを使用する必要があります。

getallheaders()Apache では、 which is のエイリアスを使用して、名前にアンダースコアが含まれるヘッダーに引き続きアクセスできますapache_request_headers()

Nginx を使用すると、名前にアンダースコアを含むヘッダーをunderscores_in_headers on設定で有効にすることができます。

于 2016-03-31T09:21:33.923 に答える