セキュリティの問題に関しては、実際のプラットフォームとオペレーティング システムのセキュリティの問題に加えて、安全なアプリケーションを作成する必要があることに注意することが重要です。 PHP アプリケーションを作成するときは、以下の 7 つの習慣を適用して、アプリケーションに可能な限り最高のセキュリティを確保してください:
• 入力を検証する
• ファイル システムを保護する
• データベースを保護する
• セッション データを保護する
• クロスサイト スクリプトを保護する (クロスサイト スクリプティング、データの検証は、おそらく採用できる最も重要な習慣です。そして入力に関して言えば、それは非常に簡単です。ユーザーを信頼しないことです。ユーザーは優秀である可能性があり、そのほとんどがアプリケーションを期待どおりに使用している可能性があります。しかし、インプットの機会があるところでは、非常に悪いインプットが行われる可能性も高くなります。アプリケーション開発者は、アプリケーションが誤った入力を受け入れないようにする必要があります。ユーザー入力の場所と正しい値を慎重に考慮することで、堅牢で安全なアプリケーションを構築できます。
ファイル システムとデータベースの相互作用については後で説明しますが、
以下に挙げるのは、さまざまな検証に適用される一般的な検証のヒントです:
• ホワイトリストの値を使用します
• 限られたオプションを常に再検証します • 組み込みを使用しますエスケープ関数
• 正しいデータ型 (数値など) を確認します ホワイトリストにある値は、無効なブラックリストにある値ではなく、正しい値です。 2 つの違いは、通常、検証時に、可能な値のリストまたは範囲が無効な値のリストまたは範囲よりも小さく、その多くが不明な値または予期しない値である可能性があることです。 検証を行うときは、すべての未知の値から保護するよりも、アプリケーションで許可される値を設計して検証する方が簡単であることが多いことに注意してください。たとえば、フィールド値をすべての数値に制限するには、入力がすべて数値であることを保証するルーチンを作成する必要があります。数値以外の値を検索し、見つかった場合に無効としてマークするルーチンを作成しないでください。
ファイル システムの保護
2000 年 7 月、Web サイトが Web サーバー上のファイルに保存されている顧客データを暴露しました。 Web サイトの訪問者は、その URL を使用してデータを含むファイルを表示しました。ファイルは置き忘れられましたが、この例はファイル システムを攻撃者から保護することの重要性を強調しています。
PHP アプリケーションがファイルを操作し、ユーザーが入力できる可変データが含まれている場合は、ユーザー入力を注意深くチェックして、ユーザーがファイル システム上で不適切なアクションを実行できないことを確認してください。リスト 1 は、指定された名前のイメージをダウンロードする PHP サイトの例を示しています。
リスト 1. ファイルをダウンロードします
コードをコピーします
コードは次のとおりです:
if ($_POST['submit'] == 'Download') {
echo(fread($fh, 1024));
}
fclose($fh);
} else {
echo("<");
echo("title>ファイルシステムを守る head>");
echo("