0

フォーラムのユーザーがリンクやその他の許可されたタグを挿入できるようにしたいと思います。たとえば、投稿内の次のHTMLを、ライターが意図したとおりに(つまり、機能するリンクとして)表示したいとします。

<a href="http://www.example.com" rel="nofollow">A page</a>

ただし、ある程度のセキュリティを維持したいので、strip_tags()とhtmlspecialchars()を読んでいます。私は最初、strip_tagsを次のようなもので使用できると思いました。

<?php $link_string = strip_tags($link_string, '<a>'); ?>

しかし、私が正しく理解していれば、strip_tagsはhtmlspecialcharsのように私を保護しません。たとえば、特殊文字を使用した誤ったHTMLコードは、私を無防備にする可能性があります。また、リンクタグのスタイル属性とマウスオーバー属性も同様です。

潜在的に有害な文字やコードを一掃しながら、投稿で上記のリンクを許可するための最も簡単な解決策は何ですか?とにかく、これら2つのPHP関数を組み合わせて簡単な方法でこれを行うことができますか?

4

2 に答える 2

1

フル機能のHTMLパーサーとサニタイザーを使用する必要があります。全体的なワークフローは次のとおりです。

  1. ユーザーがHTMLを入力します
  2. パーサーで解析します
  3. 必要なものだけを保持することで、解析されたものをサニタイズします(タグですが、属性などに<a>は注意してください)。onclick

HTML Purifierを調べることができます。ニーズに合わない場合は、HTMLPurifierのWebサイトに他のPHPサニタイザーとの比較があります。デフォルトのHTMLPurifier構成はリンクを保持すると思います。


必須の参照:HTMLの解析に正規表現を使用しないでください

于 2012-11-01T18:20:19.253 に答える
0

stripslashes()を使用することをお勧めします。これがデータベースに送信される場合は、mysql_real_escape_string()も使用します。

// without SQL.
       function safeData($data) {
        $returnData = stripslashes(strip_tags(htmlspecialchars(trim($data))));
        return $returnData; 
    }

// with SQL.
       function safeDataMySQL($data) {
        $returnData = mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars(trim($data)))));
        return $returnData; 
    }
于 2012-11-01T18:15:19.163 に答える