• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:inputタグに入力された数値を安全にするには?)

inputタグに入力された数値を安全にするには?

H240S18B73の回答

回答No.20

JSのみによってXSSが成立しうるのは location.searchを使うなどしてURLパラメータから情報を取得し evalに渡していたり、そのまま出力に使っていたりする場合です 現状のURLパラメータから値を取得することはせず input要素から直接値を取得している仕様では XSSの心配をする必要はあまりありません ただ、先のスレで言っていたような、PHPなどによって 前回の入力を記憶しておくというような機能を追加しようとした場合は サーバーにURLパラメータを通して値を渡して記憶させておくなり することになるのでそのままevalを使うような形でやると XSSの脆弱性を生むことになる、ということです つまり、今はそれでも問題ないけど、 これからやろうとしてることはそのやり方のままじゃまずいよ ってことです

okweb12345
質問者

お礼

evalを使った自由に計算できる部分のみをコメントアウトしました。 これで大丈夫なのでしょうか? その他type="number"に数値のみ入れて計算する部分と、 ただの文字列を入れる部分は残っていますがここはevalを使っていないのと、alert()を入れても何の反応もなかったので大丈夫と考えてよいでしょうか? 一点気になったのは新しいテキスト ドキュメント.htm というHTMLファイルがサーバ上にあったことです。 恐らくPHP工房のファイルが文字化けしたのだと思いますがちょっと気持ち悪いので下記にソースを張り付けておきました。 もし改ざんされている場合は見覚えのないソースが追加されていると考えてよいでしょうか? ソースを隠すことはクラッカーでも不可能ですよね? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title><?php echo $confirmTitle;?></title> <style type="text/css"> /* 自由に編集下さい */ #formWrap { width:700px; margin:0 auto; color:#555; line-height:120%; font-size:90%; } table.formTable{ width:100%; margin:0 auto; border-collapse:collapse; } table.formTable td,table.formTable th{ border:1px solid #ccc; padding:10px; } table.formTable th{ width:30%; font-weight:normal; background:#efefef; text-align:left; } p.error_messe{ margin:5px 0; color:red; } </style> </head> <body> <!-- ▲ Headerやその他コンテンツなど ※自由に編集可 ▲--> <!-- ▼************ 送信内容表示部 ※編集は自己責任で ************ ▼--> <div id="formWrap"> <?php if($empty_flag == 1){ ?> <div align="center"> <h4><?php echo $requireCheckMesse;?></h4> <?php echo $errm; ?><br /><br /><input type="button" value=" <?php echo $returnBtnMesse;?> " onClick="history.back()"> </div> <?php }else{ ?> <h3><?php echo $confirmTitle;?></h3> <p align="center"><?php echo $confirmMesse;?></p> <form action="<?php echo h($_SERVER['SCRIPT_NAME']); ?>" method="POST"> <table class="formTable"> <?php echo confirmOutput($_POST);//入力内容を表示?> </table> <p align="center"><input type="hidden" name="mail_set" value="confirm_submit"> <input type="hidden" name="httpReferer" value="<?php echo h($_SERVER['HTTP_REFERER']);?>"> <input type="submit" value=" <?php echo $submitBtnMesse;?> "> <input type="button" value="<?php echo $returnBtnMesse;?>" onClick="history.back()"></p> </form> <?php copyright();} ?> </div><!-- /formWrap --> <!-- ▲ *********** 送信内容確認部 ※編集は自己責任で ************ ▲--> <!-- ▼ Footerその他コンテンツなど ※編集可 ▼--> </body> </html> <?php /* ▲▲▲送信確認画面のレイアウト ※オリジナルのデザインも適用可能▲▲▲ */ } if(($jumpPage == 0 && $sendmail == 1) || ($jumpPage == 0 && ($confirmDsp == 0 && $sendmail == 0))) { /* ▼▼▼送信完了画面のレイアウト 編集可 ※送信完了後に指定のページに移動しない場合のみ表示▼▼▼ */ ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>完了画面</title> </head> <body> <div align="center"> <?php if($empty_flag == 1){ ?> <h4><?php echo $requireCheckMesse;?></h4> <div style="color:red"><?php echo $errm; ?></div> <br /><br /><input type="button" value=" <?php echo $returnBtnMesse;?> " onClick="history.back()"> </div> </body> </html> <?php }else{ ?> 送信ありがとうございました。<br /> 送信は正常に完了しました。<br /><br /> <a href="<?php echo $site_top ;?>">トップページへ戻る&raquo;</a> </div> <?php copyright(); ?> <!-- CV率を計測する場合ここにAnalyticsコードを貼り付け --> </body> </html>

okweb12345
質問者

補足

今はコメントアウトしていますが、問題が起きないように変換してから公開したいです。 function escapeHtml(str) { str = str.replace(/&/g, '&amp;'); str = str.replace(/</g, '&lt;'); str = str.replace(/>/g, '&gt;'); str = str.replace(/"/g, '&quot;'); str = str.replace(/'/g, '''); return str; } このようにエスケープしておけば大丈夫ですか? これを自由に計算ができるソースの前で実行すればよいのでしょうか ただこれだと無限にあるのでできればこの文字記号だけ許可するとしたいです 前回途中まで教えていただきましたが、上記のようにもう少し具体的なソースで教えていただければ幸いです。 何度も大変恐縮ですがどうぞよろしくお願い致します。 その後alert()を入れてもアラートが出てこなければセキュアと判断すれば良いのですね。 その他のinputにも入れてみましたが他ではalert()は実行されませんでした。 よって他はinnerHTMLを使っていても問題ないのですね。

関連するQ&A

  • 数値入力チェックに、isNaNを使用しない理由

    JavaScriptの数値入力チェックに、isNaNを使用しない理由があれば、ご教授願います。 経緯は以下のとおりです。 数値項目に、"1-1","1-1-"等、数値とみなされない入力をされるとエラーになるという不具合が発生しています。 ソースの該当箇所を見たところ以下のようになっていました。 //if(isNaN(getInputValue(elem_name))){ if((getInputValue(elem_name)).match(/[^\-\.0-9]/g)){ わざわざisNaNをコメントして、"-",".",1~9 の入力のみを可能にしています。 修正した担当者は既にいないため、聞くことは出来ません。 対象ブラウザは、IE6, IE5.5, NN6.2 であるため、isNaNが使用できないことはありません。 isNaNの不具合か何かがあるのでしょうか? # 0x10:16進が通っちゃうとか(通りませんでした) # 2^2:指数表示が通っちゃうとか(通りませんでした)

  • サイトのソースに、あるjavascriptタグ

    過去の作業者がいれたものと思うのですが、ソース内に、 <script src="http://cis.a.swcs.jp/1/j/" type="text/javascript"></script> というタグが入っているのですがこれは何を意味するものなのでしょうか。 なんとなく解析ツールのように思うのですが、もし詳しい方がいらっしゃいましたらご教示いただけますと幸いです。 どうぞよろしくお願いいたします。

  • HTML、CSSについての質問

    こんにちは。 自分でサイトを構築しているのですが、 HTMLとCSSで分からないところがあります。 具体的に示した方がわかりやすいので、以下のURLをご参照ください。 http://crossend.jp/modules/cs/search.php?cid=1&aid=1 検索結果一覧の中のオレンジの太枠で囲まれている部分がありますが、 太枠の右端の線が2つの部分で欠けて表示されています。 一方以下のURLの画面では、オレンジの太枠がきれいにつながっております。 http://crossend.jp/modules/cs/store.php?sid=21 どちらも同じソースを利用しているつもりなのですが、 最初の方がうまく表示できない原因が分かりません。 ソースを見ていただく必要があるので大変だとは思いますが、 どなたかアドバイスをいただけると大変助かります。 なにとぞよろしくお願いいたします。

    • ベストアンサー
    • HTML
  • サイトが危険なサイトと判定されるかの調査方法

    特定のサイトURLを入力することで、該当サイトがウイルスセキュリティで危険なサイトと検知されてしまうかを事前に確認可能なサービスはありませんか? 例)https://global.sitesafety.trendmicro.com/?cc=jp ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

  • 入力したパスをそのままジャンプ先アドレスにするには?

    質問内容はそのままタイトルのとおりなのですが、 入力したパスをそのままジャンプ先アドレスにするJavaScript(Javaに限るわけではありません)があったと思うのですが、どうも思い出せず、検索しても見つけられません。 例えば、「http://www.★★★.jp/」というページ上にパスワード入力フォームを設置したとき、 フォームに文字を入力し、認証ボタンを押します。 そしたら、入力した文字がそのままジャンプ先アドレスになるようにしたいのです。 「aiueo」と入力したら、ジャンプ先は「http://www.★★★.jp/aiueo.html」といった感じです。 解説付きのサイトを探しています。参照先アドレスか、ソースをそのまま書いてくださってもOKですので、宜しくお願いします。

  • 入力がおかしくなります

    パソコンを起動してしばらく使っていると入力がおかしくなります。 再起動すると直るのですが、時間が経つと元通りです。 具体的には ・アイコンをダブルクリックするとプロパティが開く ・文字入力を受け付けなくなる ・インターネット閲覧時リンクをクリックするとそのページが保存される ・キーを押すとメニューが勝手に開く(ショートカットキーになっている?) ・さらにOrchisというランチャーを使っているのですが、起動中にも関わらず表示されなくなる など確認しているだけでもこれだけあります。 これはウイルスに感染しているのでしょうか。 対策ソフトはウイルスバスター Corp.クライアントというものをインストールしています。 環境は Sony VAIO VGN-FS91S Windows XP Mozila Firefox です。 非常に困っていますので、どなたか詳しい方お願いいたします。

  • スクロールしてもフッターが追いかけてくるようにしたいのですが

    うまく説明できないのですが、 http://www.facebooklicious.com/ 上記のサイトのように、最下部の白い枠の部分がスクロールしてもついてきます。 このようなことはJavascriptで実現できるのでしょうか? ソースを見てみたのですがちんぷんかんぷんでどれが該当部分かがわかりません。 詳しい方がいらっしゃいましたらお答えいただけると幸いです。

  • JavaScriptでのクリックやフォームについて

    いままでVBSで該当URLへとび、フォーム入力の自動化を行なっていたのですが、 JavaScriptでも似たようなことをしようと思い、 htmlファイルのscriptタグにて、location.hrefで該当URLへとび、 getElementByIdでID取得をしようと思ったのですが、なにも起こらずその後、解決策が見つからず困っています。 location.hrefでリンク先にとんだからといって、 そのページのソースコードを取得しているわけではないのでしょうか? そもそもVBSと同様に該当URLにとんで、フォームのIDなどを取得、フォーム入力という流れを Javascriptでも可能なのでしょうか? どうぞご回答のほどよろしくお願いいたします。

  • ハッキングする方法

    単純に言って、ハッキング(クラッキング)はどうやればいいのですか? いえ、私がしたいのではありません。防御のためです。 つまり、ハッキングとは、どうすることによって行うことが可能なのでしょうか? たとえば、ハッキングしたいパソコンを特殊ウイルスに感染させるとか、ハッキングしたいパソコンの「~~~」という情報を入手するとか、それを知りたいのです。 それが分かれば、たとえば、「特殊ウイルス」に感染していないかを調べることで、安心できますし、「~~~」という情報が漏れていないかを確認するなど、具体的に心配を打ち消せるのです。 今は、なんとなく「ハッキングされたら怖い」の状態ですから、手が打てません。 ハッキングは、あなたのパソコンが「~~~~~」な状態だとハッキングされますで言う時の「~~~~~」を教えてください。 再度になりますが、私がハッキングを行おうと言うのではありません。

  • インプットボックスに数値を入力するまで繰り返すためには、どのように書いたらよろしいでしょうか??

    宜しくお願い致します。 現在このように記述しています。 a = InputBox(prompt:="a数値を入力してください", title:="a数値") Do While a = "" Or IsNumeric(a) = False msgbox prompt:="数値を入力してください", title:="未入力" a = InputBox(prompt:="a数値を入力してください", title:="未入力") Loop このように記述するとループに入っているのでインプットボックスが表示されたときにキャンセルボタンを押しても脱出することができないので、他の方法でループかできるはずだと考えていますが、方法の検討がつきません。 どなたかその方法に関して御教授お願い致します。