URLの後ろに?id=123456 - PHPプロ!Q&A掲示板

2691

  • 0P

URLの後ろに?id=123456

質問日時 / 2010年4月24日 11:46    回答数 / 6件

Questioner:  sming  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

お世話になっております。
以下のような簡単な問い合わせフォームを作りました。

├ index.php(サイトのトップページ)
├ error.php
├ yblacklist.txt
├ x_style.php

├ mail(問い合わせフォーム)
│ ├ index.php
│ ├ return.php
│ ├ sendmail.php
│ ├ textcheck.php
│ ├ x_settei.php
│ └ v_rel.php


ここまでは $_POST["○○"] という方式を使っていました。
今度は$_GET["○○"] を使ってURLから取得しようと考えています。

だから全てのページにて $_GET["○○"] を書いてIDを取得し、リンク先のURL
全てに ?id=123456 に相当する、文字列を付加して、IDが受け継がれるようにし
なければならないと考えているのですが、行き詰っています。

サンプルとしてリンクでURLの後ろにid=******となるファイルを作り

1.php
  1. <?php
  2. $getid = $_GET["id"];
  3. $afid = "?id=".$getid;
  4. ?>
  5.  
  6. <HTML><HEAD>
  7. <TITLE></TITLE>
  8. </HEAD>
  9. <BODY>
  10. ID=<?=$getid?><BR><BR>
  11.  
  12. 1ページ目<BR><BR>
  13.  
  14. <a href="menu.php<?=$afid?>">menu</a><BR>
  15. </BODY>
  16.  
  17. </HTML>

index.php
  1. <?php
  2. $getid = $_GET["id"];
  3. $afid = "?id=".$getid;
  4. ?>
  5.  
  6. <HTML><HEAD>
  7. <TITLE></TITLE>
  8. </HEAD>
  9. <BODY>
  10. ID=<?=$getid?><BR><BR>
  11.  
  12. トップページ<BR>
  13. <a href="menu.php<?=$afid?>">menu</a><BR>
  14.  
  15. </BODY>
  16.  
  17. </HTML>

menu.php
  1. <?php
  2. $getid = $_GET["id"];
  3. $afid = "?id=".$getid;
  4. ?>
  5.  
  6. <HTML><HEAD>
  7. <TITLE></TITLE>
  8. </HEAD>
  9. <BODY>
  10. ID=<?=$getid?><BR><BR>
  11.  
  12. <a href="1.php<?=$afid?>">1</a><BR>
  13.  
  14. <a href="index.php<?=$afid?>">index</a><BR>
  15. </BODY>
  16.  
  17. </HTML>

このようなリンク形式でIDを渡す方法はわかったんですが
送信フォームだとどうすればいいのかわかりません。
ポイントとしては
・すべてのURLにidを埋め込む
・その状態のまま送信フォームまで引っ張る。
・訂正で戻ってもid=******を維持してやっぱり送信…みたいに途切れない。
・送信メールのタイトルにもidをつける。

mail/x_settei.phpに以下のような部分があります。

//タイトル 見出しにはstripslashesが必要
$sbj = (".$name.") 様 お問い合わせの件

ここで
$sbj = (".$name.$id.") 様 お問い合わせの件
と書いたのですが、間違ってませんか?
はっきりいって自身がないので教えてください。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01shimix>送信フォームだとどうすればいいのかわかりません。
┃┗A01-1smingお世話になっております。 回答いただいたmethodを以
┃ ┗A01-1-1shimix>URLに任意のidをつけてそのid=123456を確認画面→送信
┃  ┗A01-1-1-1smingお世話になります。 <input type="hidden" name="i
┃   ┗A01-1-1-1-1shimixそもそも >送信フォームだとどうすればいいのかわ
┗A02NurseAngelXSS脆弱性が存在します。 ×$afid = "?id=".$getid;

回答一覧

並び替え:

A01
answerershimix [4月24日 13:13] (最終編集:4月24日 13:34)

>送信フォームだとどうすればいいのかわかりません。

form要素のmethod属性をPOSTからGETに変えるのは理解されてますよね。input要素(type="hidden")にしてフォーム内に入れてください(このあたりはPOSTのときと変わりません)。


>$sbj = (".$name.$id.") 様 お問い合わせの件
>と書いたのですが、間違ってませんか?

$idには何がセットされているのでしょうか?それがわからないと間違っているかどうか判断出来ません。

#$_GET['id']は$getidという変数にセットしているようですが、これとは別のものなんですよね?


(追記)
延々ともって回るのであれば、セッション変数($_SESSION)を使うことも考えてみた方がいいかもしれません。

この意見に回答する

ツリーへ TOPへ

A01-1
replyersming [4月27日 11:23]

お世話になっております。
回答いただいたmethodを以下のようにGETに変えてみました。

$sbjが件名になるわけですが、問い合わせフォームでGETしたIDを$sbjに加えるようにしたいのです。

http://www.ドメイン/mail/index.php?id=123456

みたいにURLに任意のidをつけてそのid=123456を確認画面→送信完了までひっぱり
送信されたメールの件名にもidを付けたいわけです。

送信フォームで送信する相手のファイルにIDをGETさせたいのですが
"hidden"ではどのようにすればいいのでしょうか?

mail/index.php
  1. <?php
  2. include("../x_style.php");
  3. ?>
  4.  
  5. <HTML>
  6. <HEAD>
  7. <?=$meta?>
  8.  
  9. <?php
  10. if($UA == "PC") {
  11. }
  12. if($UA == "mobile") {
  13. }
  14. if($UA == "iPhone") {
  15. }
  16. ?>
  17.  
  18. <TITLE>メールフォーム</TITLE>
  19. </HEAD>
  20.  
  21. <?= $style["BODY"] ?>
  22. <?= $style["TABLE_S"] ?>
  23. <BR>
  24.  
  25. <FORM method="GET" action="sendmail.php">
  26. <?php
  27. if(get_magic_quotes_gpc()) {
  28.   $name = stripslashes($_GET["お名前"]);
  29.   $honbun = stripslashes($_GET["本文"]);
  30. }
  31. else {
  32.   $name = $_GET["お名前"];
  33.   $honbun = stripslashes($_GET["本文"]);
  34. }
  35. ?>
  36. <center>問い合わせフォーム</center>
  37. <?= $style["HR"] ?>
  38.  
  39. <center>
  40. <font size=3 color=#ff8080><b>*</b></font><font size=2 color=#000000><b>は全て必須です。</b></font>
  41. </center>
  42. <?= $style["HR"] ?>
  43.  
  44. お名前:<font size=3 color=#ff8080><b>*</b></font><BR>
  45. <INPUT size="20" type="text" name="お名前" value="<?=$name?>"><BR><BR>
  46.  
  47. Email:<font size=3 color=#ff8080><b>*</b></font><BR>
  48.  
  49. <INPUT size="20" type="text" name="Email" istyle="3" value="<?=$_GET["Email"]?>"><BR>
  50. <font size=1 color=#0080c0><b>※ご記入漏れ・記載ミスがございますと、返信できませんのでご注意ください。</b></font><BR><BR>
  51.  
  52. 本文:<font size=3 color=#ff8080><b>*</b></font><BR>
  53. <textarea cols="30" rows="5" name="本文"><?=$honbun?></textarea><BR><BR>
  54.  
  55. <INPUT type="submit" value="送信する"><BR><BR></FORM>
  56.  
  57. [1]<a href=../index.php accesskey=1>戻る</a>
  58. <?= $style["HR"] ?>
  59. <?= $style["FOOT"] ?>
  60. <?= $style["TABLE_E"] ?>
  61. </BODY>
  62. </HTML>

meil/sendmail.php
  1. <?php
  2. header("Content-Type:text/html;charset=Shift_JIS");
  3.  
  4. include("../x_style.php");
  5.  
  6. ?>
  7.  
  8. <?php
  9. $UIM = $_SERVER["HTTP_USER_AGENT"];
  10.  
  11. if( strstr($UIM"UP.Browser")!="") {
  12.   $SN = $_SERVER["HTTP_X_UP_SUBNO"];
  13. }
  14.  
  15.  
  16. // このファイルの名前
  17. $script ="sendmail.php";
  18.  
  19. //設定ファイルの読み込み
  20. include("./x_settei.php");
  21.  
  22.  
  23. $sendm = 0;
  24. foreach($_GET as $key=>$var) {
  25.   if($var == "e_submit") $sendm = 1;
  26. }
  27.  
  28.  
  29.  
  30. // 必須入力を設定している場合
  31. if($hissu == 1) {
  32. include("textcheck.php");
  33.  
  34. if($flag == 1){
  35.   htmlHeader();
  36.  
  37.  
  38. //++++++++++++++++++++ 未入力エラー表示 +++++++++++++++++++++++++++
  39.  
  40. echo $error_head;
  41. echo $error_body;
  42.  
  43. echo $errm
  44. echo "<BR>";
  45.  
  46. //データを戻す
  47. include("return.php");
  48.  
  49.  
  50.  
  51.     htmlFooter();
  52.     exit();
  53.   }
  54. }
  55.  
  56.  
  57. //++++++++++++++++++++ ①送信メール ++++++++++++++++++++++++++++++
  58.  
  59. $body = $body_head;
  60. $body.= $div_mark;
  61.  
  62. foreach($_GET as $key=>$var) {
  63.  
  64.   if(get_magic_quotes_gpc()) {
  65.   $var = stripslashes($var);
  66.   }
  67.   if($var == "e_submit") ;
  68.   else $body.="[".$key."".$var."\n";
  69. }
  70.  
  71. $body.="\n";
  72. $body.= $div_mark;
  73.  
  74. $body.="送信日時:".date( "Y/m/d (D) H:i:s"time() )."\n";
  75. $body.="REMOTE ADDR:".getHostByAddr(getenv('REMOTE_ADDR'))."\n";
  76. $body.="USER AGENT:".$UIM."\n";
  77. if( strstr($UIM"UP.Browser")!="") {
  78. $body.="S ID:".$SN."\n";
  79. }
  80.  
  81. //--- end ---
  82.  
  83.  
  84.  
  85. //+++++++++++++++++ ②自動返信メール +++++++++++++++++++++++++++++
  86.  
  87. if($remail == 1) {
  88.  
  89. $rebody = $rebody_head;
  90.  
  91. if($hikae == 1) {
  92.   foreach($_GET as $key=>$var) {
  93.  
  94.     //magic_quotes_gpcがONの場合
  95.     if(get_magic_quotes_gpc()) {
  96.       $var = stripslashes($var);
  97.     }
  98.   if($var == "e_submit") ;
  99.   else $rebody.="".$key."".$var;
  100.     if($key == "お名前") {
  101.       $rebody.= " 様\n";
  102.       }
  103.     else {
  104.       $rebody.="\n";
  105.       }
  106.   }
  107. }
  108.  
  109. $rebody.="\n";
  110. $rebody.= $div_mark;
  111. $rebody.= $rebody_foot;
  112.  
  113. $rebody.="送信日時:".gmdate("Y/m/d(D) H:i:s"time()+9*3600)."\n";
  114. $reto = $_GET['Email'];
  115. $rebody=mb_convert_encoding($rebody,"JIS","SHIFT_JIS");
  116. $resbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($resbj,"JIS","SHIFT_JIS"))."?=";
  117. $reheader="From: $to\nReply-To: ".$to."\nReturn-Path: ".$to."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();
  118.  
  119. //--- end ---
  120.  
  121. }
  122.  
  123. $body=mb_convert_encoding($body,"JIS","SHIFT_JIS");
  124. $sbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($sbj,"JIS","SHIFT_JIS"))."?=";
  125.  
  126. //送信者のメールアドレスを差出人とする
  127.  
  128.   $from = $_GET['Email'];
  129.   $header="From: $from\nReply-To: ".$_GET['Email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();
  130.  
  131.  
  132.  
  133. if($mailpv == 0 || $sendm == 1) {
  134.   mail($to,$sbj,$body,$header);
  135.  
  136.   // 差出人に送信内容確認メールを送る
  137.   if($remail == 1) {
  138.   mail($reto,$resbj,$rebody,$reheader);
  139.   }
  140. }
  141.  
  142. else {
  143. htmlHeader();
  144.  
  145.  
  146.  
  147. //++++++++++++++++++ 送信確認画面 +++++++++++++++++++++++++++++
  148. echo $send_pv;
  149. ?>
  150.  
  151. <FORM action="<?=$script?>" method="GET">
  152. <? echo $err_message?>
  153.  
  154. <?php
  155. foreach($_GET as $key=>$var) {
  156.  
  157.   //magic_quotes_gpcがONの場合
  158.   if(get_magic_quotes_gpc()) {
  159.     $var = stripslashes($var);
  160.   }
  161.   //特殊文字をエスケープ
  162.   $var = htmlspecialchars($var);
  163.  
  164. echo "".$key."】 ".$var;
  165.   if($key == "お名前") {
  166.     echo " 様<BR>";
  167.     }
  168.   else {
  169.     echo "<BR>";
  170.     }
  171.  
  172.  
  173. ?>
  174.  
  175. <INPUT type="hidden" name="<?=$key?>" value="<?=$var?>">
  176. <?php
  177. }
  178. ?>
  179.  
  180. <BR>
  181.  
  182. <INPUT type="hidden" name="e_set" value="e_submit">
  183. <INPUT type="submit" value="送信する">
  184. </FORM>
  185.  
  186. <?php
  187. //データを戻す
  188. include("return.php");
  189.  
  190. //echo "<BR>REMOTE ADDR:".getHostByAddr(getenv('REMOTE_ADDR'))."<BR>";
  191.  
  192. //if( strstr($UIM, "UP.Browser")!="") {
  193. //echo $SN."<BR>";
  194. //}
  195. //else {
  196. //echo $UIM."<BR>";
  197. //}
  198.  
  199.  
  200.  
  201. htmlFooter();
  202. }
  203. if(($jpage == 0 && $sendm == 1) || ($jpage == 0 && ($mailpv == 0 && $sendm == 0)))
  204. {
  205. htmlHeader();
  206.  
  207.  
  208. //+++++++++++++++++++++ 送信終了画面 +++++++++++++++++++++++++++++
  209.  
  210. echo $end_head;
  211. echo $end_body;
  212.  
  213.  
  214.  
  215. htmlFooter();
  216. }
  217. else if(($jpage == 1 && $sendm == 1) || $mailpv == 0)
  218. { 
  219. header("Location: ".$next)
  220. } 
  221.  
  222.  
  223. //++++++++++++++++++++ ページのヘッダー +++++++++++++++++++++++++++
  224. function htmlHeader() {
  225.  
  226. include("./v_rel.php");
  227. include($v_rel."x_style.php");
  228. ?>
  229. <HTML><HEAD><?=$meta?><TITLE>送信フォーム</TITLE>
  230. </HEAD>
  231. <?php
  232. echo $style["BODY"];
  233. echo $style["TABLE_S"];
  234. }
  235.  
  236. //++++++++++++++++++++ ページのフッター +++++++++++++++++++++++++++
  237. function htmlFooter() {
  238.  
  239. include("./v_rel.php");
  240. include($v_rel."x_style.php");
  241. ?>
  242. [1]<a href=../index.php accesskey=1>戻る</a>
  243. <?php
  244. echo $style["HR"];
  245. echo $style["FOOT"];
  246. echo $style["TABLE_E"];
  247. ?>
  248. </BODY></HTML>
  249.  
  250. <?php
  251. }
  252.  
  253. ?>

mail/x_settei.php
  1. <?php
  2. if(get_magic_quotes_gpc()) {
  3.   $name = stripslashes($_GET["お名前"]);
  4.   
  5. }
  6. else {
  7.   $name = $_GET["お名前"];
  8. }
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15. ///////////////////////////////////////////////////////////////////////
  16. //
  17. //              以下でほとんどの設定を行います
  18. //
  19. ///////////////////////////////////////////////////////////////////////
  20.  
  21.  
  22.  
  23. //++++++++++++++++++++ 送信先メールアドレス ++++++++++++++++++++++
  24. // 複数指定する場合は , (カンマ)で区切る
  25.  
  26. $to = "******@yahoo.co.jp";
  27.  
  28. //++++++++++++++++++++ ブラックリスト ++++++++++++++++++++++++++++++
  29. // ブラックリストの使用 (する=1, しない=0)
  30.  
  31. $blacklist = 1;
  32.  
  33. //チェック対象
  34. $check = $_GET["Email"];
  35.  
  36. //リストの場所
  37. $rel = "../";
  38. //ファイル名
  39. $blackfile = $rel."yblacklist.txt";
  40. //転送先
  41. $jump_error = $rel."error.php";
  42.  
  43. //++++++++++++++++++++ ①送信メール ++++++++++++++++++++++++++++++
  44.  
  45. // タイトル 見出しにはstripslashesが必要
  46. $sbj = " (".$name.$id.") 様 お問い合わせの件";
  47.  
  48. // メールのヘッダ
  49. $body_head ="".$sbj."」からの発信です\n\n";
  50.  
  51. $div_mark = "-------------------\n\n";
  52.  
  53. //++++++++++++++++++ 送信確認画面 +++++++++++++++++++++++++++++
  54.  
  55. // 送信確認画面の表示(する=1, しない=0)
  56. $mailpv = 1;
  57.  
  58. // 送信後に自動的にジャンプする(する=1, しない=0)
  59. // 0にすると、送信終了画面が表示されます。
  60. $jpage = 0;
  61.  
  62. // 送信後にジャンプするページ(送信後にジャンプする場合)
  63. $next = "http://○○○○";
  64.  
  65. //送信確認画面のヘッダー(改行は\nで)
  66. $send_pv = "<center>送信内容の確認</center>".$style["HR"]."以下の内容をご確認のうえ、送信ボタンを押してください<BR><BR>";
  67.  
  68.  
  69.  
  70. //+++++++++++++++++ ②自動返信メール +++++++++++++++++++++++++++++
  71.  
  72. // 差出人に自動返信メールを送る(送る=1, 送らない=0)
  73.  
  74. $remail = 1;
  75. $hikae = 1;
  76.  
  77. // メールのタイトル
  78. $resbj = "受付完了しました";
  79.  
  80. //メールのヘッダー (改行は\nで調整 "文字列\n"; とすること)
  81. $rebody_head = "このメールは自動送信されたものです。\n";
  82. $rebody_head .= "心当りがない場合は、破棄してください。\n";
  83. $rebody_head .= "お問い合わせの内容は敏速に対応させていただきます。\n";
  84. $rebody_head .= "今しばらくお待ちください。\n";
  85. $rebody_head .= "今後とも、よろしくお願いいたします。\n";
  86.  
  87. //メールのフッター(改行は\nで)
  88. $rebody_foot = "∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞\n";
  89.  
  90. $rebody_foot .= "会社名\n";
  91.  
  92. $rebody_foot .= "住所\n";
  93.  
  94. $rebody_foot .= "H.P.: http://www.";
  95.  
  96. $rebody_foot .= "\n";
  97.  
  98. $rebody_foot .= "E-Mail: "$to."\n";
  99.  
  100. $rebody_foot .= "∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞\n\n";
  101.  
  102. //← $toへは最初の方で設定したアドレスが引用されます
  103.  
  104. // 2行目以降は .= となっていることに注目して下さい。
  105. // この要領さえ守れば何行でも追加できます。
  106. // .= では無く = にするとその行の内容に全てが置き換えられるので注意
  107.  
  108.  
  109. //+++++++++++++++++ 必須入力項目 +++++++++++++++++++++++++++++
  110.  
  111. // 必須入力項目を設定する(する=1, しない=0)
  112. $hissu = 1;
  113.  
  114. // 必須入力項目(入力フォームで指定したname)
  115. $req_sub = array('お名前','Email','本文');
  116.  
  117.  
  118. //++++++++++++++++++++ 未入力エラー表示 +++++++++++++++++++++++++++
  119.  
  120. //エラー表示画面のヘッダ
  121. $error_head = "<center>入力エラー</center>".$style["HR"];
  122.  
  123. $error_body = "以下の項目に入力漏れがあります<BR><BR>";
  124.  
  125.  
  126. //++++++++++++++++++++ 送信終了画面(ジャンプさせない場合)++++++++++
  127.  
  128. $end_head ="<center>送信完了</center>".$style["HR"];
  129.  
  130. $end_body = $name." 様<BR><BR>
  131.  
  132. 登録を受け付けました。<BR><BR>
  133.  
  134. メールが自動送信されましたので<BR><BR>
  135.  
  136. ご確認ください。<BR><BR>";
  137.  
  138.  
  139. //+++++++++++++++++++ ヘッダー及びフッター ++++++++++++++++++++++++++
  140.  
  141. // sendmail.php の最下段で設定
  142.  
  143. ?>

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [4月27日 11:53] (最終編集:4月27日 12:01)

>URLに任意のidをつけてそのid=123456を確認画面→送信完了までひっぱり

ごく単純に(セキュリティ上必須の値チェックとかを省いて)書けば

$getid = $_GET['id'];

で取り出しておいて、form要素の中に

<input type="hidden" name="id" value="<?=$getid ?>">

を追加するだけでいいんじゃないでしょうか。あとは$sbjを組み立てるときに$getidを含ませればよろしいかと。


別解として、NurseAngelさんが書かれているようにmethodはPOSTのままで

<form action="hoge.php<?=$afid ?>" method="post">

として、受け取り側で$_REQUEST($_GET,$_POSTともにセットされる)で処理するというのもいいと思います。


(蛇足)
input要素のname属性が「日本語」ってどうなんでしょうね・・。get_magic_quotes_gpc()をチェックしているということはmagic_quotes_gpcがONの環境を考慮していると思うのですが、文字によってはname属性の値($_GETのindex)自体がquoteされる可能性があります。私なら(余計な神経を使いたくないので)name属性に日本語は使いませんね。


(さらに蛇足)
NurseAngelさんも書かれていますが(私も前のレスで書きました)セッション変数を使った方が、格段に楽じゃないかと思います。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyersming [5月2日 09:18]

お世話になります。

<input type="hidden" name="id" value="<?=$getid ?>">

このように隠し項目でmail/sendmail.phpへPOSTされたものをGETで返すのではなく

POST要素を混ぜずに

?id=******をファイルの一部と考えて

GETのみで渡すことはどうすればいいのでしょうか?


shimixさんやNurseAngelさんのいわれる
<form action="hoge.php<?=$afid ?>" method="post">
やセッション変数はまだ知らないのですが、きっとこれから学習すると思います。
現在、未完成のファイルを元にPHPをeラーニングで学んでいるところです。

よろしくお願いします。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1
replyershimix [5月5日 11:48]

そもそも

>送信フォームだとどうすればいいのかわかりません。

ということではなかったのでしょうか?

>POST要素を混ぜずに
>?id=******をファイルの一部と考えて
>GETのみで渡すことはどうすればいいのでしょうか?

フォームを混ぜずにGETのみであれば、anchor要素で渡せばいいと思います(この手法については最初にご自分で書かれていますよね)。formを使う意味はありません。下記のようなスクリプトで試せばわかりますが、method=POSTであればactionにQueryStringで付加した値をGETで受け取れますが、method=GETにすると受け取れなくなります(input type="hidden"で書くしかなくなります)。なのでformをPOST、idをGET(QueryString)にした方が扱いやすいと思います。

  1. <?php
  2. if ($_GET) {
  3.     print "GET /";
  4.     print_r($_GET);
  5.     print '<hr>';
  6. }
  7. if ($_POST) {
  8.     print "POST /";
  9.     print_r($_POST);
  10.     print '<hr>';
  11. }
  12. if ($_REQUEST) {
  13.     print "REQUEST /";
  14.     print_r($_REQUEST);
  15.     print '<hr>';
  16. }
  17. ?>
  18. <form action="?id=123" method="post">
  19. <input type="text" name="posttext" value="abcdef">
  20. <input type="submit" value="POST DATA">
  21. </form>
  22. <form action="?id=123" method="get">
  23. <input type="text" name="gettext" value="abcdef">
  24. <input type="submit" value="GET DATA">
  25. </form>

この意見に回答する

ツリーへ TOPへ

A02 満足
answererNurseAngel [4月24日 16:48] (最終編集:4月24日 16:50)

XSS脆弱性が存在します。

×$afid = "?id=".$getid;
△$afid = "?id=".htmlspecialchars($getid);
○$afid = "?id=".htmlspecialchars($getid, ENT_QUOTES, 'UTF-8');


・普通にGETで渡す
<form action="hoge.php<?=$afid ?>">

・$_REQUESTで受け取る
  1. <a href="hoge.php<?=$afid ?>">
  2. <input type="hidden" name="id" value="<?=htmlspecialchars($getidENT_QUOTES'UTF-8') ?>">

どちらを使っても$_REQUEST['id']で受け取れる

・セッションを使う
$_SESSION['id']あたりに値を入れておけば余計なことを考える必要一切無し

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)