この記事では主に PHP の codeigniter のセキュリティ上の注意事項を紹介します。興味のある方はぜひ参考にしてください。
1. httponly
session は httponly である必要があります。そうしないと、xxs によって攻撃される可能性があります。js を使用して Cookie の session_id を取得します。 フレームワークの ci_session、長い数字、および httponly を使用する必要があります。これらはすべてデフォルトで設定されています。 ネイティブ phpsession を使用せず、ci_session を使用してください。 ci_session の数字が長くなります。 ネイティブ セッションを使用したい場合は、次のように設定する必要があります (php.ini):session.sid_length //ここで Sid の長さを長くする必要があります。デフォルトでは短すぎます
session.cookie_httponly = 1 ネイティブセッションは httponly になります。
2. phpinfo
ダンプリクエストの情報が攻撃者によって使用される可能性があるため、phpinfo ページを必ず閉じてください。クッキー情報など。3. サイト全体を強制的に https
経由でジャンプさせ、ローカル開発環境も https を備えている必要があります。メッセージのプッシュなど、一部の側面で https を使用できない場合は、新しいサイトを作成できます。4. Strictモード
session.use_strict_mode = 1
5. CSRF クロスサイト リクエスト フォージェリ
A の Cookie にはサイト example.com のセッション ID が含まれており、有効期限が切れていない状態で、B が A を誘導してこの画像をクリックさせます。この画像 A リクエストは example.com として偽装され、A のブラウザはこのリクエストに example.com の Cookie を添付し、B を通じて B に送信します。 B はこれを使用して非同期リクエストを実行します。Cookie は example.com の A のアカウントにログインします。 CI には反 CSRF メカニズムがあり、非表示の CSRF フィールドがフォームに自動的に挿入されます。次の設定を行う必要があります: application/config/config.php:$config['csrf_protection'] = TRUE;
6.
7. 再生 ユーザー名とパスワードを暗号化し、ログイン検証のためにサーバーに送信する必要はありません。攻撃者は、傍受したデータ パケットを再暗号化するだけで済みます。 . 一度操作するとログインでき、これがリプレイです。 防御策 5 および 6: 各フォームには、1 回のみ使用できる隠しランダム コード トークンが含まれています。ワンタイムトークンの実装のみを使用します: redis は期限切れと無効化の後に直接削除されます
8. 概要: ユーザーの安全なログインプロセス
<1>基本的なセッション戦略: (1) セッションはセッションとしてのみ使用され、ブラウザを閉じると無効になります
(2) セッションの有効期間は短いほど安全です (60 秒など)。 (3) セッションの更新時間をそれに応じて変更する必要があります (例: 30 秒)。(4) セッションを保存するために Redis を設定します。設定は次のとおりです:
php.ini内:$this->input->post('a',true);
これはセッションの有効期間です。デフォルトは1440秒で、これは24分です。たとえば、60 秒に設定します。 60 秒後、クライアントの SID がサーバーの SID と一致する場合は、60 秒前にページを更新して SID を更新する必要があります。更新方法は、application/config/ で説明されています。 config.php: session.gc_maxlifetime = 60
<2>セッションIDの更新とセッション有効期限の区別:
注:
これらの設定はセキュリティに密接に関連しているため、区別して使用する必要があります。
session.gc_maxlifetime
とはどういう意味ですか?つまり、セッションが生成されてから期限切れになり使用できなくなるまでの時間です。実際、redis を使用する場合、この値は、redis を使用して sid を保存するときに設定される時間が明確になります。に達すると、この Key-Value は削除されます。
この sess_time_to_update は、名前が示すように、更新時間です。つまり、この時間が経過すると更新されることになります。 自動的には更新されませんが、セッションにアクセスすると更新されます。 セッションを使用する場合、前回のセッションと今回のセッションの間の間隔が決定され、間隔がこの値より大きい場合、SID が更新されます。この使用法の通常のパフォーマンスでは、ページを更新するときに認証のためにセッションを読み取る必要があり、ページを更新するときに 2 回の間隔がこの時間を超えます。つまり、sid を更新することと、maxlifetime が組み合わされます。上の場合、これはリフレッシュが完了したことを意味し、その後セッションが更新され、タイマーが再起動されて新しいセッションが書き込まれます。
つまり、ページを時々更新すると、必要に応じて更新メカニズムがトリガーされ、定期的に発生する場合はセッションが期限切れになることはありません。 2 回の更新の間隔が maxlifetime を超えると、ログイン タイムアウトが表示され、セッションが失われます。これは、期限切れ後に更新しようとすると、明らかに機能せず、更新が失敗するためです。
要約すると、この maxlifetime は 2 回の更新間の時間を超えてはいけない時間を決定します。そうでないとログインがタイムアウトになり、更新は maxlifetime よりも小さくなければなりません。これは避けられません。これを超えると無効になるためです。更新期限が切れました。そしてできれば、この更新は maxlifetime の半分未満であるべきだと思います。 maxlifetime が非常に長い場合 (ユーザー エクスペリエンスを向上させることを望んでいますが、ユーザーが常にログインしてタイムアウトするのは常に良いことではありません)、更新が短く設定されていても問題ありません。セッションが盗まれたと仮定すると、短いほどリスクが高くなります。盗人がセッションを使用するときに有効期限が切れている可能性があるため、セキュリティは高くなります。
<2>one-times-tokens:
ワンタイムトークン
上記がこの記事の全内容です。皆様の学習に役立つことを願っています。
関連する推奨事項:
PHPバイパス無効化機能を使用してシステムコマンドを実行する方法
以上がPHP における Codeigniter のセキュリティ上の注意事項の詳細な図による説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。