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() スクリプトをサーバーに保存しないでください。
以上、基本的な PHP セキュリティを実現するための PHP セキュリティ技術について、その内容を含めて紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。