質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

866閲覧

PHPでscriptのみをエスケープ WPなどの脆弱性

ryuuichi

総合スコア16

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/09/18 14:40

編集2018/09/18 14:57

掲示板などでJSを含むと殆どの場合エスケープされ、JSを動かせないようになりますが、
WPなどのエディタを利用する環境では、直接コードを記入し"<script></script>"を実行すると
JSが動いてしまいます。
WPでは、管理者が送信するので自ら危険なスクリプトを記述することはないと思いますが、
掲示板などでは、全ユーザが対象となってしまします。

PHPでは、送られた文字をエスケープできますが、エディタの文字(<br>など)までエスケープされてしまいます。
どうすればエディタの文字をエスケープせずに危険なスクリプトのみをエスケープできますか?

言語はPHPで組んでいますのでお教えいただきたいと思います。

文面汚くて申し訳ございません。

※現在掲示板のようにクライアントが自由に書き込めるようなサイトを作っております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/09/18 14:47

参考までに、<br>タグがエスケープされないのに、<script>がエスケープされる掲示板を教えていただけませんか?
ryuuichi

2018/09/18 14:54

実際にクライアントがformで<br>を書いたのならばエスケープするようにしてもいいですがWPなどのエディタ上で文字を書くような場合だとエディタで自動的に"<br>"が作られてしまいます。 PHPで送られたテキスト全てに対してエスケープされるとエディタで編集した改行や文字の大きさなどの情報も一緒にエスケープされてしまいます。  実際WPのエディタで直接コードを記入するところで”<script>console.log("スクリプトが実行された");</script>”と入力するとJSが実行されているのが確認できると思います。 質問の意図としてはエディタなどで自動的にHTMLコードが記入される場合、危険なscriptなどのコードのみをエスケープする方法が知りたいのです。
papinianus

2018/09/19 03:22

それって全部エスケープしてnl2brとかでbrをphpで付与しているのだと思いますが。全部エスケープでいいような。
ryuuichi

2018/09/19 03:44

改行だけならいいですがその他にも<li>などのタグもあるのですべてをエスケープすると…
papinianus

2018/09/19 04:02 編集

つまり、不特定のユーザが自由に無制限にhtmlタグを書き込めるサイトはないあまり一般的でないということですよね。お使いのteratailのようにmarkdownをサポートしてはいかがでしょうか。パーサの参考→ https://qiita.com/naga3/items/eb638d90e77fa0e1ae0b
guest

回答3

0

WordPress には指定したタグを残すための関数があります。

【データ検証 - WordPress Codex 日本語版】
https://wpdocs.osdn.jp/データ検証#HTML.2FXML

【WordPressで指定したタグをエスケープさせない方法 | webOpixel】
https://www.webopixel.net/wordpress/935.html

投稿2018/09/19 00:58

kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuuichi

2018/09/19 03:40

回答ありがとうございます。 しかし私は現在WPを使っているわけではないのでその関数は利用できません… 質問文がわかりにくくて申し訳ありません。 JSのプラグインでテキストエディタを使ったコンテンツを作りうとしているのですがその例えでWPと書かせていただきました。 実際にWPでも投稿画面でJSを記述するとJSが実行されてしまいます。 PHPへPOSTされたテキストからJSのみをエスケープする方法とかないでしょうじゃ?
guest

0

そのような目的のためのライブラリとして HTML Purifier があります。

HTML Purifier を使って html を消毒する

HTML Purifier - Filter your HTML the standards-compliant way!

投稿2018/09/19 23:52

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuuichi

2018/09/21 05:20

ありがとうござます。 調べてみると拡張性も高く非常によいと思いました。
guest

0

自己解決

scriptタグのみを置換することでできることに気づきました。

PHP

1<?php 2$text = str_replace("%<script%", "&lt;script", $_POST['text']); 3echo $text; 4 5?> 6 7

投稿2018/09/19 00:23

ryuuichi

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ockeghem

2018/09/19 00:24

この方法だと、<img src=1 onerror=alert(1)> などでスクリプトを実行できてしまいますよ
ryuuichi

2018/09/19 03:33

本当ですね… どう対策すれば…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問