1

最近、「記事エントリ」ページで NicEdit を使い始めました。ただし、セキュリティと不正使用の防止についていくつか質問があります。

最初の質問: 現在、データベース クラスで「mysql_real_escape_string()」を使用してすべての入力をサニタイズしています。さらに、「htmlspecialchars(htmlentities(strip_tags($var)))」で HTML 値をサニタイズします。

「HTML入力」をデータベースに追加するときにどのようにサニタイズしますか、または私がやっている方法は完璧に機能しますか?

2つ目の質問: この質問をしている最中に「似たようなタイトル」の質問があったので、一度読んでみました。彼の有効なテンプレートをいじるために「悪用された HTML 入力」について話しているのは誰かでした。(例:入力のみ)

現在のシステムでも発生する可能性があります。PHPでどのように処理する必要がありますか?

Ps。私は NicEdit を使い続けたいので、BBCode システムを使用するのは最後のアドバイスです。

ありがとうございました。

4

2 に答える 2

3
  1. mysql_real_escape_stringサニタイズではなく、テキスト値をエスケープして、SQL クエリの構文を有効/明確/安全に保ちます。
  2. strip_tags文字列をサニタイズしています。
  3. 両方htmlentities htmlspecialchars順番に行うのはやり過ぎであり、データが文字化けする可能性があります。その直前にタグも削除しているので、それは二重のやり過ぎです。
  4. ルールは、データが SQL 構文を壊さないことを確認することです。そのため、データをクエリに入れる前にmysql_real_escape_string 1 回行います。また、HTML エスケープ テキストを HTML に出力する前に、両方ではなくどちらか htmlspecialchars(推奨)または を使用して、HTML 構文を保護し、同じことを行います。htmlentities
  5. このすべての詳細については、The Great Escapism (Or: What You Need To Know To Work With Text Within Text) をお読みください。
  6. NicEdit についてはわかりませんが、ユーザーが裏で HTML を使用してテキストのスタイルを設定できると思います。では、なぜデータから HTML を削除するのですか? その場合、WYSIWYG エディターを使用しても意味がありません。
于 2011-12-11T03:42:16.923 に答える
0

これは、私の NICEDIT アプリケーションの 1 つで使用している機能であり、nicedit から生成されるコードでうまくいくようです。

function cleanFromEditor($text) { 

    //try to decode html before we clean it then we submit to database
    $text = stripslashes(html_entity_decode($text));

    //clean out tags that we don't want in the text
    $text = strip_tags($text,'<p><div><strong><em><ul><ol><li><u><blockquote><br><sub><img><a><h1><h2><h3><span><b>');

    //conversion elements
    $conversion = array(
        '<br>'=>'<br />',
        '<b>'=>'<strong>',
        '</b>'=>'</strong>',
        '<i>'=>'<em>',
        '</i>'=>'</em>'
    );

    //clean up the old html with new
    foreach($conversion as $old=>$new){
        $text = str_replace($old, $new, $text);
    }   

    return htmlentities(mysql_real_escape_string($text));
} 
于 2011-12-31T05:49:45.660 に答える