- ベストアンサー
ページ一部分のJavaScriptを無効にしたい
以下のようなページ ----------------------------------- ....<html>.....<body> つらつら つらつら つらつら --- 1.ここは、DBからテキストを引用して貼り付け --- つらつら つらつら </body></html> ----------------------------------- において、 1.の部分は、DBから取り出してきた文字列 を貼り付けることになっています。 文字列中に悪意のあるスクリプトが記述され たり、勝手なFormが作られてSubmit()される のを防ぐために、この1.の部分からのスクリ プトの呼び出しを無効にしたいと思うのです が、いい方法をご存知ないでしょうか。 なお、1.以外の部分には、スクリプトを使っ た処理が書かれますので、ここは有効にした いのです。 これが解決できれば、iframe の不正利用制御 にも応用できるかもしれません。どなたか、 知恵を与えて頂けないでしょうか。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
えーと、次の点を明確にしておいた方がいいかと。 >--- >1.ここは、DBからテキストを引用して貼り付け >--- ここにHTMLのタグが含まれていた場合、それは有効な状態にしておきたいということでしょうか? たとえばDBからの文字列に <br> という文字列があった場合、 ブラウザ上では次のどちらが目標でしょうか。 1.改行される 2.<br> という文字列が表示される 2であれば、#2の通りエスケープで大丈夫です。 文字列はすべてタグではなくなるので、「onClick="alert('auch')"」 などはイベントハンドラとして認識されなくなります。 こちらはそう難しくないですね。 1であれば、#3の文字列削除が必要になります。 ブラウザとほぼ同等の解釈精度を要求されるとかなり難しくなりますね。 あと、各ブラウザが独自で用意しているイベントハンドラなども考慮する必要があります。
その他の回答 (6)
- gmac
- ベストアンサー率70% (12/17)
1.の部分を<span>タグなどで囲みID(id属性)を振っておいてDOMで制御してはどうでしょうか?
- osumitan
- ベストアンサー率33% (102/307)
「DBから取り出してきた文字列」に対してのみ エスケープを実施する、という方法でいいと思いますが、 それでも実現不可能でしょうか? Javscriptを実行するのはブラウザ側ですし、 ブラウザから見てスクリプトとして成立する形にならないように するしかないと思います。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>formのsubmitなど、一概にエスケープできない DBの中に、form~submitが書き込まれるというのは、 例えばどういう状況なのでしょうか? #2でも書いたように<、>を<>に置き換えるというのは、大丈夫なような気がするのですが。
#2の方のおっしゃるとおり <SCRIPT></SCRIPT>間を削除するのと JavaScriptのイベントハンドラを正規表現で削除する方法くらいしかないと思いますよ イベントハンドラと言ったって、せいぜい10ヶ程度ですから一つ一つマッチングさせるとか、on***=で始まるものをマッチングさせるなど 力技ですが、思いつく限りを削除してみては スクリプトの起動を待つより先に取り込む文字列を制御する方が得策かと 本来ならDB書き込みの前に処理したほうがいいとは思いますが、た・ぶ・ん できないのでしょうね
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
DBからのテキストを貼り付ける前に、 スクリプトとして機能させるためには <script>などのタグが必要ですので、 タグを削除してしまうか <や>を<>に置き換えてしまってはどうでしょうか
- exepieco
- ベストアンサー率27% (25/91)
えーと、やや意味不明なところもあるのですが 別フレームにしてはだめなのですか? 同一ページ上での有効無効を切り替えることは 出来ないと思います
補足
別フレームでも結構ですが、 別フレームのJavaScriptを無効にする方法はあるのですか? 実現したいことは、DBから引いてきたテキストに、例えば、 ----------------------------- <form> <input type="button" onClick(alert('auch'))"> </form> ----------------------------- のようなことをやられても反応しないように したい、ということです。
補足
ご回答ありがとうございます。 残念ながら、先刻の例にあるように、 onClick="alert('auch')" など、functionとして定義せずに動くスクリプトや、 formのsubmitなど、一概にエスケープできないものが 多くあります。 そこで、論理的に「無効」にできないかな、と思い、 投稿しました。 スクリプトが動作した、というeventがあれば、うまく キャッチして切り分けできるのですが、そんなのは ないのかなー・・・。 皆様の、熱いご指導をお待ちしています。