1. 登録済みグローバル変数関数 (register_globals) に依存しないでください
登録済みグローバル変数の登場により、PHP は非常に使いやすくなりましたが、セキュリティも低下しました (利便性がセキュリティを損なうことがよくあります)。 PHP6 ではこの関数もキャンセルされるため、プログラミング時には register_globals ディレクティブをオフにすることをお勧めします。
2. 変数を使用する前に初期化します。
register_globals 関数が有効になっている場合、プログラマがそれを使用していなくても、悪意のあるユーザーが変数の初期化の脆弱性を悪用してシステムに侵入する可能性があります。例:
if(conditon){
$auth=TRUE;
}
この段落の前で変数 $auth が FALSE に初期化されていない場合、ユーザーは $_GET['auth'], $ を渡すことができます。 _POST['auth'] または $_COOKIE['auth'] は検証を簡単に実装します。
3. すべての入力データを検証して精製します。
4. 変数を使用してインクルードされたファイルを参照する場合は注意してください。
スクリプトに次のようなコードがある場合:
require($page);
$page が外部リソース ($_GET など) から取得されていないこと、または外部リソースから取得されているかどうかを確認する必要があります。外部リソースから取得した場合は、適切な値が含まれていることを確認してください。
5. サーバー上でコマンドを実行する関数を使用する場合は注意してください。
これらの関数には、eval()、exec()、system()、passthru()、popen()、および backtick(``) が含まれます。これらの関数はサーバー上でコマンドを実行できるため、決して安易に使用しないでください。コマンドに変数を含める必要がある場合は、変数に対して徹底的なセキュリティ チェックを実行する必要があります。追加の前処理には、escapeshellarg()、escapeshellcom() も使用する必要があります。
6. デフォルトのセッション ディレクトリを変更するか、データベースを使用してセッション データを保存します。
7. ブラウザが提供するファイル名を使用して、アップロードされたファイルをサーバーに保存しないでください。
8. 送信されたデータを Web ページに再表示する必要がある場合は、その中の HTML に注意してください。さらに重要なのは、JAVASCRIPT
関数
string htmlspecialchars ( string string [, int quote_style [, string charset]])
送信されたデータを処理します
9. PHP エラー メッセージをサイトに公開しないでください
PHP エラー メッセージは、開発プロセス中の検査のためにエラー メッセージを出力できますが、Web 上に公開されると、攻撃者の侵入ポイントになる可能性があります。
10. SQL インジェクション攻撃を防止します。
送信されたコンテンツによってクエリ操作が破壊されないようにするには、mysqli_real_escape_data() などの言語固有のデータベース エスケープ関数を使用する必要があります。
11. phpinfo() スクリプトをサーバーに保存しないでください。