質問
コメントシステムの作成を実験しています。私は使用しています php-oenbed クラスと HTML浄化器. 。コメントをデータベースに安全に挿入できるようにするために、どのフィルターを使用できますか? Filter_Sanitize_StringなどのPHPフィルターを使用できることは知っていますが、これらはHTMLをエンティティに変えませんか?
また、ようなものを使用する場合 WMDエディター, 、その後、クライアント側でも何かを使用する必要がありますか( PHPマークダウン)それが安全であることを確認するために?
解決
基本的に、ユーザー入力をどこかに送信するたびにサニタイズする必要があります。
データベースに入れた場合、SQL特殊文字を引用してSQLインジェクションを防ぐ必要があります(準備されたステートメントはこれを行います)。ブラウザに送信する場合、スクリプトの注入を防ぐために、HTML特殊文字(PHPにはこれを行う機能があります)をエスケープする必要があります。
特別なキャラクターを逃れる必要がある他の場所もあるかもしれません。たとえば、何らかの処理を行うためにサーバー上のbashスクリプトにコメントを送信する場合。その場合、バッシュ固有の特殊文字を引用または逃れる必要があります。
間違った段階で引用/脱出しないことが重要です。たとえば、あなたが何をしているのかを完全に確信していない限り、データベースに入れたときにHTMLエンティティを逃がさないでください。データベースから引き出してブラウザに送信する準備をしているときに、誤って物事を再びエスケープするのは非常に簡単です。または、データベース接続が失敗した場合にエラーメッセージを送信している場合は、物事をエスケープしないことです(XSSの脆弱性が発生する可能性があります)。最後の瞬間に逃げると、おそらくこれらの落とし穴を避けるでしょう。
他のヒント
SQLインジェクションにフィルターを使用する必要はありません。好ましいソリューションは使用することです 準備されたステートメント. 。たとえば、PDOは提供します pdostatement.