WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:フォームからのコードページ

0:[投稿] 29歳からのPerl [2002/10/06 16:16 ][環境:WIN+IE UNIX系+Perl]

長年に疑問に思ってた事です、よろしくお願いします。

<form action="$script.cgi" method="POST(GETの場合も)">
というようなフォームから、CGIに処理が移される場合に渡されるフォームデータ文字列についてです。

フォームのソース(html/cgi)がSJISの場合に、処理されるCGIに渡るフォームデータがSJIS以外という事があるのでしょうか?

以前に、明文化されていないから鵜呑みにするのは危険とか、
ソースがEUCの場合に、SJISでCGIに渡されたなどの話を聞きました。
実際には、どうなんでしょうかね?


1:[回答] JTR [2002/10/07 10:00 ]

基本的にはないのですが、例外的にはあります。
あきらかに、フォームのソースがSJISの場合は、無いと思います。
しかし、WEB上では、『フォームのソースがSJIS』想定が(ほとんど誰でもそのCGIを使えるので)できません。
ですから、CGIでしっかり、漢字変換の処理が必須なのです。

まちがっていたら、つっこみお願いいたします。


2:[回答] andi [2002/10/07 14:39 ]

過去ログ参照が一番かもですね。

http://www.parkcity.ne.jp/~chaichan/qanda/qa3058.htm


3:[質問] 29歳からのPerl [2002/10/07 21:39 ]

回答、ありがとうございます。
過去ログの方ですが質問前に読んでいたのですが、
改めて読ませてもらいました。

ここでも、悪意がある場合と普通の場合にわけたいのです。
1)普通の場合として、こちらが用意したフォームがSJISの場合、
SJIS以外のコードがCGIに来ることが実際の事例としてあるのでしょうか?
EUCの場合は、いろいろな場合の事例が確認がとれています。

2)jcode(getcode)で判別させている場合、半角カタカナだけの入力が問題となります。i-mode等の携帯の利用者を考えた場合、なかなか「半角カタカナ禁止」にはできません。

携帯からの場合はSJISだと仮定するとか、
全ての入力欄をjoinさせて、getcodeするとか、
<input type="hidden" name="JCODE" value="日">などのコードを埋め込んでおくとかで対処しています。
これらも、悪意がある場合にはだめですけどね。

悪意の入力に対処しつつ、文字コードを判別する方法が存在するのでしょうか?
100%は無理でも、有効と考えられる方法でもけっこうです。

よろしくお願いします。


4:[質問] あ [2002/10/08 08:46 ]

> ここでも、悪意がある場合と普通の場合にわけたいのです。

悪意ってなんですか?


5:[回答] 29歳からのPerl [2002/10/08 21:03 ]

改めてたずねられると答えにくいところもあるのですが、
この場合、簡単な例で言うと(いたずらレベルの場合で)、
用意しているhtml以外から、eucコード(その他のも含んで)をポストしてくるなどです。
もちろん、その以上の場合もありますけど。

本気で悪さしようとこられたらどうしようもないと思うので、
ごちゃごちゃ書きましたが、ここで聞きたいことは、

こちらで用意しているhtmlファイル(sjis)から、一般に流通してるブラウザからポストされて、sjis以外のコードで返ってくるかの一点です。


6:[回答] あ [2002/10/08 21:17 ]

 自作CGIではssiの埋め込み防止程度は考慮してますが、その他悪意については殆ど考慮していないので、興味を抱きました。(ウチではGETも併用してるしなーと…。)


7:[回答] ふじ [URL] [2002/10/08 21:27 ]

> 一般に流通してるブラウザからポストされて、sjis以外のコードで返ってくるか
手元の Lynx 2.8.4rel.1(Linux) で、以下のような SJIS の HTML から
submit したところ、データは EUC で送信されました。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
SJISのHTMLです。
<form action="sjisform.html">
<input type="text" size="20" name="v" value="あ">
<input type="submit">
</form>
</body>
</html>

Lynx が「一般に流通している」かというとちょっと微妙ですが。
「一般」の定義によりますし。


8:[回答] 29歳からのPerl [2002/10/08 22:04 ]

>あさん
なんの因果か昨年よりWeb作成の事業の方に来まして、
こんなのが、提供CGIを担当しているという状況なんです。

J-PHONEの場合用にGETで受けるCGIもあるんで、
(それを言い訳にして)
うちも、今のところ、POST/GET分けのチェック手を抜いています。

質問がたくさんだと、焦点がずれそうなので一点に絞ったんですが、できれば悪さ対策もある程度したいというのが本音です。
ホントの本音は、「こちらの指示通りの入力しかするな!」ですけど。

>ふじさん
どうもです。前にチェックしたつもりだったんですが、ミスしてたみたいです。
今週中にでも、再度Lynxでテストしてみます。
Lynxは、一般的かどうかという話の前に動作させたいクライアントですね。
サーバからコンソールで、ちょっと見るなんて人もいますし。


9:[回答] おーなーしぇふ [2002/10/08 22:17 ]

2年以上前なので古いデータかもしれませんが、ここの調査結果などは参考になるでしょうか?

●CGIと漢字コード
http://www.ibport.co.jp/~yui/cgiwork/code/index.html

当時の結果では「ほとんどのブラウザは、ページの漢字コードと同じコードでエンコードする。」みたいです。
※ここによると「lynxは常にEUCで送信」とあります。


10:[完了] 29歳からのPerl [2002/10/09 00:34 ]

すごく参考になりました。
というより、すごく勉強になりました。
とくに、EZwebのコードがそうだったの?という感じです。
改めて勉強しなおしてみます。

ありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World