0

コメントシステムの作成を試みています。私はphp-OEmbedクラスとHTMLPurifierを使用しています。コメントをデータベースに安全に挿入できるようにするには、どのフィルターを使用できますか?FILTER_SANITIZE_STRINGなどのPHPフィルターを使用できることは知っていますが、これらはHTMLをエンティティに変換しませんか?

また、WMDエディターのようなものを使用する場合、安全を確保するためにクライアント側でも何か(PHP Markdownなど)を使用する必要がありますか?

4

2 に答える 2

2

基本的に、ユーザー入力をどこかに送信するときは常に、ユーザー入力をサニタイズする必要があります。

それをデータベースに入れるときは、SQLの特殊文字を引用してSQLインジェクションを防ぐ必要があります(プリペアドステートメントがこれを行います)。これをブラウザに送信するときは、スクリプトの挿入を防ぐために、HTMLの特殊文字(PHPにはこれを行うための関数があります)をエスケープする必要があります。

他にも、特殊文字をエスケープする必要がある場所があるかもしれません。たとえば、サーバー上のBashスクリプトにコメントを送信して、ある種の処理を行う場合です。その場合、Bash固有の特殊文字を引用符またはエスケープする必要があります。

間違った段階で引用/エスケープしないことが重要です。たとえば、データベースに配置するときにHTMLエンティティをエスケープしないでください。ただし、自分が何をしているかを完全に確信している場合を除きます。データベースから取り出してブラウザに送信する準備をするときに、誤って再度エスケープするのは非常に簡単です。データベース接続に失敗した場合にエラーメッセージを送信する場合は、まったくエスケープしないでください(これによりXSSの脆弱性が発生する可能性があります) )。最後の瞬間にあなたの脱出をしてください、そしてあなたはおそらくこれらの落とし穴を避けるでしょう。

于 2010-12-05T02:53:33.530 に答える
1

SQLインジェクションにフィルターを使用する必要はありません。望ましい解決策は、プリペアドステートメントを使用することです。たとえば、PDOはPDOStatementを提供します。

于 2010-12-05T02:23:49.313 に答える