【ラスボス解説】Webエンジニアよ、Hettyで通信を掌握せよ
お前が尋ねてきたのは、dstotijn/hetty だな? ソフトウェアエンジニア、しかもセキュリティを意識する者にとって、こいつはただのツールじゃない。まさに"武器"だ。どう使うか、そしてなぜ重要なのか、一つずつ説明してやろう。
簡単に言えば、HTTPの交通を監視し、改ざんし、解析するためのプロキシツールだ。お前が普段使っているブラウザとサーバーの間に入り込み、HTTPリクエストとレスポンスを全て捕まえる。ちょうど、 のようなイメージだな。
俺たちはこれをMITM(Man-in-the-Middle)プロキシと呼ぶ。Webアプリケーションの脆弱性を探すセキュリティ診断や、ネットワーク通信のデバッグにおいて、こいつがどれほど強力な力を発揮するか、お前はまだ知らない。
<br>
なぜ、お前のようなプログラマーがこのツールを必要とするのか?
API通信のデバッグ
お前が作ったフロントエンドが、バックエンドAPIと正しく通信しているか? ヘッダーやボディの中身は? 期待通りのレスポンスが返ってきているか? Hettyを使えば、通信の全てを可視化できる。まるで、お前のコードの裏側で何が起きているか、透視するようなものだ。
セキュリティテスト お前のアプリケーションに、SQLインジェクションやクロスサイトスクリプティング(XSS)のような脆弱性はないか? Hettyを使えば、リクエストを改ざんして、さまざまな攻撃パターンを試すことができる。脆弱性を見つけるのは、お前自身が攻撃者の視点に立つことが最も効果的だ。
サードパーティ製ライブラリの解析
お前が使っている外部ライブラリやSDKが、裏側でどんな通信をしているか知りたいか? Hettyを使えば、その通信を全て捕獲し、解析できる。もし、意図しないサーバーにデータを送信しているような動きがあれば、すぐに見つけられる。
要するに、Hettyはネットワーク通信を完全に制御し、理解するための司令塔だ。これを使わずして、どうやって自分のアプリケーションを完全に掌握できると言うのだ?
<br>
Hettyの導入は驚くほど簡単だ。お前が普段使っているDockerを使えば、一瞬で準備が整う。
ターミナルを開いて、以下のコマンドを打ち込め。
docker run -p 8080:8080 -p 8001:8001 dstotijn/hetty
8080
Web UIにアクセスするためのポートだ。
8001
プロキシサーバーのポート。お前のブラウザやアプリケーションが、このポートに接続する。
このコマンドを実行すれば、Hettyのコンテナが立ち上がり、すぐに使えるようになる。
次に、お前のブラウザやシステムにプロキシを設定してやる必要がある。
ブラウザ
ブラウザのネットワーク設定で、プロキシサーバーを127.0.0.1、ポートを8001に設定する。
システム全体
OSのシステム設定で、プロキシを設定する。
アプリケーション
もし、お前が開発している特定のアプリケーションで使いたいなら、そのアプリケーションの設定でプロキシをhttp://127.0.0.1:8001に設定する。
これで準備は完了だ。お前がブラウザでWebサイトを閲覧すると、その通信は全てHettyを経由し、キャプチャされる。
ブラウザでhttp://127.0.0.1:8080にアクセスしてみろ。HettyのWeb UIが表示され、キャプチャされた通信のリストが見られるはずだ。
<br>
Hettyの真価は、お前のコードと組み合わせてこそ発揮される。ここでは、お前が作ったアプリケーションからプロキシ経由でリクエストを送信する例を見せてやろう。
Pythonのrequestsライブラリを使う場合、proxies引数を使うだけで簡単にHettyを経由させることができる。
import requests
# Hettyのプロキシ設定
proxies = {
'http': 'http://127.0.0.1:8001',
'https': 'http://127.0.0.1:8001',
}
# プロキシ経由でリクエストを送信
try:
response = requests.get('https://api.example.com/data', proxies=proxies, verify=False)
# verify=False は、自己署名証明書を使う場合に必要になることがある
print(response.json())
except requests.exceptions.RequestException as e:
print(f"エラーが発生しました: {e}")
このコードを実行すると、https://api.example.com/dataへのリクエストが全てHettyにキャプチャされる。Web UIでそのリクエストの詳細を確認し、必要ならレスポンスを改ざんして、お前のアプリケーションがどう振る舞うかをテストできる。
Node.jsでaxiosを使う場合も同様だ。proxyオプションを設定する。
const axios = require('axios');
// Hettyのプロキシ設定
const instance = axios.create({
proxy: {
protocol: 'http',
host: '127.0.0.1',
port: 8001,
},
// httpsの場合、自己署名証明書を許可するために以下が必要
httpsAgent: new (require('https').Agent)({
rejectUnauthorized: false
})
});
// プロキシ経由でリクエストを送信
instance.get('https://api.example.com/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(`エラーが発生しました: ${error.message}`);
});
どうだ? これが、お前が知るべきHettyの全貌だ。ただのプロキシツールではない。お前の開発とセキュリティの力を、次のレベルへと引き上げるための、強力な相棒だ。