質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

1回答

4359閲覧

Apacheにてmod_rewrite、mod_headerの設定のみでリクエストされたCookieから特定の文字のみ除去したい

tsh-nnb

総合スコア38

mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2017/05/10 10:45

###前提・実現したいこと
Apache+mod_perlにてCookieを利用するWebアプリを構築し、すでに商用運用に入っている状態です

Cookie処理にはApache2::Cookieを利用しているのですが、該当モジュールにおいてリクエストのCookie内に特定文字(例えばカンマ等)が含まれている場合に、モジュール内の処理にて例外が発生しシステムが異常終了してしまう事象が発生しております

Cookieにカンマ等の記号を含める場合、URLエンコードするのが正しく、Cookieを設定している側で修正を加えるのが正しいというのは理解しているのですが
該当Cookieが親ドメインを利用した別部署担当のシステムが設定し、ドメイン指定を入れているがゆえに、サブドメインを利用している担当システムに飛ばされて来ているという厄介な代物で
親ドメインを担当している部署に対しての修正依頼などが難しい、という事情があり…

該当のエラーについて、Apache2::Cookieのモジュール自体に改修を加えれば回避可能だとは思うのですが
・すでに商用稼働しているシステム
・モジュールに手を加えた際の、影響確認が広範囲にわたる
という点から、その選択肢もできれば避けたい状況です

長々と記載してしまいましたが、上記の前提よりperlモジュールでの処理を行う前に
Apacheの処理でリクエストCookieの値を変更する方針を検討し、それっぽく動くところまではできたのですが
いかんせん力押しという感じでスマートな対応とは言いづらい形となってしまっています

###試したこと
mod_rewrite、mod_headerの組み合わせにてCookieに特定文字が含まれた場合にリクエストヘッダーのCookie値を書き換えることにより実現可能と踏んで
とりあえず以下のような設定を.htaccessに記載することで書き換え可能なところまでは行けました

RewriteCond %{HTTP_COOKIE} (.*) RewriteRule .* - [E=cookie_value:%1,NE] RewriteCond %{HTTP_COOKIE} (.*),(.*) RewriteRule .* - [E=cookie_value:%1%2,NE] RewriteCond %{HTTP_COOKIE} (.*),(.*),(.*) RewriteRule .* - [E=cookie_value:%1%2%3,NE] RewriteCond %{HTTP_COOKIE} (.*),(.*),(.*),(.*) RewriteRule .* - [E=cookie_value:%1%2%3%4,NE] RequestHeader unset Cookie RequestHeader add Cookie "%{cookie_value}e" env=cookie_value

ただ、この記述だとみての通り想定されるカンマの数により全パターンの条件を追記する必要があり
カンマ以外の文字が含まれた場合などはさらに条件を追加しないといけないなど、正直スマートな対応とは言えない状態と思っています

特定の文字列を除去した値を後方参照で取り出すような記述方法が思いつかず
よりスマートな定義方法で対応が可能であれば、ご教示いただければと思います

###補足情報(言語/FW/ツール等のバージョンなど)
Apacheバージョン:2.2.15-39.0.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

解決はしていないのですが、この方針だと対応不可ということが判明したので報告です

どうやらApacheのモジュール処理順としてmod_rewriteよりもmod_perlが処理されてしまうようで
URLのrewriteが発生するケースでは問題ないのですが、直接perlモジュールのパスがたたかれると
置き換えが動作しないようです

perlモジュールのパスをすべて書き換え、必ずrewriteを通すようにすれば解決できそうですが
それこそ本質的な対応ではないように思えるので、一度振出しに戻ってApache2::Cookieの改修で回避する方向を模索してみます

投稿2017/05/18 05:46

tsh-nnb

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問