カテゴリ: PHP 更新日: 2026/01/23

PHPのCookieセキュリティを完全ガイド!初心者でもわかるSecureとHttpOnlyの使い方

PHP の Cookie のセキュリティ(Secure, HttpOnly)
PHP の Cookie のセキュリティ(Secure, HttpOnly)

先生と生徒の会話形式で理解しよう

生徒

「PHPでログインを作りたいのですが、Cookieってどうやって安全に扱えばいいんですか?」

先生

「PHPではCookieを使うと便利ですが、設定を誤るとセキュリティの問題が起きることがあります。特に、SecureHttpOnlyという属性はとても重要です。」

生徒

「名前は聞いたことがありますが、どういう役割なんでしょう?」

先生

「それでは、PHPのCookieセキュリティの基本から一緒に見ていきましょう。」

-

1. PHPのCookieとは?初心者向けにやさしく解説

1. PHPのCookieとは?初心者向けにやさしく解説
1. PHPのCookieとは?初心者向けにやさしく解説

PHPのCookieとは、ユーザーのブラウザに小さなデータを保存する仕組みのことです。Webサイトがユーザーのログイン状態を覚えておいたり、設定情報を保持したりするために使われます。例えば「ログイン状態を保持する」というチェックボックスを見たことがある人もいると思いますが、あれはCookieを利用しています。

Cookieは便利ですが安全性を考えないと危険な場面もあります。インターネットは多くの人が行き交う道路のようなものなので、注意せずに情報を流すと悪意のある人がデータを盗む可能性があります。ここで重要になるのがSecure属性とHttpOnly属性です。

2. Secure属性とは?HTTPS通信で安全にCookieを送るための仕組み

2. Secure属性とは?HTTPS通信で安全にCookieを送るための仕組み
2. Secure属性とは?HTTPS通信で安全にCookieを送るための仕組み

Secure属性とは、Cookieが「HTTPS通信の場合だけブラウザに送られるようにする」ための設定です。もしSecureを設定しないと、HTTPという暗号化されていない通信のときでもCookieがネットワークを流れてしまい、盗み見される可能性があります。これは、手紙を封筒に入れずに郵便屋さんへ渡すようなもので、中身が誰でも見える状態になります。

特にログイン情報やユーザーIDなど、大切な情報をCookieに保存している場合はSecure属性が必ず必要です。現在のWeb開発ではHTTPSが標準ですが、それでも明示的に設定しておくことでより安全なPHPアプリケーションを作れます。

PHPでSecure属性をつけてCookieを設定するときの例は以下のようになります。


setcookie(
    "user_token",
    "example_value",
    [
        "expires" => time() + 3600,
        "secure" => true,
        "httponly" => false,
        "samesite" => "Strict"
    ]
);

3. HttpOnly属性とは?JavaScriptからCookieを守る大切な仕組み

3. HttpOnly属性とは?JavaScriptからCookieを守る大切な仕組み
3. HttpOnly属性とは?JavaScriptからCookieを守る大切な仕組み

HttpOnly属性とは、CookieをJavaScriptから読み取れなくする設定です。これは、XSS(クロスサイトスクリプティング)攻撃という有名なハッキング手法を防ぐために使われます。もしサイト内に悪意のあるスクリプトが埋め込まれてしまった場合、JavaScriptでCookieを盗まれる可能性があります。ですが、HttpOnlyを設定しておけばJavaScriptがCookieを読み取れないため、安全性が大きく向上します。

例えると、誰でも開けられる引き出しではなく「鍵付きの引き出し」に大切なものをしまうイメージです。鍵を持っているのはPHPだけで、JavaScriptは開けられません。


setcookie(
    "session_id",
    "abc123",
    [
        "expires" => time() + 3600,
        "secure" => false,
        "httponly" => true,
        "samesite" => "Lax"
    ]
);

4. SecureとHttpOnlyを両方設定するのが必須レベルで重要

4. SecureとHttpOnlyを両方設定するのが必須レベルで重要
4. SecureとHttpOnlyを両方設定するのが必須レベルで重要

PHPで安全にCookieを利用するためには、SecureHttpOnlyの両方を設定することが非常に重要です。片方だけでは不十分で、インターネットのセキュリティリスクを十分に防止することができません。

特にログイン情報やセッションIDなど、ユーザー認証に関わるデータは必ず保護する必要があります。これらが漏れてしまうと不正ログインやなりすましが起きてしまうため、Webサービス全体の信頼性が下がります。

また、PHPの新しいバージョンでは配列形式でCookieを設定できるようになっており、セキュリティの設定をまとめて記述できるため、初心者でも分かりやすく安全なコードを書きやすくなりました。


setcookie(
    "auth_token",
    "xyz789",
    [
        "expires" => time() + 3600,
        "secure" => true,
        "httponly" => true,
        "samesite" => "Strict"
    ]
);
-

5. 初心者でも覚えやすいCookieセキュリティのチェックポイント

5. 初心者でも覚えやすいCookieセキュリティのチェックポイント
5. 初心者でも覚えやすいCookieセキュリティのチェックポイント

ここまでで、SecureとHttpOnlyの役割が理解できたと思います。初心者の人ほど、Cookieの安全な設定を習慣化しておくことが大切です。プログラミングでは、正しく仕組みを理解すれば難しいものでもありません。ここでは、初めてPHPでCookieを扱う人でも覚えやすいポイントをまとめておきます。

  • Cookieはブラウザに保存される大切なデータなので慎重に扱う
  • HTTPSを使っているサービスでは必ずSecureを付ける
  • JavaScriptから読み取られたくない情報にはHttpOnlyを付ける
  • ログイン情報やセッション管理は常にセキュリティを最優先にする
  • PHPの配列形式のsetcookieは初心者にも書きやすくておすすめ

Cookieはとても便利ですが、使い方を誤るとアプリケーション全体が危険にさらされる可能性があります。だからこそ、最初の段階でSecureとHttpOnlyをしっかり理解しておくことが安全なWeb開発の第一歩になります。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
PHP
PHPのCookieセキュリティを完全ガイド!初心者でもわかるSecureとHttpOnlyの使い方
New2
PHP
PHPのCSRF対策を完全理解!トークンを使った安全なフォーム送信の仕組みを初心者向けに徹底解説
New3
PHP
PHPのSQLインジェクション対策を完全解説!初心者でも安全にデータベースを扱う方法
New4
PHP
PHPでカウントダウンタイマーを作る方法!初心者向けにやさしく解説
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.2
Java&Spring記事人気No2
PHP
初心者向けPHPでMySQLからデータを取得する方法(SELECT文)完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonのリストの重複を削除する方法を解説!初心者向けにsetとdict.fromkeysの使い方をやさしく説明
No.4
Java&Spring記事人気No4
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.5
Java&Spring記事人気No5
PHP
PHPのXSS対策を完全ガイド!初心者でもわかる安全なWebアプリの作り方
No.6
Java&Spring記事人気No6
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.7
Java&Spring記事人気No7
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.8
Java&Spring記事人気No8
PHP
PHPのOAuth認証をやさしく解説!Google・Facebookログインを初心者向けに実装しよう
-
-