Skip to content

Commit e375a27

Browse files
committed
sms article
1 parent 8c5dcff commit e375a27

File tree

3 files changed

+119
-2
lines changed

3 files changed

+119
-2
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
## 1. 結論
2+
3+
<Table>
4+
<Thead>
5+
<Th>メソッド</Th><Th>呼び出し履歴のクリア</Th><Th>実装/戻り値のリセット</Th><Th>オリジナルの実装に戻す</Th><Th>主な用途</Th>
6+
</Thead>
7+
<Tbody>
8+
<tr>
9+
<Td><code>mockClear</code></Td><Td>✅</Td><Td>❌</Td><Td>❌</Td><Td>呼び出し履歴のみをリセット</Td>
10+
</tr>
11+
<tr>
12+
<Td><code>mockReset</code></Td><Td>✅</Td><Td>✅</Td><Td>❌</Td><Td>実装や戻り値も含めて完全にリセット</Td>
13+
</tr>
14+
<tr>
15+
<Td><code>mockRestore</code></Td><Td>✅(スパイのみ)</Td><Td>✅(スパイのみ)</Td><Td>✅(スパイのみ)</Td><Td>元の実装に戻し、テスト終了後に元に戻したい場合に使用</Td>
16+
</tr>
17+
</Tbody>
18+
</Table>
19+
20+
## 2. 各メソッドの挙動の違い
21+
22+
### `mockClear`
23+
- **役割**: モック関数の呼び出し履歴をクリア
24+
- **影響**: 関数の実装や戻り値の設定には影響しない
25+
- **主な用途**: 同じモックを複数のテストで使う際に呼び出し履歴だけをリセットしたい場合
26+
27+
### `mockReset`
28+
- **役割**: 呼び出し履歴とともにモック関数の実装や戻り値のリセットも行う
29+
- **影響**: `mockImplementation`などで設定した実装もクリアされる
30+
- **主な用途**: 完全に初期状態に戻し、別のテストで異なる実装を設定したい場合
31+
32+
### `mockRestore`
33+
- **役割**: `jest.spyOn`で設定した関数を元の実装に戻す
34+
- **影響**: モジュールのオリジナルの実装を元に戻し、テスト終了後に元の動作に復元
35+
- **主な用途**: オリジナルの実装を一時的にモックしてテストを行い、テスト後に戻したい場合
36+
37+
## 3. 具体例
38+
39+
### `mockClear`の使用例
40+
```javascript
41+
const myMock = jest.fn();
42+
myMock('first call');
43+
myMock.mockClear();
44+
console.log(myMock.mock.calls.length); // 出力: 0
45+
```
46+
47+
### `mockReset`の使用例
48+
```javascript
49+
const myMock = jest.fn().mockReturnValue('initial value');
50+
console.log(myMock()); // 出力: 'initial value'
51+
myMock.mockReset();
52+
console.log(myMock()); // 出力: undefined
53+
```
54+
55+
### `mockRestore`の使用例
56+
```javascript
57+
const myFunction = jest.spyOn(myModule, 'myFunction');
58+
myFunction.mockImplementation(() => 'mocked value');
59+
console.log(myModule.myFunction()); // 出力: 'mocked value'
60+
myFunction.mockRestore();
61+
console.log(myModule.myFunction()); // オリジナルの実装に戻る
62+
```
63+
64+
## 4. まとめ
65+
66+
- `mockClear`は、呼び出し履歴だけをリセットして実装は保持したいときに使う。
67+
- `mockReset`は、呼び出し履歴も実装もリセットし、完全に初期状態に戻したいときに使用。
68+
- `mockRestore`は、スパイを元の実装に戻し、テスト後の実装復元が必要な場合に便利。
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
ショート・メッセージ・サービス(SMS)は、携帯電話との間で短いメッセージを送受信する機能です。メッセージの送信は、受信者の電話番号宛に行われます。
2+
3+
この SMS 上で起こるフィッシング詐欺 (スミッシング) は増え続けています。
4+
5+
# セキュリティ上の問題点
6+
7+
SMS の問題として**プロトコル自体に送信者を認証する仕組みがない**事が挙げられます。
8+
9+
SMS のなりすましは、送信元 ( Alphanumeric Sender ID ) に英数字を利用した場合に発生します。**送信元が電話番号の場合は、なりすましを判別できるので送信されることなく廃棄されます**
10+
11+
しかし SMS の送信元に英数字が設定されている場合、なりすましの判別は不可能です。これは受信側に送信元の電話番号がデータとして送られないためです。 SMS の送信元が電話番号である場合は、フィルタングを行うことは可能ですが、送信元に英数字が設定されている場合、送信元の電話番号がわからないため、なりすましを検知することができません。
12+
13+
この仕様が**スミッシング ( SMS によるフィッシング詐欺 )** による被害を増加させます。
14+
15+
# スレッドが同じでも送信者が同じとは限らない
16+
17+
ほとんどのモバイル端末(少なくとも Android と iPhone)では、送信元ごとにスレッドが作られるようです。この時に送信元が英数字の場合、偽装されたメッセージと正規なメッセージを判別できません。よって、偽装したメッセージと正規のメッセージが同じスレッドに表示されてしまいます。 2019 年には、ドコモに偽装したメッセージが送信された事件も発生しています。
18+
19+
https://internet.watch.impress.co.jp/docs/news/1191600.html
20+
21+
私の環境で試しに [Twilio](https://www.twilio.com/en-us) を使い、 Slack を偽装してメッセージを送信してみました。
22+
以下のように送信元が  Slack  のスレッドの中に私の偽装したメッセージが表示されているのが確認できます。
23+
24+
![](https://storage.googleapis.com/zenn-user-upload/33820043a639-20240205.png)
25+
26+
## 送信者側の対策
27+
28+
**送信者がスミッシングによる被害を抑えるためには、電話番号を送信元に設定する**ことが重要です。送信元に英数字を設定することはマーケティングの観点から見ると魅力的ですが、受信者のセキュリティリスクが高まります。送信元に電話番号を使用することで、なりすましのリスクを軽減し、同じスレッドに偽装されたメッセージが表示されることを防ぐことができます。
29+
SMS の送信元の設定は、慎重な検討をお勧めします。
30+
31+
## 参考
32+
33+
https://internet.watch.impress.co.jp/docs/news/1191600.html
34+
https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9#cite_ref-10
35+
https://srad.jp/comment/3645941
36+
https://akaki.io/2019/sms_spoofing
37+

app/posts.json

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,25 @@
44
"id": "engineering",
55
"date": "2024-11-15",
66
"title": "1 人で開発すること",
7-
"tags": ["engineering"]
7+
"tags": ["thoughts"]
88
},
99
{
1010
"id": "postgres-upsert",
1111
"date": "2024-11-14",
1212
"title": "PostgreSQL で UPSERT",
13-
"tags": ["engineering, postgres"]
13+
"tags": ["postgres", "sql"]
14+
},
15+
{
16+
"id": "jest-mock-method",
17+
"date": "2024-10-10",
18+
"title": "Jestの mockClear, mockReset, mockRestore の使い分け",
19+
"tags": ["jest", "javascript"]
20+
},
21+
{
22+
"id": "sms-problems",
23+
"date": "2024-02-01",
24+
"title": "SMS の恐ろしい仕様",
25+
"tags": ["sms"]
1426
}
1527
]
1628
}

0 commit comments

Comments
 (0)