- PR -

Base64でエンコードしたパラメータの受け渡しについて

投稿者投稿内容
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-04-01 17:54
大して情報量が増えていないと思うのは私だけ?

引用:

>・再現性はあるか
特定のユーザーで再現しているようですが、(ユーザーID等を取っている事から判る)
開発環境での再現はしていません。
>・他にPOSTされるパラメータをすべてなくしてやってみたか
手元の環境で再現していないので、試しておりません。


・その特定ユーザと他のユーザの違いは何か
・その特定ユーザの環境を開発環境に作ってみて、再現テストができないか

引用:

開発環境でテストしているノード環境はWindows2000+IE6.0、IE5.5、NN4.7
システム全体の作りとして、パラメータをBase64でやり取りしており
他の画面でも同様にBase64を使用していたりするのですが、
FormのパラメータからPOSTしている部分では発生しておらず、
Base64を前掲のようにURLに埋め込んで送っている箇所でのみ発生しています。


・URL埋め込みをやめてみたらどうなるか

引用:

>・問題のURLを直接入力してアクセスした場合の結果はどうなるか
直接入力すると、Base64に到達するまえにリファラーチェックしてはじいてしまいますので
それ用のエラー画面に遷移させています。


障害解析なんだから、そういう余計な機能を外す、無効にするなどしたら?
また、リファラーぐらい、いくらでも偽装できるでしょ。

引用:

問題あるのでは?
/ とか = が含まれていたらまずいです。(RFC番号忘れましたが、使用できる文字には
制限があります。調べてみてください。)
影響がない他の文字(って何???)に変えるべきではないでしょうか。


Base64 だからすくなくとも = は外せないような気がします。
ただ、URLに直接くっつけるからまずいんであって、hidden フィールドの value に
入っていたらブラウザが勝手にURLエンコードしてくれると思う。
さき@神奈川
会議室デビュー日: 2004/03/31
投稿数: 9
投稿日時: 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°
明らかに化けているのですが、何の文字コードで化けているのかわかりません。
yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2004-04-01 18:05
引用:

Base64 だからすくなくとも = は外せないような気がします。
ただ、URLに直接くっつけるからまずいんであって、hidden フィールドの value に
入っていたらブラウザが勝手にURLエンコードしてくれると思う。



同感です。
ふーばーさんがおっしゃているように、一度、URLにくっつけるのをやめてみては
いかがでしょうか?(それだけで直るかどうかはわかりませんが。)
さき@神奈川
会議室デビュー日: 2004/03/31
投稿数: 9
投稿日時: 2004-04-01 18:17
yuzyさん、ふーばーさん、回答ありがとうございます。

>・その特定ユーザと他のユーザの違いは何か
>・その特定ユーザの環境を開発環境に作ってみて、再現テストができないか

ご指摘の通りだと思います。まずはユーザーの情報を得る所からですよね。
ユーザー情報を取得できるようにHTTPヘッダーを書き出したりするべきなのですが、
現在準備中です。
うちのプロジェクトの都合でなのですが、そういう変更がかけにくいので、
とりあえずエラー文字列を書き出すようにして、それを分析してみようとしていました。

>・URL埋め込みをやめてみたらどうなるか
これも都合なのですが、根拠を提示しないとそういう変更を提案しにくいので
ちょっとやってみる、的な事ができないのです。

>障害解析なんだから、そういう余計な機能を外す、無効にするなどしたら?
>また、リファラーぐらい、いくらでも偽装できるでしょ。
本番環境と同様に、デコード時の文字列長チェックでエラーが発生しました。

>>問題あるのでは?
>>/ とか = が含まれていたらまずいです。(RFC番号忘れましたが、使用できる文字には
>>制限があります。調べてみてください。)
>>影響がない他の文字(って何???)に変えるべきではないでしょうか。

>Base64 だからすくなくとも = は外せないような気がします。
>ただ、URLに直接くっつけるからまずいんであって、hidden フィールドの value に
>入っていたらブラウザが勝手にURLエンコードしてくれると思う。

URLに直接くっつけるのはまずいんですか?
もうちょっと詳しくまずい理由を教えていただけますか?
あと、影響がない他の文字について、なにか参考になるページ等ありましたら
教えていただければと思います。よろしくお願いします。
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-04-01 18:45
どもも。がると申します。
んと…
引用:

早速チェックしてみました。↓Base64文字列を書きます。
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-/=
しかし私には問題なさそうに見えます・・・


まず1点目。多くの場合、base64で使う文字列は
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
だと思われるのですが。-ではなく+が使われてます。この辺の差異は大丈夫でしょうか?
あと念のため。=は「最後のパディングでのみ」使用になるのですが、その辺も
大丈夫ですか?


引用:

>・URL埋め込みをやめてみたらどうなるか
これも都合なのですが、根拠を提示しないとそういう変更を提案しにくいので
ちょっとやってみる、的な事ができないのです。


引用:

URLに直接くっつけるのはまずいんですか?
もうちょっと詳しくまずい理由を教えていただけますか?


んと、URLエンコード&URLデコードというものをご存知でしょうか?
もしわからなければ、一度調べてみることを強くお勧めします。
以下、URLエンコード/デコードが「分かる」ことを前提に。

postメソッドで用いられるhiddenでは、データは通常「生のまま」
書き出します。エンコードは必要に応じてユーザエージェントが
行います。
URLに直接データを貼り付けるような場合、文字列は「URLエンコード」
されている必要があります。
具体的には、少なくとも=と/と+が、エンコードされているかいないかで
文字列の意味が明らかに違ってきます。

引用:

あと、影響がない他の文字について


ですが、基本的には「RFCをチェックしてください」。日本語訳もたくさん
出ているので、目を通して損はないです。
もし「時間ないし手間だし」って場合は
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
以外全部NG、って考えると手っ取り早いです。

こういうエラーは非常によい勉強のタイミングです。
たくさんの知識を吸収できるよう祈っております。
さき@神奈川
会議室デビュー日: 2004/03/31
投稿数: 9
投稿日時: 2004-04-02 10:47
みなさんいろいろなアドバイス、ありがとうございます。
おかげ様で糸口が見えてきました。

RFCとURLエンコードについて調べてみたのですが、
"+","-","/"などの文字は、GET送信するにはURLエンコードの必要がある、
というのはよくわかったのですが、
それでは何故、いままでURLエンコードしないGET送信がうまくいっているのでしょうか?
Win2000+IE5.5、Weblogic6.1の環境ですが、
WebApplicationServerでのデコードのしくみによるものなのでしょうか?
WebLogicを6.0から6.1にバージョンアップした頃からこのエラーが頻発するようになりました。

スキルアップ/キャリアアップ(JOB@IT)