- PR -

<form>から受け取った文字列の末尾に「&x=52,&y=44」のような文字列が追加される理由

1
投稿者投稿内容
TK
会議室デビュー日: 2005/10/28
投稿数: 4
投稿日時: 2005-10-28 14:59
HTMLを製作しています。
ページのform(method=POST)欄で入力してもらった文字列をcgiに渡し、それを

require 'jcode.pl';
read( STDIN, $_, $ENV{ 'CONTENT_LENGTH' } );
tr/+/ /;
s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
&jcode'convert($_);

でデコードしてからログファイルに記録しているのですが、50%くらいの確率で、そのデコードされた文字列の末尾に「&x=52&y=44」のようなものが追加されていて困っています。
※ この&x=の数値は毎回変わります。&y=xx&y=xxのように&yが二つ続くこともあります。

例えばそのページのフォームに「あいうえお」と入力してエンターすると、ログには「あいうえお」とだけ記録されるはずが、「あいうえお&x=52&y=44」と記録されるわけです。

何が影響してこの余計な文字列が追加されるのか分かりません。
どなたかアドバイスお願い致します。

[ メッセージ編集済み 編集者: TK 編集日時 2005-10-28 15:01 ]
tarnwo
ベテラン
会議室デビュー日: 2002/10/25
投稿数: 58
投稿日時: 2005-10-28 15:02
これだけだと、フォーム情報にxとyがあるからではとしか回答できないかと。
原因発生もとのHTMLのソースを提示しましょう。
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-10-28 15:20
らいと申します。

50%くらいの確立って。(^^;;
なるときとならないときのサンプルも
HTMLのソースと一緒に掲載願います。

あと、同じ操作をしても、なるときとならないときがある、ということでしょうか。
その辺についても、お願いします。

[追加]
あと、投稿先が違うかと思われます。
おそらく、Insider.NETあたりになるのではないでしょうか。
[/追加]

# 投稿先の違いについて追加

_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)

[ メッセージ編集済み 編集者: らい 編集日時 2005-10-28 15:25 ]
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-10-28 15:24
どもです。がると申します。
んっと…基本的には「もうちょっと情報を」という話に
大差はないのですが。

XとYですと、気になる事がひとつ。
取り合えずまず
コード:
read( STDIN, $_, $ENV{ 'CONTENT_LENGTH' } );


のタイミングで入ってきていないかどうかチェックしてみてください。
多分入ってます。

で、原因ですが。
HTMLと、特にIMG周り、イメージマップ関連、JavaScript周りを
少しチェックしてみてください。

ちなみに余談ですが。
コード:
read( STDIN, $_, $ENV{ 'CONTENT_LENGTH' } );


は場合によっては大変に危険なので、基本的には
read( STDIN, $_);
としておいたほうがいいと思うです。
TK
会議室デビュー日: 2005/10/28
投稿数: 4
投稿日時: 2005-10-28 18:20
みなさんありがとうございます。
そうですね、ソースを表示しないと分からないですね^^;

ここから
<html>
<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
function check(){
if(!document.key.name.value){
alert('未記入です');
return false;
}
}
//-->
</SCRIPT>

</head>
<body>

<form action="http://xxxx.xx.xx/log/key.cgi" method="POST" name="key" onSubmit="return check()">
コメント(必須) <input type="text" name="name" size="80" maxlength="60">
<br>
<input type="image" src="submit.jpg" border="0" width="120" height="25"></form>

</body>
</html>
ここまで

です。ちなみにperl[key.cgi]のほうは

ここから
#!/usr/local/bin/perl

require 'jcode.pl';
read( STDIN, $_, $ENV{ 'CONTENT_LENGTH' } );
tr/+/ /;
s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
&jcode'convert($_);

$_=~ s/name=//g;
$file="./xxx.csv";

open(F,">>$file");
eval{ flock(F, 2) };
seek(F, 0, 2);
print F "$_¥n"; ←なぜか文字化けするので今回「¥」を2バイトで書きます。通常は1バイトです
close(F);

print "Location:http://xxxx.xx.xx/xx02.htm¥n¥n"; ← 同じく2バイト「¥」
ここまで

といった具合です。
サイトのほうは、フォームに何も記入がなかった場合、JavaScriptでアラートを出すようにしています。

################# > がるがるさん

ありがとうございます。

>ちなみに余談ですが。
>コード:
>--------------------------------------------------------------------------------
>
>read( STDIN, $_, $ENV{ 'CONTENT_LENGTH' } );
>
>
>--------------------------------------------------------------------------------
>
>
>は場合によっては大変に危険なので、基本的には
>read( STDIN, $_);
>としておいたほうがいいと思うです。

read( STDIN, $_, $ENV{ 'CONTENT_LENGTH' } );

read( STDIN, $_);
に置き換えていまやっみましたら、cgiエラーになりました。。
具体的に言いますとどういう危険があるのでしょうか?

#################################### >らいさん

ありがとうございます。
フォームに「あいうえお」と打ってsubmit画像をクリックすると、ログファイルxxx.csvに「あいうえお」と記録されます。
これが正常なときです。
不本意な結果のときは、ログファイルxxx.csvに「あいうえお&x=65&y=75」と記録されます。
今回65と75という数字にしましたが、これは毎回変わります。
どのようなパターンのとき不本意なログになるのか全くつかめないのですが、&x=●●&y=●●の「●●」部分は常に半角数字です。
もちろん何の数値なのか分かりません。
●●は一桁のときもありますし二桁の場合もあります。
「$x=●●」を含まず「&y=●●&y=●●」のように「&y=●●」だけ続く場合もありました。

>あと、同じ操作をしても、なるときとならないときがある、ということでしょうか。
>その辺についても、お願いします。

そうです。
何回も試したのですが、&x=●●&y=●●はどういうときに発生する文字列でどういうときに発生しない文字列なのか分からない状態です。
同じ操作・同じ入力をしても発生するとき・しないときがあります。
このフォームは文字列入力後、エンターキーを押すだけでもsubmitをクリックするのと同じ効果があります。
何の確証もありませんが、もしかしたら原因はこれなのかな・・と思っています。

あと、スレ違いのようで、すみませんでした m(_ _)m
今後気をつけます。

こんな情報でよろしいでしょうか?
みなさんよろしくお願い致します。
tarnwo
ベテラン
会議室デビュー日: 2002/10/25
投稿数: 58
投稿日時: 2005-10-28 18:50
引用:

TKさんの書き込み (2005-10-28 18:20) より:
<input type="image" src="submit.jpg" border="0" width="120" height="25">



とりあえず、上記を
<input type="submit">

に置き換えれば問題ないかと思います。
xやyは画像押下した座標ですかね。

どうしても画像にするなら、splitしてname属性の値だけ
抜き取れば問題ないかと思います。
TK
会議室デビュー日: 2005/10/28
投稿数: 4
投稿日時: 2005-10-28 18:59
あっそんな簡単なことだったんですかっ?!
さっそく試してみます!!
TK
会議室デビュー日: 2005/10/28
投稿数: 4
投稿日時: 2005-10-28 21:24
tarnwoさん
その通りでした。
数日間の悩みが吹き飛びました。

tarnwoさん みなさん ありがとうございました! m(_ _)m
1

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