PHPでjavascriptだけを無効にするライブラリがあれば教えて下さい。(onclick等も含む。)


加えて、特定のiframeの中だけjavascriptを無効にする方法もあれば、教えて下さい。

宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/11/11 01:16:23
  • 終了:2007/11/18 09:05:03

回答(2件)

id:t_shiono No.1

t_shiono回答回数256ベストアンサー獲得回数222007/11/11 07:45:59

ポイント35pt

何が目的なのか分かりませんが、恐らく、phpとjavascriptの動作を勘違いされれているのではないかと思います。

・PHPはサーバサイドで動作します。

・Javascriptはクライアントサイドで動作します。

そのため、PHPでJavascriptを*制御*することはできません。

強いて可能性を挙げるとするならば、

「PHPが出力する際に、Javascriptに関する記述をすべて削除する。」

という形であれば、可能かとは思えます。


出力全体が、$outpuに格納されているとして、

preg_replace("/<script.*?>.*?<\/script>/", "", $output);

みたいなことをする感じです。

なお、これだけだと、onClickなどで直接書いた部分は動作してしまいますし、scriptタグ中で定義されていたJavaScriptの関数が呼び出されるとブラウザ側ではJavascriptのエラーとして検出されてしまいます。


また、iframeの件ですが、

・ページAのiframeによってページBが参照された場合

・直接ページBを参照した場合

というのは、ページBを出力するPHP側では判別不能です。

どのようにシステムを構築されているかは分かりませんが、この場合、ページBで明示的に、scriptタグを削除するコードを埋め込むなど、ある程度作りこむ必要がどうしてもでてきます。


その当りも踏まえて、再設計されることをオススメします。

id:y-kawaz No.2

y-kawaz回答回数1419ベストアンサー獲得回数2252007/11/11 13:07:35

ポイント35pt

質問者が言っているのが「ブラウザで設定するレベルのJavascriptの無効化」ということなら、PHP以前にそもそもHTMLの表記によってJavascriptを無効にすることは出来ないので、答えは「出来ません」になると思います。


ただ、質問者がそもそも何をしたいかによっては出来るかもしれません。

例えばiframeの中に入力されたデータを表示したいということならhtmlspecialcharsで適当にエスケープしてやればXSSなどは簡単に防げます。


厄介なのは、単純なデータの表示ではなく入力されたHTML自体を表示したい場合です。

基本的には <script> タグや on[a-zA-Z]+ 属性を正規表現などで削除してやるしかありません。ただし、この方法はブラウザが吸収してくれる表記のゆれ(例えばタグや属性名の大文字小文字無視や、タグの実体参照表記なども)も考慮する必要が有るので単純な文字列除去だといろいろなパターンを考慮する必要があり大変です。

漏れを減らすには、文字列処理ではなく入力されたHTMLを一度HTML(XML)パーサに読み込ませてから、XML関連APIを使って script 要素と onXXX 属性をループ処理で除去して再度 XML 文字列として出力してやる、という処理をするのがよいと思います。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません