- - PR -
Base64でエンコードしたパラメータの受け渡しについて
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-01 17:54
大して情報量が増えていないと思うのは私だけ?
・その特定ユーザと他のユーザの違いは何か ・その特定ユーザの環境を開発環境に作ってみて、再現テストができないか
・URL埋め込みをやめてみたらどうなるか
障害解析なんだから、そういう余計な機能を外す、無効にするなどしたら? また、リファラーぐらい、いくらでも偽装できるでしょ。
Base64 だからすくなくとも = は外せないような気がします。 ただ、URLに直接くっつけるからまずいんであって、hidden フィールドの value に 入っていたらブラウザが勝手にURLエンコードしてくれると思う。 | ||||||||||||||||
|
投稿日時: 2004-04-01 17:57
さらに追記です。
JSPで書き出しているページではShift_JISを指定しています。 <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> また、Web.xmlにもShift_JISを指定しています。 先ほど発生したエラーでは以下のような文字列がBase64エンコード文字列の後についていました。 h8Cj8qhOtG-C/P° 明らかに化けているのですが、何の文字コードで化けているのかわかりません。 | ||||||||||||||||
|
投稿日時: 2004-04-01 18:05
同感です。 ふーばーさんがおっしゃているように、一度、URLにくっつけるのをやめてみては いかがでしょうか?(それだけで直るかどうかはわかりませんが。) | ||||||||||||||||
|
投稿日時: 2004-04-01 18:17
yuzyさん、ふーばーさん、回答ありがとうございます。
>・その特定ユーザと他のユーザの違いは何か >・その特定ユーザの環境を開発環境に作ってみて、再現テストができないか ご指摘の通りだと思います。まずはユーザーの情報を得る所からですよね。 ユーザー情報を取得できるようにHTTPヘッダーを書き出したりするべきなのですが、 現在準備中です。 うちのプロジェクトの都合でなのですが、そういう変更がかけにくいので、 とりあえずエラー文字列を書き出すようにして、それを分析してみようとしていました。 >・URL埋め込みをやめてみたらどうなるか これも都合なのですが、根拠を提示しないとそういう変更を提案しにくいので ちょっとやってみる、的な事ができないのです。 >障害解析なんだから、そういう余計な機能を外す、無効にするなどしたら? >また、リファラーぐらい、いくらでも偽装できるでしょ。 本番環境と同様に、デコード時の文字列長チェックでエラーが発生しました。 >>問題あるのでは? >>/ とか = が含まれていたらまずいです。(RFC番号忘れましたが、使用できる文字には >>制限があります。調べてみてください。) >>影響がない他の文字(って何???)に変えるべきではないでしょうか。 >Base64 だからすくなくとも = は外せないような気がします。 >ただ、URLに直接くっつけるからまずいんであって、hidden フィールドの value に >入っていたらブラウザが勝手にURLエンコードしてくれると思う。 URLに直接くっつけるのはまずいんですか? もうちょっと詳しくまずい理由を教えていただけますか? あと、影響がない他の文字について、なにか参考になるページ等ありましたら 教えていただければと思います。よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2004-04-01 18:45
どもも。がると申します。
んと…
まず1点目。多くの場合、base64で使う文字列は ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ だと思われるのですが。-ではなく+が使われてます。この辺の差異は大丈夫でしょうか? あと念のため。=は「最後のパディングでのみ」使用になるのですが、その辺も 大丈夫ですか?
んと、URLエンコード&URLデコードというものをご存知でしょうか? もしわからなければ、一度調べてみることを強くお勧めします。 以下、URLエンコード/デコードが「分かる」ことを前提に。 postメソッドで用いられるhiddenでは、データは通常「生のまま」 書き出します。エンコードは必要に応じてユーザエージェントが 行います。 URLに直接データを貼り付けるような場合、文字列は「URLエンコード」 されている必要があります。 具体的には、少なくとも=と/と+が、エンコードされているかいないかで 文字列の意味が明らかに違ってきます。
ですが、基本的には「RFCをチェックしてください」。日本語訳もたくさん 出ているので、目を通して損はないです。 もし「時間ないし手間だし」って場合は ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 以外全部NG、って考えると手っ取り早いです。 こういうエラーは非常によい勉強のタイミングです。 たくさんの知識を吸収できるよう祈っております。 | ||||||||||||||||
|
投稿日時: 2004-04-02 10:47
みなさんいろいろなアドバイス、ありがとうございます。
おかげ様で糸口が見えてきました。 RFCとURLエンコードについて調べてみたのですが、 "+","-","/"などの文字は、GET送信するにはURLエンコードの必要がある、 というのはよくわかったのですが、 それでは何故、いままでURLエンコードしないGET送信がうまくいっているのでしょうか? Win2000+IE5.5、Weblogic6.1の環境ですが、 WebApplicationServerでのデコードのしくみによるものなのでしょうか? WebLogicを6.0から6.1にバージョンアップした頃からこのエラーが頻発するようになりました。 | ||||||||||||||||
