PHPアプリケーションを開発する際に留意すべき点がいくつかありますがstrip_tags()
、それらの1つにのみ役立ちます。実際strip_tags()
には、効果的ではありますが、必要以上のことを行う可能性がありhtmlspecialchars()
ます。状況によっては、危険な可能性のある文字をで変換することも望ましい場合があります。
一般に、すべては2つの単純なルールに帰着します。すべての入力をフィルタリングし、すべての出力をエスケープします。ここで、入力と出力を正確に構成するものを理解する必要があります。
出力は簡単で、アプリケーションがブラウザに送信するものはすべて出力されるため、htmlspecialchars()
自分で作成していないデータを出力するたびに、またはその他のエスケープ関数を使用してください。
入力は、PHPコードにハードコーディングされていないデータです。POSTを介したフォーム、GETを介したクエリ文字列、Cookieからのデータはすべて、ニーズに応じて最も適切な方法でフィルタリングする必要があります。データベースからのデータでさえ、潜在的に危険であると見なされるべきです。特に共有サーバーでは、アプリに影響を与える可能性のある方法でデータベースが他の場所で侵害されたかどうかはわかりません。
データをフィルタリングするには、さまざまな方法があります。選択した値のみを許可するホワイトリスト、期待される入力形式に基づく検証などです。私が決して提案しないことの1つは、ユーザーから取得したデータを修正してみることです。ユーザーにルールに従ってプレイしてもらいます。期待したものが得られない場合は、クリーンアップを試みるのではなく、リクエストを拒否します。
データベースを扱う場合は、SQLインジェクションに特別な注意を払う必要があります。この種の攻撃は、データベースに送信するクエリ文字列を適切に構築しないことに依存しているため、攻撃者は悪意のある命令を実行しようとしてそれらを偽造できます。常に、mysqli拡張機能またはPDOmysql_real_escape_string()
を使用したプリペアドステートメントなどのエスケープ関数を使用する必要があります。
このトピックについてはまだまだ言いたいことがありますが、これらのポイントから始めることができます。
HTH
編集:明確にするために、「入力のフィルタリング」とは、入力データを変更するのではなく、何が良いか、何が悪いかを判断することを意味します。私が言ったように、ブラウザに出力されない限り、ユーザーデータを変更することは決してありません。