PHPで入力フォームのテキストエリアを使用して

フリーで入力させるのですが
その際に、HTMLのタグなどで
<B>タグや<A>タグだけを許可して
それ以外は、許可せず処理をしたいのですが
どのように行えばいいでしょうか??

タグは無い場合はそのまま投稿できるようしたいです。

javascriptでも出来るのであれば教えて下さい。

回答の条件
  • 1人5回まで
  • 登録:2008/12/29 15:35:25
  • 終了:2009/01/05 15:40:03

回答(2件)

id:tezcello No.1

tezcello回答回数457ベストアンサー獲得回数682008/12/29 15:57:01

ポイント60pt

HTML, PHP のタグを取り除くという関数 strip_tags() というものがあります。

http://jp.php.net/manual/ja/function.strip-tags.php


ですが、不完全なタグが与えられた場合、予定外の動作をする可能性がある(不完全なタグを与えたせいなので当然と言えば当然ですが)ので、注意が必要と注記があります。


はてな表記のような仕組みにするという手もあります。

id:hopefully

これはいいですね。

さらにHTMLタグの構文チェックはPHPで出来るのでしょうか?

aタグで始まっているればaタグで閉じてないとエラーにするとか。

2008/12/29 18:34:12
id:ymlab No.2

ymlab回答回数506ベストアンサー獲得回数332009/01/01 17:09:00

ポイント10pt

まず、セキュリティの対策をしましょう。

タグだけ許可する方法[XSS対策]

http://phpspot.org/blog/archives/2007/03/htmlxssphphtml.html

その後は、正規表現を使うなどでよいのではないでしょうか。

それが嫌なら、

ksesというライブラリを使う手もあります。

http://sourceforge.net/projects/kses

私のWeblogで、恐縮ですが、

http://d.hatena.ne.jp/ymlab/searchdiary?word=%c6%c3%c4%ea%a4%ce%...

のソースを参考にしてみてください。


って、今コメントをみたら、セキュリティについて言及がありましたね。^^;

  • id:hopefully
    tezcelloさんの回答がよかったのですが
    http://life-hack.jp/blog/charly/29
    で書かれている通りXSSの脆弱性があるので
    もっといい方法はないですか??
  • id:tezcello
    XSS を防ぐ第一歩は、タグの入力を許さない事でしょう。
    見栄えの為(偏見が入っていますが)のBタグや、リンク先URLを文字に置き換えるためのAタグが、どうしても必要ならそれなりの(面倒な)処理を追加する事になりますね。
    ##僕ならそれらは不許可にします(http:// で始まる部分をリンクにするくらいはするかもしれないが)
    > もっといい方法はないですか??
    「いい方法」が「簡単な方法」という意味なら、「タグを全て許さない」のが一番簡単でしょう。


    特定のタグを許すとするなら、追加する処理としては
    特定の属性値以外 例えばイベント絡みの属性値(on***= の部分)は削除
    が考えられます。(Bは何も許さない、Aは href だけ許す...のような)

    回答でも書きましたが、はてな記法のようなタグでは無いものでタグのように意味付けるような事も対策として使えると思います。

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

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

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

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