• 締切済み

XSS対策でサニタイジングされたデータの格納

お世話になります。 WEBアプリケーションでの値の受け渡しについて質問させて頂きます。 前提条件としてjavascript・session・cookieは使えない場合について 入力画面 → 確認画面 → 完了画面 上のように画面遷移する一般的なシステムにおいて 入力画面では「name」というテキストの入力エリアが一つだけあるとした場合に 確認画面では入力された「name」を表示します。 このとき、nameはサニタイジングされた文字を表示し 確認画面→完了画面時にデータベースへデータを追加するために hiddenでnameを持っているとします この場合 <input type="hidden" name="name" value="name"> になると思いますが、このvalueにもサニタイジングされたnameのデータを入れた場合 データベースに追加される値は、入力画面でオペレータが入力した値を変わる可能性があります 入力された値をそのままデータベースに格納する場合には 格納直前はサニタイジングの逆を行うべきなのでしょうか? それともサニタイジングされたデータを格納すべきでしょうか? この話は仕様レベルの話になるかもしれないのですが宜しくお願いいたします

  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

  • tsukachan
  • ベストアンサー率42% (202/470)
回答No.1

サニタイジングのタイミングについては私も以前謝った認識でいましたが HTML生成時と言うのが一番良い様です。 データベースにはそのまま格納し、入力時の確認画面およびデータベースから取り出した値の表示画面のHTML生成時にサニタイジングしましょう。 ここに具体的な説明があります http://www.ipa.go.jp/security/awareness/vendor/programming/a01_02.html

can5974
質問者

お礼

お世話になります。 サニタイジングのタイミングはHTML生成時というのは確認しているのですが、 確認画面をはさむ場合に、サニタイジングされたデータがhiddenのvalueに入ってしまうことが 問題じゃないかなと疑問に思っていたので質問させていただきました sessionが使えない場合はみなさんどうしているのでしょうか?

関連するQ&A

  • データコンボについて

    VB6でMySQL4に接続して データベースにデータを格納するため 入力フォームを作っているんですが、 データコンボに手入力で入力した値datacombo1.SelectedText と データコンボに連結されて、表示しているフィールド DataCombo1.ListField = "name" を比べて、ListField内の値と手入力した値が 一致した場合、 その一致したレコードの DataCombo1.BoundColumn = "ID" の値をかえしたいんですが、どうしたらいいですか? データコンボに表示されるフィールドの 数が多いので直接データコンボに手入力をした方が データコンボ内の多い数のフィールドから 目的の値を選ぶより 手間がいらない時があるので・・。 データコンボと連結しているテーブルのフィールドは ID name です。 データコンボにはnameを表示させて、 データベースにはデータコンボで選んだnameの レコードのIDを格納します。

  • ファイル間のデータの受け渡しについて hidden? session?

    1.php (フォームを表示) 2.php (入力内容の確認ページ) 3.php (最後のページ、送られた値を使用し、メール送信やデータベースに書き込むなどの処理をしたい。) とhiddenを使い、3つのファイルを作成しました。 ファイル"1.php" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title></title> </head> <body> <form action="2.php" method="post"> <input type="text" name="data1" value="データその1"> <input type="hidden" name="data2" value="隠しデータ"> <input type="submit" name="" value="送信"> </form> </body> </html> ファイル"2.php" <?php echo "<h1>確認ページ</h1>"; echo $_POST[data1]."<BR>"; echo $_POST[data2]; print<<<_HOGE_ <form action="3.php" method="post"> <input type="hidden" name="data1" value="$_POST[data1]"> <input type="hidden" name="data2" value="$_POST[data2]"> <input type="submit" name="" value="送信"> </form> _HOGE_; ?> ファイル"3.php" <?php echo $_POST[data1]."<BR>"; echo $_POST[data2]; ?> 2.phpの(入力内容の確認ページ)を見ているときに、他の人が2.phpにアクセスして入力内容を盗み見る事は出来るのでしょうか? (2.phpに直接アクセス出来ないように、リダイレクト処理はするつもりですが。) 2.phpから3.phpに値を渡す場合、このようなhiddenの使い方は間違っていますか? セッションを使った方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • ショッピングカートで$_SESSIONへデータを格納する方法

    $syohin_code = $_POST['syohin_code']; $syohin_name = $_POST['syohin_name']; $sale_price = $_POST['sale_price']; $kazu = $_POST['kazu']; $_SESSION['cart']['$syohin_code'] = array ("syohin_code" => $syohin_code , "syohin_name" => $syohin_name, "sale_price" => $sale_price , "kazu" => $kazu ); foreach ($_SESSION['cart']['$syohin_code'] as $key => $value){ echo $key . $value;} データベースより一覧表示した商品を「カートに入れる」ボタンを使いPOSTした値を上記のcart.phpへ飛ばし、配列としてセッション変数に格納しました。ひとつの値は上記より取得できるのですが、複数の商品を格納する方法がどうしても分かりません。それともどこかに保存されているのでしょうか? この取得したデータを元に、購入商品全てを一覧表示させたいのですが、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • サニタイジングについて

    今、JSPでサニタイジングを行うプログラムを作成しています。 ただ、JSPではなくJAVAで作りJSPに接続しようとしていますが、 一様、JSPで入力したデータをサーブレットで生成したHTMLに表示は できたのですが、HTMLを生成するのではなくJSPとJSPの間に入る フィルターとして扱いたいのですが、いまだによく分からないのです。 そこで、少し聞きたいのですが、どのようにしたらいいのか 教えてもらえませんか?プログラムはサイトで探してきたのを改造して 使っていますが、まだ、JSP、JAVAの知識が浅くよく分かりません。 教えてもらえるならさいわいです。

  • MySQLのBIT型列へのデータ格納について

    現在、ユーザー登録処理の設計を行っております。 ユーザー登録情報に、「趣味」という項目があるのですが、 20個の種類が有ります。 私が想定しているのは、ユーザーテーブルに 20byte程の「趣味」列を作り、 ブラウザ側でチェックをした種類の値を見て、 その値のbyte目に"1"が立ち、それ以外は "0"が立つという処理です。 (例) <input type="checkbox" name="hobby" value="1"> <input type="checkbox" name="hobby" value="2"> <input type="checkbox" name="hobby" value="3"> ・ ・ ・ <input type="checkbox" name="hobby" value="20"> ↓(1番目、3番目、20番目にチェックが入った場合) 10100000000000000001 が、「趣味」列に入る この作りをした際、値を格納するテーブルの列には、 「byteではなく、bitを使用した方がよい」という有り難いアドバイスを 頂いたのですが、実際にMySQLにBIT列を設けて、どのようにPHPから データを格納すればよいか分かりませんでした(涙)。 どなたか、お教えいただけませんでしょうか。お願い致します。

    • 締切済み
    • PHP
  • ファイルのデータがなくなってしまします・・・

    perl/CGIプログラミングの勉強中の者です。 フォーム記入(日付選択、本文の記入、ファイル選択)後、確認画面において、上記をベタ書きにて表示し(ファイルはパスの表示)、CSVへの書き込み、指定フォルダへのファイルのアップロードをするプログラムを作っています。 ファイルのアップロードに関してなのですが、 <input type=file name=fileup> でsubmitした後、 確認画面で$FILEに格納して一旦パスを表示、 それを再び <input type=hidden name=fileup value=$FILE> でsubmitして、 フォルダへアップロードし、一覧画面へと戻るという手順で組んでいます。 しかし、ファイル名、拡張子などは正しくアップロードされているのですが、肝心の中身のデータが0バイトになってしまいます。 自分では確認画面からsubmitする時にhiddenに入れているのがいけないのかなぁ。と思っているのですが… 何か良い対処法、また他に良い手順があれば教えてください。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • これはXSS?

    名前やEmailアドレスを入力してもらう機能を作ったのですが(PHP使用・ローカル環境)、入力チェックとして確認ページを表示させた際、入力データ(value変数?)にHTML文が入っているとそのまま反映されてしまいます。 (h1としたら大きな入力された名前が表示される) これは脆弱性に繋がりますでしょうか。またこれがXSSの場合どんな被害が発生しますか? HTML・PHP素人なので対策方法など教えて頂けると幸いです。 ご教授の方、よろしくお願い致します。

  • 配列の値の引渡し

    目的: 配列の値をフォームによりCSVに書き込みたい。 1.php 値入力 2.php 確認画面 for($i = 0;$i < count(@$_POST["q1"]); $i++){ echo "<p>" .$_POST["q1"][$i]; } として、1.phpで入力された値を表示 また、 <input type="hidden" name="q1[]" value="<? echo $q1[$i] ?>"> として、3.phpに値を引き渡すことをしているのですがうまくいきません。 3.php 完了画面 CSVに書き込み処理 アドバイスよろしくお願いします。

    • 締切済み
    • PHP
  • フォームから入力されたデータをアクセスに格納できる?

    htmlのフォームから入力されたデータをアクセスに格納することはできるでしょうか? それらのデータでデータベースを作りたいのですが。 よろしくお願いします。

  • mailで送信する場合の行改

    もともとテキストエリアのデーター($biko)を一度確認画面に表示させて 確認画面から <input type="hidden" name="biko" value=<? echo $biko; ?>> でデータを受け取り、それを、mailで送信する場合、行改したところから 文章がmailにありませんでした。全文をメールに載せるにはどうしたらいいのでしょうか? 出来れば改行位置も入力したとおりにしたいです。

    • 締切済み
    • PHP

専門家に質問してみよう