• 締切済み

PHPで隠しデータをPOST送信する方法

<form name="example" method="POST" action="example.php"> <input type="text" name="id" value="" /> <input type="password" name="pw" value="" /> <input type="submit" value="ログイン" /> </form> 上記のようなログインフォームがあるとします。 <input type="hidden" />のようにソースを見たらわかってしまう方法ではなく、 クライアント側で完全に見えないよう、id,pwの送信と同時にPHPで隠しデータをPOST送信する方法はございますでしょうか。 よろしくお願いいたします。

  • PHP
  • 回答数5
  • ありがとう数5

みんなの回答

回答No.5

超推測ですが、おそらく前のページから次のページにデータ引き継ぎをクライアント側に見せない形で行いたいんじゃないかなと思います。 上記該当でしたら、セッションを使いましょう。

ixkaito
質問者

お礼

ご回答ありがとうございます。 もちろんこちらで管理しているサーバ内のページはセッションを使用しております。 ただ、To_aru_Userさんへの補足で書いておりますが、別のところが管理しているサーバへID/PWをPOST送信すると同時に、隠しデータを送れないかを考えております。隠しデータは送信する直前まで見えなければ大丈夫です。

回答No.4

そういうのはOpenIDやOAuthでいいんじゃないでしょうか。 (もちろん、OAuthの認証サーバー、利用サーバーの両方を作る必要があります。)

ixkaito
質問者

お礼

ご提案ありがとうございます。 認証する側のサーバは別のところが管理していますので、仕様の変更が難しいので、POST送信で可能であれば、そちらで済ませたいと考えておりますが、方法がなければ検討させて頂きます。

回答No.3

そもそもの話になりますが。 何らかの形で隠せたとして、見えない物をどうやって入力するのですか? 逆に、何らかの方法で入力したのなら、「入力したデータ」が送信されている事は容易に推測できるはずですので、隠すまでもなく目に見えて送信できても問題ないのではないでしょうか。

ixkaito
質問者

お礼

ご回答ありがとうございます。 To_aru_Userさんへの補足で書かせて頂きましたが、ユーザーの入力を必要としないものです。

noname#244856
noname#244856
回答No.2

【Cookieについて】 IT用語辞典 - Cookie http://e-words.jp/w/Cookie.html PHP Manual - Cookies http://www.php.net/manual/ja/features.cookies.php 【スーパーグローバル変数の一部】 ・$_GET →ユーザー側からGET送信されたデータ ・$_POST →ユーザー側からPOST送信されたデータ ・$_COOKIE →ユーザー側からCOOKIE送信されたデータ ・$_REQUEST →ユーザー側からGET/POST/COOKIE送信された複合データ 【これらの変数をユーザーが覗き見る方法】 ・$_GET →ブラウザのアドレスバーを見れば一目瞭然 ・$_POST →LiveHTTPHeadersなどのFirefoxアドオンを使えば見れる ・$_COOKIE →LiveHTTPHeadersなどのFirefoxアドオンを使うか、Cookieが保存されているフォルダを覗けば見れる ・$_REQUEST →上記3つ同様に可能 つまり、これらのどれを使っても厳密に隠蔽するのは不可能ということです。ユーザーに見られずに1ユーザーごとに情報を割り当てて保持したい場合、セッションという機能を使います。 PHP Manual - セッション http://www.php.net/manual/ja/book.session.php これはあくまで、Cookieを応用した技術です。PHPによって自動的に割り振られるCookie、「セッションID」で個人を識別し、サーバー側に保存されている1人1人の変数の値を取り出してくることが出来ます。 A Magic Web - PHPとセッションのまとめ http://www.a-magic-web.com/2009/05/php_session/ セッションを完全に破棄する(安全にログアウトさせる)方法は少し複雑なので注意してください。 プログラマはサイコロを振らない - PHPでセッションを完全に破棄する方法 http://d.hatena.ne.jp/Kappuccino/20080726/1217049706 またログイン直後(ユーザー個人を識別するページの開始直後)には、「session_regenerate_id(true);」をコールすることによってセッション固定攻撃に対策を取る必要があります。 PHP Manual - session_regenerate_id http://php.net/manual/ja/function.session-regenerate-id.php Wikipadia - Session fixation http://en.wikipedia.org/wiki/Session_fixation クロスサイトリクエストフォージェリ攻撃に対する対策も必要です。 Wikipadia - クロスサイトリクエストフォージェリ http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B5%E3%82%A4%E3%83%88%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%AA Webセキュリティの小部屋 - クロスサイト・リクエストフォージェリ(CSRF)対策(PHP編) http://www.websec-room.com/2013/03/07/479

ixkaito
質問者

お礼

To_aru_Userさん ご回答ありがとうございます。 To_aru_Userさんのセキュリティに関する記事はたまに拝見させて頂いておりますが、まだまだそのレベルに到達できないでいます。 $_GET、$_POST、$_COOKIE、$_REQUEST、これらがユーザーに見られることは知っておりますが、送信したあとは特に問題ないんです。 今回は別サーバ(こちらの管理外)へログイン情報を送信して、その返答をエラーの場合はエラーコード、成功の場合はユーザーIDなどをGETで返してもらうという流れでして、こちらで登録情報を保持していませんので、もちろんGETで返されたデータの真偽は判断できません。しかしそうなりますと適当にパラメータつけたらログインできてしまいます。こんなアホな話はないわけです。 そこで考えたのが送信前に毎回ランダムな値をユーザーに見えない形でこちらで保持し、それを送信して返してもらって、ログインOKの返答あり、かつそのランダムな値が一致していれば、こちらでログイン成功と判断する。 しかし、果たしてこちらで保持しているランダム値を直前まで見えない形でPOST送信できるのかを知りたかったです。 もちろんこちらではログインからログアウトまではセッションで管理しています。 題名とは違ってきますが、もし他にもっといい方法がございましたら、ご提案いただけますと幸いです。 よろしくお願いいたします。

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

>クライアント側で完全に見えないよう、id,pwの送信と同時にPHPで隠しデータをPOST送信する方法はございますでしょうか。 そういう方法はありえません。 HTMLに現れないという方法でいいなら、Cookieを使う。 なお、PHPかどうかはクライアント側には関係ないことです。

ixkaito
質問者

お礼

ご回答ありがとうございます。 やっぱりないんですね。 >HTMLに現れないという方法でいいなら、Cookieを使う。 これを詳しくお願いできますでしょうか。 ちなみにPHPなのは現在そのファイルがPHPだからです。

関連するQ&A

  • PHP foreachのループの中でPOST送信

    現在掲示板を作っています。 <?php foreach ($result as $record){ $id = $record ["id"]; $title = $record ["title"]; ?> <form method="post" name="form1" action="contents.php"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <a href="javascript:form1.submit()" ><?php echo $title; ?></a> </form> <?php } $dbInfo = null; ?> </form> テーブルのidとtitleをすべて取り出しています。 titleを一覧表示で全件表示させリンクを貼り、移動先にidをPOSTで送信し投稿内容がみられるようにしたいのですが、リンクを貼れても飛べなかったり、移動できてもなにも送信していない状態(ただ移動しただけ)だったり。 2つ目のphp直後の「}」を1つ目の中で閉じるとPOST送信しつつ移動できるのですが、1件しか表示されなくなってしまいます。 <form method="POST" name="con-id"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <a href='contents.php'><?php echo $title; ?></a> </form> などもしてみましたが、POST送信はされませんでした。 なにか方法はありませんでしょうか? ここをこうした方がいい、など教えて頂きたいです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • JavaScriptにおいてPOSTで送信されたデータを取得出来ますか

    <form action="自分" method="POST"> <input type="hidden" name="abc" value="1"> <input type="submit" name="OK" value="OK"> </form> 上記のように、POST渡しで送信したとき、Javascriptにて、hiddenのデータを取得することができるのでしょうか? 出来るのであればその方法を教えてくださいませんか。 よろしくお願いします。

  • PHPでフォームからの送信

    PHPでフォームからデータを送信する方法について教えてください。例えばPHPファイルの中に下の様にフォームを作成して、送信ボタンを2つ作ります。一つのボタンをクリックすると全てのフォームの情報が送信されてしまいますが、独立して送信できるようにはできないのでしょうか。簡単にでもできるかできないかを教えていただけましたら、あとは自分でなんとかがんばりますので、どなたか教えていただけれますと幸いです。宜しくお願いします。 <form action="abc.php" method="post"> AAA:<input type="text" name="simei"> BBB:<input type="password" name="pass"> <input type="submit" value="送信"> </form> <form action="abc.php" method="post"> CCC:<input type="text" name="simei"> DDD:<input type="text" name="pass"> <input type="submit" value="送信"> </form>

    • ベストアンサー
    • PHP
  • Formを使ったPHP間での受け渡しについて

    いつもお世話になっています。 PHP間での変数の受け渡しで・・ <form action="<?= test.php ?>" method="POST">   <input type="hidden" name="id" value="aaa"/>   <input type="submit" name="submit" value="送信"> </form> と記述するとtest.phpには渡したいaaaが渡されるのですが、 これだとsubmitを押さないと渡せないため困っています。 したいことをまとめると、submitを使わずにページが表示されたら スグに変数が渡されるようにしたいです。 いろいろ試してみましたが、力不足で出来ませんでした。 宜しくお願いします!

    • ベストアンサー
    • PHP
  • 1アクションでPOST・GET、両方送信したい

    1つのフォームからボタンをクリックして、 POST・GET送信と、両方飛ばすには、どうすればよいでしょうか? URLに「表示させたいパラメータ」と「表示させたくないパラメータ」 があります。 「表示させたいパラメータ」は、GETで、 「表示させたくないパラメータ」は、POST送信したいのですが、 1つのフォームで、同時に飛ばす方法が分かりません。 <form method =post action=hoge.php>  <input type=text name="piyo" value="piyo">  <input type=hidden name=puyo_id value=puyo>←これだget送信したい  <input type=submit value="送信"> </form>

    • ベストアンサー
    • PHP
  • POSTデータのNAME属性をVALUEによって取得する方法

    HTML→PHPのPOSTデータのやりとりについて、 【HTML】 <form name="form1" method="post" action="xxx.php"> <input name="01" type="text" value="1"> <input name="02" type="text" value="0"> <input name="03" type="text" value="0"> <input name="04" type="text" value="1"> <input type="submit" name="Submit" value="送信"> </form> 【xxx.php】 フォームから送信されたデータを使って、「value」が"1"の「name」を拾うのにはどのように書けばいいでしょう? ↓このように取得したいです。 $data[0]="01"; $data[1]="04"; よろしくお願いします。

    • ベストアンサー
    • PHP
  • $POSTの送信

    POSTデータを送信する方法を教えてください。 PHPのPOSTを用いたプログラミングを行っています。 以下のように、前ページ受信したPOSTの内容(「aaa」)を hiddenで送信したいと思いましたが 次ページ(result.php)にて「$name」と受信してしまいます。 (前略) <?php $name = $_POST['name']; echo $name; ?> <form action="result.php" method="POST"> <input type="hidden" name="name2" value=$name> <input type="radio" name="name3" value=" (以下略) 説明下手ではありますがご回答頂きたいと思います。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • submitではなくbuttonで送信

    事情があり、submitではなくbuttonでフォームのデータを送信したいのですが、以下のように書くとbuttonでは4567が送信されません。 <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="submit" name="bbb" value="4567"> </form> ↓ <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="button" name="bbb" value="4567" onclick="submit();" > </form> submitと同じように、bbbのデータ4567も送信するにはどのように書けばよいのでしょうか? 宜しくお願いします。

  • 同一ページで複数のformを扱う場合

    同一のページ内にhiddenでIDを振った削除ボタンを用意しクリックされたIDを取得するにはどのようにすれば良いでしょうか? <form action="/test.php" name="1" method="post"> <input type="hidden" name="id" value="1" /> <input type="submit" name="delete" value="削除"> </form> -- 省略 <form action="/test.php" name="10" method="post"> <input type="hidden" name="id" value="10" /> <input type="submit" name="delete" value="削除"> </form> formにnameを振ってみても最後のIDがPOSTされてしまいます。

    • 締切済み
    • PHP
  • スマートフォンからMySQLサーバーにインサート

    「HTML+javascript」のスマートフォンアプリから別サーバーのMySQLと連携させることを考えています。 サーバーの情報を取得することは問題なくできたのですが、サーバーにインサートする方法で悩んでいます。 【post.html】では、mysqlにインサートはされるものの、端末にはサーバーのinsert.phpがそのまま表示されてしまいます。 【post_kai.html】でfunction Check()を試したところ、送信ボタンを押した後に端末内のfinish.htmlが表示されましたが、残念ながらインサートが出来ていませんでした。 サーバーにインサートを完了させながら、その後は端末内のfinish.htmlを表示させるためにはどうすればいいでしょうか? ****************************** 端末側 ****************************** 【post.html】 <form name="form1" id="form1" method="POST" name="form1" value="form1" action="http://hoge.ne.jp/insert.php"> <input type="hidden" name="id" value="100" /> <input type="hidden" name="pw" value="12zdD3fw" /> <input type="button" name="button" value="送信" /> <input type="hidden" name="MM_insert" value="form1" /> </form> 【post_kai.html】 <form name="form1" id="form1" method="POST" name="form1" value="form1" action="http://hoge.ne.jp/insert.php"> <input type="hidden" name="id" value="100" /> <input type="hidden" name="pw" value="12zdD3fw" /> <script> function Check(){ document.form1.submit(); location.href="finish.html"; } </script> <input type="button" name="button" value="送信" onClick="Check();" /> <input type="hidden" name="MM_insert" value="form1" /> </form> 【finish.html】 <html> OKです <html> ****************************** サーバー側(mysql側) http://hoge.ne.jp/ ****************************** 【insert.php】 省略

専門家に質問してみよう