Webアプリケーションでは、セッションはユーザーのステータスを追跡して情報を保存するための重要な手段です。ただし、Web環境の開放性により、セッションデータはドメインクロス攻撃の影響を受けやすくなっています。この記事では、PHPで共通の実用的な保護手法を共有し、特定のコード例を含めます。
セッションIDは通常、Cookieに保存されます。クロスドメイン攻撃を防ぐために、Cookie属性を調整することでセキュリティを強化できます。主に関与:
サンプルコード:
session_start(); <p>//今のCookieパラメーターを得るします<br> $ cookieparams = session_get_cookie_params();</p> <p>//安全性なCookie財産を設定します<br> session_set_cookie_params(<br> $ cookieparams ["lifetime"]、<br> $ cookieparams ["path"]、<br> $ cookieparams ["domain"]、<br> true、// secure<br> true // httponly<br> );</p> <p>$ _Session ["username"] = "user123";</p> <p>session_write_close();<br>
要求されたソースドメイン名をチェックすることにより、セッション操作が承認されたドメイン名の下でのみ発生し、クロスドメイン攻撃のリスクを減らすことを確認します。 $ _server ['http_referer']を使用して実装できます。
if (isset($urlParts['host']) && $urlParts['host'] === $allowedDomain) {
return true;
} else {
return false;
}
}
//例を使用します
if(validAtereferer( "embles.com")){
//セッション関連操作を実行します
} それ以外 {
//違法ソース、アクセスが拒否またはプロンプトされたエラー
}
セッションごとに一意のトークンを生成し、クライアントがリクエストしたときに持ち運び、サーバー側のトークンの一貫性を確認して、偽造要求を防止します。
//トークンを生成するします 関数GenerateToken(){ $ token = bin2hex(random_bytes(32)); $ _Session ["csrf_token"] = $ token; $トークンを戻るします。 } <p>//トークンを確認します<br> function validateToken($ token){<br> Return Isset($ _ SESSION ["CSRF_TOKEN"])&& $ _Session ["csrf_token"] === $ token;<br> }</p> <p>//トークンを生成するし、それらを出力して形状します<br> $ token = generatetoken();</p> <p>エコー '<form method="post"> ';<br> エコー '<input type="hidden" name="csrf_token" value="' . $token . '"> ';<br> エコー '<input type="submit" value="提案しますする"> ';<br> エコー '</form> ';</p> <p>//リクエスト処理時に確認します<br> if(isset($ _ post ["csrf_token"])&& validatetoken($ _ post ["csrf_token"])){<br> //トークンは有効で、動作しますを実行します<br> } それ以外 {<br> //トークンは無効で、動作しますは拒否されます<br> }<br>
Cookie属性を合理的に設定し、リクエストソースドメインを確認し、トークンメカニズムを採用することにより、PHPセッションのクロスドメイン攻撃リスクを効果的に保護できます。実際の開発における特定のビジネスシナリオを組み合わせ、セキュリティの脆弱性に注意を払い、ユーザーデータとプライバシーセキュリティを確保するためにタイムリーにポリシーを更新することをお勧めします。