• ベストアンサー

JavaScriptのクロスサイトスクリプティング

神崎 渉瑠(@taloo)の回答

  • ベストアンサー
回答No.2

文字列以外でも代入できるなら保証できません。 value = { toString: function(){ alert('hoge'); return '何らかの値'; } }; alert("valueは"+value+"です"); doucment.write("valueは"+value+"です"); str = "valueは"+value+"です"; .toString()の代わりに.prototype.valueOf()を使ってもいいかもしれません。 valueに代入できる物を文字列に限定するなら、 value = 'alert("hoge")'; eval() を使わずにスクリプトとして実行させる方法があったはずですが、 「alert("valueは"+value+"です");」 この書き方の方をごちゃごちゃさせなきゃ行けなかったはずなので、普通はセキュリティーホールにはならないと思います。

newtgecko
質問者

お礼

valueが文字列以外ならの場合は考えていませんでした。なるほどです。ご回答有難うございました。

関連するQ&A

  • Javascriptが特注文字解釈の対策

    Javascriptが特殊文字を先に解釈してしまい、うまく機能しなくなるだけでなく、XSS脆弱性にもなるので、対策を考えています。 いろいろ検索などしてみたのですが、あまり情報がなく、みなさんどうされているのかなと。 たとえば PHPから出力した変数 $value をJavascriptの引数に入れる場合 <img src="http://....." onclick="myfunc('{$value}')" /> こんな感じの場合 $value = "');alert('テスト"; とすると alertが実行されてしまいます。(これは当然ですが) そして $value = "');alert('テスト"; これでも同じく実行されてしまいます。 ' は ' の特殊文字で通常無効化のために変換しますが、Javascriptでは、この特殊文字も普通に解釈していくようです。 さらに $value = "');alert('テスト"; という風に最初に0をつけても、解釈されてしまいます。 やはり、javascriptの引数に入れる際に、こういったものは変換(\'などに)ではなく、削除してしまうのがベストということでしょうか。

  • javascript 値渡し?参照?

    javascriptの値渡しについて勉強中なのですが、質問です。 ----------------------------------------------------------------- function aaa(a,b){ var ttt = a ; a = b ; b = ttt ; } var a1 = 1 ; var a2 = 2 ; aaa (a1,a2) ; document.write(a1 ,a2); ------------------------------------------------------------------- 上記のようなコードで引数の値が交換できると思うのですが、正しくは出来ないようです。 1,0と出力されてしまいます。 どうしてなのでしょうか。 お聞きしたいのは、 ・この引数は値渡しなのか、参照なのか。 ・どうして出来ないのか詳しい理由。 よろしくお願いします。

  • javascriptのsplitでエラーが・・・

    valueの値をsplitを使って連想配列に変形しようと思ったのですが、、エラーが出てお手上げ状態です。上手く動かす方法はないでしょうか? ブラウザはie9を使っています。 var value = "mode=test&text=test&amount=123"; var value2 = value.split("&"); var response = ""; for(var i=0; i<=value2.length; i++) { value3 = value2[i].split("="); response[value3[0]] = value3[1]; } document.write(response);

  • JavaScriptのフォーム内のvalueの設定

    フォーム内のvalueの値を、変数で取得することはできますか? まず var date = new Date(); //現在の月の取得 var mon = date.getMonth() + 1; として、monに今月の月を入れます。 そしてラジオボタンを用意し document.write('<input type="radio" name="mouth" value=○○>'+mon+'月'); document.write('<input type="radio" name="mouth" value=○○>'+(mon+1)+'月'); document.write('<input type="radio" name="mouth" value=○○>'+(mon+2)+'月'); document.write('<input type="radio" name="mouth" value=○○>'+(mon+3)+'月'); 上記の○○の部分にそれぞれ、mon、mon+1…の値が入るようにしたいのです。 value=monとすると、そのまま「mon」という文字を取ってしまいます。 どなたか教えていただければ幸いです。

  • ASP.NET2.0 Javascript

    皆様はじめまして。 ASP.NET2.0にて開発中です。 初歩的な質問となってしまうかもしれませんが、テキストボックスやラベル等のコントロールのtextの値をJavascriptで取得したいのですが、下記コードではオブジェクトとなってしまいます。 どのように記述すれば値を取得できるかご教授いただけないでしょうか?? <SCRIPT language="javascript"> function window.onload() { var spread = document.all("FpSpread1"); var str = document.getElementById("lblCount"); alert(str); spread.onEditStart = estart; } function estart(event){ if (event==null) event = window.event; if (event.row >= str.value && event.col == 1) event.cancel=true; //1行目の編集開始はキャンセルする if (event.row >= str.value && event.col == 1) alert("変更するな"); } </SCRIPT> ※var str = document.getElementById("lblCount");  ←ラベルコントロールから値を取得 alert(str);                 ←アラートにて取得の確認([object]となってしまいます。) 宜しくお願い致します。

  • javascriptのDOMについてなんですが・・・

    閲覧有難うございます。 JavaScriptのDOMを用いてテキストボックスを生成しようと考えているのですがうまくいきません。 <form name="form" action="index2.php"> <select id="factor" onchange="swicthForm()"> <option value="0">選んでください</option> <option value="1">1個</option> <option value="2">2個</option> <option value="3">3個</option> <option value="4">4個</option> <option value="5">5個</option> </select> </form> <br> <script type="text/javascript"> function swicthForm(){ var options = document.form.factor.value; alert(options); } } </script> を用いてSELECTでいくらを選んだかが表示することが出来ました。 alert(options)の値の分だけテキストボックスなり何なりを生成したいのですがうまくいきません。 どの様にしたらテキストボックスなどを表示できますか?

  • 教えてください。javascriptで困っています

    javascript初心者です。たくさんある変数をfor文を使って計算させたいと思っています。計算はfor分の中でしたいのですが、うまくいきません。以下のようなことをしたいのですが。evalなどを使うのでしょうか。調べるキーワードがわからなかったので、投稿させていただきました。教えてください。よろしくお願いします。 var x1=1; var x2=2; var x3=3; var x4=4; var x5=5; var y1=1; var y2=2; var y3=3; var y4=4; var y5=5; var z1; var z2; var z3; var z4; var z5; for(var i=0 i<5 i++){ "z"+i = "x"+i + "y"+i; } alert(z1); alert(z2); alert(z3); alert(z4); alert(z5);

  • JavaScriptでどちらの書き方が実行速度が速いですか?

    以下の2つの書き方は厳密には(内部処理のステップ的には)どちらが早いでしょうか? for (var i=0; i<10; i++) {  if (value == "dummy")  {   continue;  }  document.write(value); } for (var i=0; i<10; i++) {  if (value != "dummy")  {   document.write(value);  } }

  • Javascriptの値をJavaへ渡す方法

    JSPからJavascriptで処理後の値を、サーブレットへ渡す方法を教えて頂きたいです。 登録ボタンを押したあと、登録確認アラートが表示されるのですが、 同じ(登録ボタン押下の)タイミングでJavascriptで処理を実行し、 その値をjavaへ渡したいと思っています。 具体的には、 var aaa = a+b; <% aBean.setA(%>'aaa'<%); %> Javascriptで取得した「aaa」をJavaの引数として渡す方法を教えて頂けませんでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • ASP.NETのコントロールの値をJavaScriptで取得

    超初級の質問ですみません。 (ASP.NET初心者です) ASP.NETのラベルコントロールの値をJavaScriptで取得する方法が分かりません。 var data = document.getElementById("lblTest").Text; alert(data); といった記述で良いのかと思っていたのですが、値が取得できていません。 諸事情によりJavaScriptのFunctionの引数は増やせない為、直接値を参照する必要があります。 ご回答、宜しくお願いします。