人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

宜しくお願いします。

●質問者: tomoyuki28jp
●カテゴリ:インターネット ウェブ制作
✍キーワード:JavaScript PHP ライブラリ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● t_shiono
●35ポイント

何が目的なのか分かりませんが、恐らく、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タグを削除するコードを埋め込むなど、ある程度作りこむ必要がどうしてもでてきます。


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


2 ● y-kawaz
●35ポイント

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


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

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


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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ