• ベストアンサー

ページ一部分のJavaScriptを無効にしたい

以下のようなページ ----------------------------------- ....<html>.....<body> つらつら つらつら つらつら --- 1.ここは、DBからテキストを引用して貼り付け --- つらつら つらつら </body></html> ----------------------------------- において、 1.の部分は、DBから取り出してきた文字列 を貼り付けることになっています。 文字列中に悪意のあるスクリプトが記述され たり、勝手なFormが作られてSubmit()される のを防ぐために、この1.の部分からのスクリ プトの呼び出しを無効にしたいと思うのです が、いい方法をご存知ないでしょうか。 なお、1.以外の部分には、スクリプトを使っ た処理が書かれますので、ここは有効にした いのです。 これが解決できれば、iframe の不正利用制御 にも応用できるかもしれません。どなたか、 知恵を与えて頂けないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • deadlock
  • ベストアンサー率67% (59/87)
回答No.5

えーと、次の点を明確にしておいた方がいいかと。 >--- >1.ここは、DBからテキストを引用して貼り付け >--- ここにHTMLのタグが含まれていた場合、それは有効な状態にしておきたいということでしょうか? たとえばDBからの文字列に <br> という文字列があった場合、 ブラウザ上では次のどちらが目標でしょうか。 1.改行される 2.<br> という文字列が表示される 2であれば、#2の通りエスケープで大丈夫です。 文字列はすべてタグではなくなるので、「onClick="alert('auch')"」 などはイベントハンドラとして認識されなくなります。 こちらはそう難しくないですね。 1であれば、#3の文字列削除が必要になります。 ブラウザとほぼ同等の解釈精度を要求されるとかなり難しくなりますね。 あと、各ブラウザが独自で用意しているイベントハンドラなども考慮する必要があります。

その他の回答 (6)

  • gmac
  • ベストアンサー率70% (12/17)
回答No.7

1.の部分を<span>タグなどで囲みID(id属性)を振っておいてDOMで制御してはどうでしょうか?

参考URL:
http://www.parkcity.ne.jp/~chaichan/src/javascdom00.htm
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.6

「DBから取り出してきた文字列」に対してのみ エスケープを実施する、という方法でいいと思いますが、 それでも実現不可能でしょうか? Javscriptを実行するのはブラウザ側ですし、 ブラウザから見てスクリプトとして成立する形にならないように するしかないと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>formのsubmitなど、一概にエスケープできない DBの中に、form~submitが書き込まれるというのは、 例えばどういう状況なのでしょうか? #2でも書いたように<、>を&lt;&gt;に置き換えるというのは、大丈夫なような気がするのですが。

noname#205944
noname#205944
回答No.3

#2の方のおっしゃるとおり <SCRIPT></SCRIPT>間を削除するのと JavaScriptのイベントハンドラを正規表現で削除する方法くらいしかないと思いますよ イベントハンドラと言ったって、せいぜい10ヶ程度ですから一つ一つマッチングさせるとか、on***=で始まるものをマッチングさせるなど 力技ですが、思いつく限りを削除してみては スクリプトの起動を待つより先に取り込む文字列を制御する方が得策かと 本来ならDB書き込みの前に処理したほうがいいとは思いますが、た・ぶ・ん できないのでしょうね

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

DBからのテキストを貼り付ける前に、 スクリプトとして機能させるためには <script>などのタグが必要ですので、 タグを削除してしまうか <や>を&lt;&gt;に置き換えてしまってはどうでしょうか

sabusabuu
質問者

補足

ご回答ありがとうございます。 残念ながら、先刻の例にあるように、 onClick="alert('auch')" など、functionとして定義せずに動くスクリプトや、 formのsubmitなど、一概にエスケープできないものが 多くあります。 そこで、論理的に「無効」にできないかな、と思い、 投稿しました。 スクリプトが動作した、というeventがあれば、うまく キャッチして切り分けできるのですが、そんなのは ないのかなー・・・。 皆様の、熱いご指導をお待ちしています。

  • exepieco
  • ベストアンサー率27% (25/91)
回答No.1

えーと、やや意味不明なところもあるのですが 別フレームにしてはだめなのですか? 同一ページ上での有効無効を切り替えることは 出来ないと思います

sabusabuu
質問者

補足

別フレームでも結構ですが、 別フレームのJavaScriptを無効にする方法はあるのですか? 実現したいことは、DBから引いてきたテキストに、例えば、 ----------------------------- <form> <input type="button" onClick(alert('auch'))"> </form> ----------------------------- のようなことをやられても反応しないように したい、ということです。

関連するQ&A

  • JAVASCRIPTでINPUT

    HTMLとJAVASCRIPTとJSPを使ってシステム構築をしております。 --------------- <html> <head> <SCRIPT Language="JavaScript"> <!-- function send() { alert("<input type=text name=name2>"); } // --> </SCRIPT> </head> <body> <form onSubmit="send(); return false;"> <input type=text name=name1> <input type=submit> </form> </body> </html> --------------- 上記のコードでやりたいことは、 submitボタンが押されたときにJAVASCRIPTを呼び出し JAVASCRIPT上で文字を入力し次画面へ送信するような機能を作りたいと思っているのですが、本を見てもなかなか載っていません。 もしかしたらJAVASCRIPTだけではできないかもしれません。 JSPまたはPHPで出来る機能でも良いので教えてください。

  • 別なページにジャンプさせたい

    ボタンをクリックすると指定のページに飛ぶようにしたいのですが、 <html> <head> <script language="JavaScript"> function jump(){ location.href="index.html"; } </script> </head> <body> <form onSubmit="jump()"> <input type="submit"> </form> </body> </html> でも <html> <head> <script language="JavaScript"> function jump(){ location.href="index.html"; } </script> </head> <body> <form> <input type="submit" onClick="jump()"> </form> </body> </html> でも動きません。(そのページを表示したままです) <body onload="jump()">にしたときは正常にジャンプできるので、クリックのイベントが拾えていないと思うのですが、どのように記述すればいいのでしょうか。 よろしくお願いいたします。

  • JavaScript動作仕様の変更!?

    以前は動作していたものが最近のIEパッチ(?)で動作しなくなった気がします。もし解決方法があれば教えて下さい! ------------------------------------- <HTML> <HEAD> <TITLE></TITLE> <SCRIPT type="text/javascript"> <!-- function test() { document.form.submit(); } function test2() { alert( "!!" ); return true; } --> </SCRIPT> </HEAD> <BODY> <FORM name="form" onSubmit="return test2()"> <INPUT type="button" value="おす" onClick="test()"> </FORM> </BODY> </HTML> ------------------------------------- 以前だと、JavaScriptでのsubmit()コマンドで、きちんとonSubmitイベントも動作していたハズなんですが、ここ数日でボタン部分を <INPUT type="submit" value="おす"> としないとonSubmitイベントが動作しなくなった様に思えます。ここ数日でWindowsUpdateした端末数台でチェックしましたが同様でした。

  • ENTERキーを無効にしたいのですが教えて下さい

    ENTERキーを無効にしたいのですが、SUBMITボタンでjavascriptを動かしています。 SUBMITを押した瞬間に、別ウィンドウにデータを渡しているのですが、 どの部分にどのようなスクリプトを追加すれば良いでしょうか? 良かったら教えて下さい。 ■親ウィンドウのHTML <html> <head> <title>親</title> <script type="text/javascript"> <!-- window.name = (new Date()).getTime();    function make_newwin(f) {   f.target = window.name + "_ko";   var w = window.open("about:blank", f.target, "スタイル設定");   w.focus(); } //--> </script> </head> <body> <form name="test" action="/cgi-bin/test-check.cgi" method="post" onSubmit="make_newwin(this)"> <input type="submit"> </form> </body> </html>

  • Firefox:JavaScriptのsubmit

    JavaScriptで、以下のようにsubmitしていますが、 IEではOKで、Firefoxでは「送信開始」ボタンで反応がありません。 Firefoxではどのように書けばよいのでしょうか? 以下は、テストのため省略できるギリギリまで省略していますので、意味のないスクリプトになってますが、実際にはJavaScriptで空白個所のチェックのロジックを入れています。 <html> <head> <script language="JavaScript"> <!-- function check1(){ document.FORM1.submit(); } ---> </script> </head> <form action='http://hogehoge.jp' method='post' name="FORM1"> <input type='button' value='送信開始' onClick="check1()"> </form> </body> </html>

  • javascript内からのsubmit

    PHP初心者です。 javascript内でsubmitを行い、値をPHP内で受け取る想定ですが、うまく作動しません。 具体的には下記のソースで、// Aの処理に入ってきて欲しいのですが、//B に入ってきます。 初歩的なことのなのかもしれませんが、どこが間違っているのか分からずはまっています。 ご教授ください。 ソースは以下です。 ■JavaScriptとForm(admLogin.html) <script type="text/javascript" src="js/jquery-1.9.0.min.js"></script> <script type="text/javascript"> function fncLogin(){ $("#frmAdmLogin").submit(); } </script> <body> <form id="frmAdmLogin" action="admLogin.php" method="post"> <input type="text" id="txtAdmId" /> <input type="text" id="txtAdmPass" /> <input type="button" name="btnLogin" value="ログイン" onclick="fncLogin()"/> </form> </body> ■PHP(admLogin.php) <?php if(isset($_POST['btnLogin'])) { // A }else{ // B } ?> ログインボタン押下 ↓ fncLogin内からフォームをsubmit ↓ // A の処理に入ってくる想定なのですが、//B の処理が実行される。 ちなみに、ボタンのinput typeをsubmitにすれば//A の処理に入ってくるのですが、 javascript内からsubmitしたいため、困っています。 どこを間違えているのでしょうか。。

    • 締切済み
    • PHP
  • javascript form送信後の動作

    以下のスクリプトでiframeにデータは送信できているんですが、<input type="text">に入力したテキストが残ってしまいます。どのように記述したらうまくいくでしょうか? <script type="text/javascript"> function send(){ var frm=document.txt_submit; frm.submit(); frm.reset(); } </script> <form name="txt_submit" action="log.cgi" method="post" target="log" autocomplete="off"> <input type="text" name="ctxt" size="20" value=""> <input type="button" value="送信" onclick="return send();"> </form>

  • 無効な viewstate

    無効な viewstate 事情があり、javascriptからaspのフォームをサブミットしたいと考えています。 後述したプログラムを記述しましたが、「無効な viewstate です」といった エラーが発生します。 おそらく、javascriptから実行したsubmitが、aspのviewstateの値をサーバに 送信していない為だと思うのですが、javascriptでviewstateを取得する方法など 回避策はあるのでしょうか? <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> function btn_onclick() { document.getElementById("form1").submit(); }; </script> </head> <body> <form id="form1" runat="server" action="nextpage2.aspx"> </form> <input type="button" value="test" onclick="javascript:btn_onclick();" /> </body> </html>

  • ホームページで他のページに飛ばしたいんですが

    ホームページで他のページに飛ばしたいんですが ・html ・head ・body ・frame ・frameset ・iframe ・object ・param ・server ・javascript ・form ・input ・embed ・textarea ・script ・meta が使えませんができますでしょうか?

  • JavaScriptが動きません

    下記のようなJavaScriptを作りましたが、IE8ではボタンを押しても「ようこそJavaScriptへ」が表示されません。 「F12 Web開発者ツール」というのをチョッとイジったのですが、その為ではないかと思います。 どこをどうイジったか覚えてません。 どうすれば動作するようになるでしょうか、教えてください。 動作状況  サーバーに置いてアクセスした場合は、「FireFox」「IE8」とも表示される。  ローカルデスクに置いてアクセスした場合は、「FireFox」では表示される、「IE8」では表示されない。 ☆OSはWindowsXP。 ☆IE8のセキュリティ設定で「アクティブスクリプト」は「有効にする」になってます。 ------JavaScript----------- <HTML> <BODY> <FORM> <P> <INPUT TYPE="submit" VALUE="ここを押すとメッセージが表示されます" ONCLICK="HelloWorld()"> </FORM> </BODY> </HTML> <SCRIPT LANGUAGE="JavaScript"> <!--Hide script from no-JavaScript browsers function HelloWorld() { alert("ようこそJavaScriptへ"); } //--> </SCRIPT>