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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Q&A

解決済

2回答

2231閲覧

PHP XSS対策 投稿した文字色やできればリンクを表示したい

mi_

総合スコア80

PHP

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

0グッド

0クリップ

投稿2016/12/19 05:15

お世話になります。

PHPを触り始めて、1ヶ月くらいのものです。
初心者向けの本を数冊経て、PHPでホームページに組み込むブログ機能を作っています。
wordPressなどを使うのも方法なのかもですが、PHPで他にしたいことがあり、勉強がてら行っています。

投稿内容をデータベースに格納したり、閲覧ページでデータベースから読み出したり、画像投稿や、ログイン機能など実現できたのですが、投稿画面にWYSIWYGエディタ?を付けたいと思い、NiceEditというものを設置してみました。

投稿画面では文字編集などができたのですが、閲覧するページでは、タグがそのまま出てきてしまいます。

htmlspecialcharsという関数で、無効化?しているので、もっともな結果と思いますが、htmlspecialcharsをしない選択肢はあるでしょうか?

条件として、投稿ページは、ログインした人しか行えません。WEBサイトの管理者側、数人のみの予定です。
データベースにログインIDやパスワードなどを格納して、一致したときだけログインできて、セッションで管理者(投稿者側)のページを推移する仕組みです。

将来的に、パスワードが流出などを考えると、投稿した内容そのままを表示するのは怖い気もしますが、文字の大きさを変えたり、文字色を変えたり、簡単なリンクを貼るくらいはできないものかと考えています。

特定のタグだけを許可したり、何か方法があるものでしょうか?XSS対策を考えると、リンクなども貼れないのが一般的でしょうか?または、ログインに関する部分を厳重にするなどになりますでしょうか?

セキュリティに関することなので、素人の試行錯誤よりお知恵を拝借できればと思い質問させていただきます。よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

もっとも参考になるのは、貴方が今触っている teratail です。
HTML で編集させると XSS を排除するのが難しいので、マークダウン言語で編集させるのが良いのではないでしょうか。
「OSS マークダウンエディタ」でぐぐると、たくさん出てきます。

簡単に組み込めそうなところでMeltdown – WebベースのMarkdownエディタとかはどうでしょうか。

投稿2016/12/19 05:30

mit0223

総合スコア3401

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

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

mi_

2016/12/19 06:09

さっそくのご回答ありがとうございます。 ご提示いただいたエディタを組み込んでみましたが、文字色の設定がみあたりません。 他のWYSIWYGエディタや、マークダウンエディタの他の物にも色の設定があまり見当たらないようです。 閲覧ページで見たときに文字の装飾がされていたり、イベントのお知らせの際には、リンクなどを貼れないものかと思っています。非常に矛盾しているようですが、、、。
guest

0

WordPress は kses というライブラリを利用しています。

【PHPで予め許可したタグと属性以外を除去できるライブラリ「kses」:phpspot開発日誌】
http://phpspot.org/blog/archives/2010/06/phpkses.html

【GitHub - RichardVasquez/kses: kses stops evil scripts】
https://github.com/RichardVasquez/kses

投稿2016/12/19 06:25

kei344

総合スコア69364

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

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

mi_

2016/12/19 08:11

ご回答ありがとうございます。 自作のPHPに読み込もうとしたのがまちがいだったのか、動作させてみると、kses.phpの中のコードがエラーを表示してしまいました。 せっかくのご提案も活かせず申し訳ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問