it-swarm-ja.com

ApacheがPATH_INFOのURIから文字をデコードしないようにします

ApacheがURIから%2B+)と%3D=)をデコードしないようにしたい。 PATH_INFOでデコードされていない文字が必要です。

%2F/)に対して、次を使用してこれを実行しました。

AllowEncodedSlashes NoDecode

しかし、他のエンコードされた文字に対して同じことを行うのに役立つディレクティブは見つかりません。これも可能ですか?

2
Jakov Sosic

ApacheがPATH_INFO Apacheサーバー変数(PHPは後で$_SERVER['PATH_INFO']スーパーグローバルに割り当てられ、変更されていないように見えます)内の%エンコードされた文字をデコードするのを防ぐことはできません)。

AllowEncodedSlashesディレクティブは特殊なケースです。これは本当に「セキュリティ機能」です。デフォルトでは、URLのパス部分にエンコードされたスラッシュ(%2F)がシステム生成 404応答をトリガーします。 AllowEncodedSlashesディレクティブを使用すると、リクエストをアプリケーションに送信できます(NoDecodeオプションは後で追加されただけです)。

PHPで%エンコードされたPATH_INFOを読み取りたい場合は、代わりに$_SERVERなどの別の$_SERVER['REQUEST_URI']変数を使用することを検討してください。これは%ではありません。 -デコードされますが、これには追加の解析が必要になります(PHP superglobal $_SERVER['REQUEST_URI']は、%デコードされた同じ名前のApacheサーバー変数とは異なります。 URLが書き換えられている場合は、完全に別のURLを参照してください!)

ただし、%エンコードされたPATH_INFOをApacheで(mod_rewriteを使用して)読み取りたい場合は、代わりに、クライアントから送信されたリクエストヘッダー全体を含むTHE_REQUESTサーバー変数を解析することを検討してください。この変数は%デコードされていません。これは、環境変数またはURLパラメーターに割り当てて、PHPそのように読み取ることができます(QUERY_STRINGサーバー変数、および対応する$_SERVER['QUERY_STRING']スーパーグローバル、 %デコードされませんが、PHPは$_GET配列内の個々のパラメーター値をデコードします。)

1
MrWhite