ローカルにあるhtmlのフォームからのデータ取得について

このQ&Aのポイント
  • ローカルに保存しているhtmlのフォームからデータを取得する際に、サーバー上での処理を防ぐ方法を教えてください。
  • RedhatLinux7.2+apache1.3.26+php4.2.2の環境で、ローカルに置いたHTMLファイルからPOSTされたデータがサーバー側で処理されてしまう問題があります。
  • register_globalがOnになっている場合でも、$_POSTを使用してデータを取得することができます。
回答を見る
  • ベストアンサー

ローカルにあるhtmlのフォームからのデータ取得について

こんにちは。 ローカルに保存しているhtmlにフォームを配置しある値を格納した後、そのデータをサーバー上にPOSTするとエラーにならずサーバー側で処理を行ってしまいます。 これをさせないようにするにはどのようにしたらよいか教えてください。 環境はRedhatLinux7.2+apache1.3.26+php4.2.2です。 例として、サーバとは違うPCのローカルに置いたHTMLファイルの内容は以下のようにします。 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <TITLE></TITLE> </HEAD> <BODY> <FORM action="http://www.hogehoge.com/test.php" method="post"> <INPUT size="20" type="text" name="test"> <INPUT type="submit" name="submit" value="送信"></FORM> </BODY> </HTML> そしてサーバにあるtest.phpの内容は以下のようにします。 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <TITLE></TITLE> </HEAD> <BODY> <? print $test; ?> </BODY> </HTML> このローカルのhtml内のテキストボックスに何か入力して送信ボタンを押すとtest.phpでその内容が表示されてしまうのです。これを防ぐ方法を探しています。 つまり同じサイト内(http://www.hogehoge.com/にあるファイル)からのPOSTしか受け付けないようにしたいのです。 ちなみにregister_globalはOnにしてありますがOffにしても変数を$_POST["test"]にすると表示されます。 よろしくお願い致します。

  • PHP
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

test.php で、HTTP_REFERER が http://www.hogehoge.com/~ であることを チェックして、そうじゃなければ、処理をせずに抜けちゃう、もしくは、エラーページに飛ばす。

kkk194
質問者

お礼

ありがとうございます。 やはり$_SERVER['HTTP_REFERER']をチェックする方法しかないのでしょうか。 なるべくグローバルな設定で切り抜けられないかと思ったのですが・・・。 apache側の設定で拒否する方法とかはないでしょうか?

その他の回答 (3)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.4

> apache側の設定で拒否する方法とかはないでしょうか? 試してないけど、こんな感じでできるかも。 SetEnvIf Referer www\.hogehoge\.com valid_referer <Directory /~>  Order Deny,Allow  Deny from all  Allow from env=valid_referer </Directory>

  • kagep
  • ベストアンサー率23% (171/721)
回答No.3

なるほど、そこまで深い実情だったんですね。 私も#2の方と同じ解決法を取ると思います。

  • kagep
  • ベストアンサー率23% (171/721)
回答No.1

あの・・・ 基本的にHTMLというのはローカルで動いているんです。 サーバー上にあるHTMLをHTTPでローカルに転送し、 一時領域に取り込んでブラウザで表示しているんです。 <FORM action="http://www.hogehoge.com/test.php" method="post"> とフルパスで書いてある以上、POSTが成功するのは当然です。 相対パスで記述すればOKなのではないでしょうか???

kkk194
質問者

補足

ありがとうございます。 いくら相対パスで記述していても、フォームのあるページをユーザがダウンロードしてactionのところを目的URLに変えて自分のPCなどで保存してPOSTすれば処理されてしまいますよね? それをされたくないので質問をさせていただいたのです。 あいまいな質問ですいませんでした。

関連するQ&A

  • フォームで送った文字がおかしくなる

     フォームから文字を記入して、送信ボタンを押すと次のページでその文字が表示されるという初歩的なプログラムをつくっています。しかし、フォームからPOSTでデータを送る場合、ある特定の一文字の漢字だけを記入して送信ボタンを押すと正常に表示されません。 例えば、「卒業」だと正常に表示されるのに「卒」だと「'」になってしまい、他にも「文」や「動」を一文字だけ記入すると、何も表示されません。ひらがなやカタカナ、複数文字の場合は全て正常です。原因が分からなくて困っています。 a.php (入力フォーム) <HTML> <HEAD> <TITLE>テキスト送信のテスト </TITLE> <META http-equiv="Content-Type" content="text/html; charset=EUC_JP"> </HEAD> <BODY> <FORM method="POST" action="view.php"> 入力してください: <INPUT type="text" name="name"> <BR> <INPUT type="submit" value="送信"> </FORM> </BODY> </HTML> view.php (表示するphpファイル) <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC_JP"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <BODY> <?php print $_POST["name"]; ?> </BODY> </HTML> どこか間違いがあるでしょうか? a.phpとview.phpは両方とも日本語(EUC)改行=LFで保存しています。 phpのバージョンは5.1.1です。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 変数を渡して新しいウィンドウで表示させるには

    http://iskiso3.hustle.ne.jp/i.php 上のページのように最初のページで入力してもらった変数を次のページにPOSTで渡すことは出来るのですがこのときに新たなウィンドウで結果を表示させるにはどのようにスクリプトを書き換えたらよいのでしょうか? JAVAを使えば出来るということまではわかり試行錯誤してみたのですが変数が渡されなかったり問題がおきてしまいました。 一応上記のページのスクリプトは 最初のページが ------------------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>test</title> </head> <body> <form action="o.php" method="post"> メッセージを入力してください。<br> <input type="text" name="mes" size="30"> <input type="submit" value="送信"> </form> </body> </html> ------------------------------------- で、2番目のページが ------------------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>test</title> </head> <body> <?php $mes = $_POST['mes']; echo "$mes"; ?> </body> </html> ------------------------------------- というようになっています。 ご教授よろしくお願いいたします。

    • ベストアンサー
    • Java
  • HEADERについて

    無知でお恥ずかしいのですが、PHPで出力する際 header("Content-Type: text/html;charset=EUC-JP"); などと最初にヘッダーを出力すると思うのですが、例えばtest.phpが以下のようになっていた場合でもPHPでヘッダーを出力する必要があるのでしょうか? test.php ※1<?php header("Content-Type: text/html;charset=EUC-JP"); ?> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> <TITLE></TITLE></HEAD> <BODY> TEST <?php echo $test; ?> </BODY> </HTML> 参考書などを見てみると「全ての出力の前に記述する必要がある」と書いてあるだけで、書かずとも正常に表示されますし、仮に文字化けしても <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> と追加すれば文字化けも解決するので、疑問は感じつつも思い出したときにPHPにもヘッダを記述するようにしていたのですが、少しづつPHPを勉強しやれる事が増えてくる内に、記述してあるものと記述して無いものが混在してきて気持ち悪く感じてきました。 皆さんはどのようにされていますか? ※他サイトで配布されているPHPスクリプトなども見てみたのですが、毎回記述している方、一切記述していない方それぞれでした。 あと、全く違う質問ですが、MYSQL接続中にエラー処理でexit;する場合、exit;する前にMYSQL接続を切断する必要ってあるのでしょうか?

    • ベストアンサー
    • PHP
  • データの引継ぎについて

    はじめまして 早速ですが、「test-1.html」のダイアログをsubmitし、「はい」が 選択された場合「test-2.html」のある値(value="0")に1を加算させ たいのですがデータの引渡し(加算)方法がよくわかりません。 JavaScript間もしくは、JavaScriptとHTML間でのデータの引渡し 方を教えていただけないでしょうか? 宜しくお願いいたします。 「test-1.html」↓ <html> <head> <title>tets1</title> <meta http-equiv="Content-Style-Type" content="text/html; charset=EUC-jp"> <script language="JavaScript"> <!-- function window_confirm(){ if(window.confirm("加算しますか?")){ window.alert("加算されました。"); document.form1.es_no2.value = "1" }else{ window.alert("キャンセルが選択されました。"); } } //--> </script> <body> <form action="test-2.html" method="post" name="form1" onclick="window_confirm()"> <input type="submit" value="改定"> </form> </body> <html> 「test-2.html」↓ <html> <head> <title>tets2</title> <meta http-equiv="Content-Style-Type" content="text/html; charset=EUC-jp"> <body> <form action="test-3.html" method="post" name="form2"> <input type="text" name="no_2" value="0" id="#" > <input type="submit" value="次へ"> </form> </body> <html>

  • phpの画面表示が真っ白です

    phpをXAMPPのサーバーでやろうとしているのですが、表示されずに真っ白です。 サーバーは出来ているようです。 コードをのせるのでもし間違っていたら教えてください。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitionl//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <?php print'ようこそ'; ?> </body> </html>

    • ベストアンサー
    • PHP
  • POSTされた値をEUCで表示したい

    <?php echo '<html><head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> </head> <body> <form action="test2.php" method="POST"> <input name="str1" value="テストです"> <input type="submit"> </form> </body></html>'; exit; } ?> こうして送信されたデータは <?php echo '<html><head> <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS"> </head><body>'; echo $_POST['str1']; ・・・・・ として表示しますが、このままのテストソースではSJISで普通に表示されますが、EUCで表示するにはWindowsの中のphp.iniを編集すればよいと思います。 どのようにすればよいですか? test2.phpが・ニ・ケ・ネ、ヌ、ケと表示したら成功です。

    • 締切済み
    • PHP
  • 連続するecho関数の手間を省く方法

    現在、PHPとCGIを平行して勉強しているのですが、 CGIは printf EOM<< ~ EOM<< のような形で関数1つだけで~の内容を出力できるのに、同様にPHPでやるとエラーになります。 こんな感じです。。。 <?php print EOM<< Content-Type:text/html\n\n; <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>ハロー!PHP!!</TITLE> </HEAD> <BODY> ハロー!PHP!! </BODY> </HTML> EOM<< ?>

    • ベストアンサー
    • PHP
  • これは何を意味しますか?

    <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY> <img src="./image/2151.jpg"> </BODY> </HTML>

    • ベストアンサー
    • HTML
  • 違う文字コードのページへFORMデータを送る時

    いつもお世話になっております。 EUC-JP のページからx-euc-jpのページへFORMを使いデータを渡しているのですが、どうも受け取り側で渡したデータが文字化けを起こしているようなのです。 原因が分かる方がいたら、ご教授下さい。 <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <script type="text/javascript"> <!-- function sent2() { document.INPUT.submit(); } // --> </script> </HEAD> <BODY onload="sent2()"> <form name="INPUT" METHOD="POST" action="http://okwave.jp" ENCTYPE="text/plain"> <input type="hidden" name="arr1" value="555006303003"> </form> </BODY> </HTML>

  • フォームデータをデータベースに追加したい

    はじめまして。 初心者で参考書を使ってPHP、MYSQLを学習してるんですが フォームに入力したデータをデータベースに追加するとこが 参考書どうりにやってるんですができません。 どうかお力を貸してください。 (ken1.php) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>県別人口面積その1</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <?php mysql_connect('localhost','root','freedom'); mysql_select_db('lesson'); $sql= "select * from todofuken"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["kenmei"]; echo " "; echo $row["kencho"]; echo " "; echo $row["jinko"]; echo " "; echo $row["menseki"]; echo "</p>"; } } ?> </body> </html> (ken2.html) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>フォーム文</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <p>データを入力してください</p> <form action="ken3.php" method="post" > <p>県   名<input type="text" name="ken" size="40"></p> <p>県庁所在地<input type="text" name="kec" size="40"></p> <p>人   口<input type="text" name="jin" size="40"></p> <p>面   積<input type="text" name="men" size="40"></p> <input type="submit" value="登録"> <input type="reset" value="リセット"> </form> </body> </html> (ken3.php) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>ここにページのタイトルが入る</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <?php extract($_POST); mysql_connect('localhost','root','freedom'); mysql_select_db('lesson'); $sql = "insert into todofuken values('$ken', '$kec', $jin, $men, 0)"; mysql_query($sql); ?> </body> </html> ken2.htmlで入力したデータをデータベースに追加したいのですが ブラウザ上で登録ボタンを押してken3.phpに移動するまでうまくいっています。 参考書ではこの操作で入力したデータがデータベースに追加されると書いているのですが データベースを見ても追加されていません。 原因をいろいろ調べたのですが不明なのでお力添えお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう