harファイルってなんですか？？？

こんにちは！現在バックエンドエンジニアとして受託系企業に勤めているヒデボーと申します。
RUNTEQというプログラミングスクールに通い、10月から働き始めたばかりです。
そんな実務の中での雑談で、harファイルなるものが存在するとPMの方から教えていただき、これは面白いなと思い今回はそのharファイルについての記事を書いていこうと思います！

**この記事は「RUNTEQ Advent Calendar 2024」の 15 日目を担当しています。**

## はじめに

皆さんはharファイルというものを聞いたことがあるでしょうか？
初めて聞いた時、誰もが下記の記事で言われている通り「ハァ？」と思ったことでしょう。
[harファイルくれっていわれるとハァ？って言いたくなる話](https://qiita.com/naoki_kameyama/items/45f560fa0ee0bf898ec6)

かくいう私もPMから言われた時に「何言ってんだこの人？」と思った事を思い出します。
さて、このharファイルですが他人と共有する事ができるのですが、知らずに共有すると危険なんやで工藤...という事について触れていきたいと思います。

## そもそもharファイルとは？
harファイルとはHTTP Archive formatファイルの略で、ブラウザとウェブサーバー間の通信内容を記録したファイルの事です。
ブラウザがページの読み込みを行う際に発生するHTTP通信のリクエストやレスポンスデータが保存されます。

JSON形式で記録され、HTTP通信の内容に加えてページのロード時間などのwebブラウザとサイトのやり取りに関するパフォーマンス分析に役立つ情報も含まれています。
**皆さんがよく使用するDeveloperTool**のネットワークタブを見たことがあるかと思うのですが、あれをJSON形式のファイル化したものと思っていただければイメージはしやすいかと思います。

**主な用途:**
- ウェブサイトのパフォーマンス・セキュリティ診断
- エラー原因の調査
- ウェブサイトの読み込み順序の確認
- 開発者間での情報共有

などharファイルを使用して様々なことに活用ができます。
ではこのharファイルを他人に共有する事で何が危険なのかについてみていきましょう。
## harファイル共有のリスク
harファイルには様々なデータが記録されているので、他者にharファイルを提供してしまうと、セキュリティリスクが大きいと言われています。

### どの様なリスクがあるのか？
- **アカウントのなりすましの危険**
cookie情報やセッションIDなども含まれるため、第三者に渡すとセッションハイジャックによるアカウントを乗っ取られる危険があります。

- **個人情報・機密情報の漏洩**
フォームに入力した情報も記録されるので、名前、電話番号、メールアドレス、クレジットカード情報なども記録される危険性があります。

ちなみにformのfieldをhiddenで設定していてもその情報は記録されます。
では本当に情報が含まれているのかを実際に検証しながらみていきたいと思います。
今回某WEBサイトを使用して検証してみました。

**「パスワードをお忘れの方はこちら」** のリンクからメールを送ったところ
idとパスワードが記載されたメールが送信されてくるという恐怖体験をしたサイトだったのでわかりやすく記録されているだろうと思い検証に使用してみます。

### 実際にharファイルを取得して検証をしてみる。
harファイルの取得方法については下記を参考にしました。
[harファイルの取得方法](https://qiita.com/naoki_kameyama/items/45f560fa0ee0bf898ec6#chrome-devtools)

では上記で触れたサイトのログイン画面で必要事項を記入しログインボタンを押下した時のharファイルを取得してみます。
今回はログイン失敗時にharファイルを取得して見ていきます。

![スクリーンショット 2024-12-15 16.41.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623154/d686c318-5f16-2243-d56c-842c60b2a9a2.png)


```json
{
  "log": {
    "version": "1.2",
    "creator": {
      "name": "WebInspector",
      "version": "537.36"
    },
    "pages": [
      {

//
          
          "cookies": [],
          "headersSize": 1064,
          "bodySize": 39,
          "postData": {
            "mimeType": "application/x-www-form-urlencoded",
            "text": "loginid=test_user&passwd=test1234567789", //id, passが記録
            "params": [
              {
                "name": "loginid",
                "value": "test_user" // ログインIDが記録
              },
              {
                "name": "passwd",
                "value": "test123456789" // パスワードが記録
              }
            ]
          }
        },
```

formに入力した内容がわかりやすく記録されていますね。
password部分は画面上ではマスクされていましたが、harファイルにはマスクされていない状態で記録されています。
何も知らずに他人に共有すると簡単にアカウントを乗っ取られる事が想像できますね。

ちなみにセキュリティのしっかりしている大手の通販サイトでもログイン時のharファイルには機密情報が記録されます。(個人情報部分はマスクして加工しています。)

```json
{
  "log": {
    "version": "1.2",
    "creator": {
      "name": "WebInspector",
      "version": "537.36"
    },
    
    // ....
    
          "cookies": [],
          "headersSize": -1,
          "bodySize": 11288,
          "postData": {
            "mimeType": "text/plain;charset=UTF-8",
            "text": "{\"clientReferenceId\":\"ap\",\"clientData\":\"{\\\"emailAddress\\\":\\\"***@email.com\\\",\\\"sessionId\\\":\\\*****\\\",
```

また、harファイルはPOSTデータだけではなくWEBページのレンダリングに関する情報も含まれているので、個人情報を表示するページでは下記のように住所や電話番号などの情報も記録されます。

```json
{
  "log": {
    "version": "1.2",
    "creator": {
      "name": "WebInspector",
      "version": "537.36"
    },
    // ...
"cookies": [],
"content": {
  "size": 188778,
  "mimeType": "text/html",
	"text":
	
		// ....
		<ul>
			<li><span class=\"a-list-item\">
			<span id=\"address\" class=\"id-\">テスト県, テスト区
			<span id=\"address-\" class=\"id-\">テスト町1－1－1</span></span>
			</li><li><span class=\"a-list-item\"><span id=\"address\" class=\"id-\">テストマンション 302</span></span></li>
			<li><span class=\"a-list-item\"><span id=\"address-\" class=\"id-\">Japan</span></span>
			</li><li><span class=\"a-list-item\"><span id=\"address-\" class=\"id-\">
				電話番号: ‪08011111111‬</span></span></li>
		</ul>
	
```

こうした個人情報が多く含まれているためharファイルの取り扱いには細心の注意が必要です。
もし知らない人に「パフォーマンスの改善をしたいからharファイルを共有して…ムフフ」と言われても安易には共有しないように気をつけましょう。
もし共有する場合は
- 個人情報が含まれていないかの確認をする
- マスキングツールの使用する

https://dev.classmethod.jp/articles/learn-about-tools-to-mask-sensitive-information-in-har-files/

などの対策をするようしていただくのが安全かと思います。
いまだにharファイルを共有してと言われた場面はないですが(笑)

## 最後に

雑談から気になって調べてみると意外と面白かったので今回記事にしてみました。
セキュリティに関しては私自身わからない事だらけですのでこれを機に勉強を進めていこうと思います。

## 参考記事:
[harファイルくれっていわれるとハァ？って言いたくなる話](https://qiita.com/naoki_kameyama/items/45f560fa0ee0bf898ec6)

[なんかバグが起きました… そんな時はHAR(HTTP Archive)！](https://qiita.com/naka_kyon/items/545dfc7407c78ab09b98)

[**HAR ファイルの機密情報をマスクするツールについて紹介します**](https://dev.classmethod.jp/articles/learn-about-tools-to-mask-sensitive-information-in-har-files/)