まず、テキストを論理的かつクリーンに保ちます:
trim() -- OK
htmlentities($comment, ENT_NOQUOTES) -- No; do later
mysqli_real_escape_string() -- Yes; required by API
nl2br() -- No; see below
これらの推奨事項の背後にあるロジック:データベース内のデータは単なるデータである必要があります。 htmlentitiesではなく、br-tagsではありません。ただし、PHPからMySQLにデータを渡すには、escape_stringを実行する必要があります。エスケープは保存されません。
しかし...それは中間のステップにすぎません。データはどこから来たのですか?古いバージョンのPHPは、HTMLで問題なく機能するエスケープやその他のジャンクを追加することを「保護」しようとしますが、MySQLを台無しにします。このような魔法のエスケープをオフにして、生データを取得します。
データはどこに送られますか?おそらくHTML? SELECTing
の後 データをテーブルから戻し、次に 最初にhtmlentities()
を実行します および(オプションで)nl2br()
;
<I>
のようなものを保存することを期待している場合は注意してください (斜体の場合)、あなたはトラブルを求めています-大きなトラブル。ハッカーがする必要があるのは<script> ...
だけです あらゆる種類の不快感をWebページに注入し、場合によってはシステム全体に注入します。