Go言語によるWebアプリケーション開発 チャットアプリのその後


本記事について

Go言語によるWebアプリケーション開発のチャットアプリでちょっと遊んでみます
チャットアプリを外部公開する方法と、なりすましについての説明があります。
後者は手元のサーバ以外に実施すると、法に触れる可能性があります。悪用厳禁です

外部公開

ngrokを使用し、指定したポートを外部に公開することができます。
(画像にある通り、セッションは8時間で途切れてしまうみたいなので。実用的ではないですね)

$ ngrok http 8080


実行すると、URLなどの情報がでてきます。後でhttpの方を使用します。

本の手順でgoogle developer consoleを設定したら、
認証情報のOAuth 2.0 クライアント IDというところを以下の画像のように設定します。

ここで、2つのURIはngrokで表示されていたものを使用しています。再現する場合は適宜置き換えてください

OAuth 2.0 クライアント IDの画面の右上の方にクライアント IDクライアント シークレットの情報があるので
その情報とngrokのURLを使用し、main.goの53行目、google.New()の中身を書き換えます。

main.go
google.New("[クライアントID]", "[クライアントシークレット]", "http://94150776.ngrok.io/auth/callbackgoogle"),

これで準備完了です。ビルドし、実行します。

$ go build
$ ./chat
2020/04/05 16:10:17 Webサーバーを開始します。ポート :8080

http://94150776.ngrok.io/loginをブラウザで開くと、ログイン画面が表示されます。
googleアカウントを使用してログインすると、チャットができるようになっています。
複数タブでアカウントを変えたり、友達を招待したりして遊べます。

遊ぶ

このチャットアプリ、名前や画像が自己申告制なので簡単になりすましができてしまいます。
※ 手元のサーバでも、他のユーザがいる状態で実行すると混乱を招く可能性があります。悪用厳禁です

やってみましょう。

デベロッパーツールのコンソールでcookieを確認します。

> console.log(document.cookie)
auth=[cookieの値]

cookieの値はbase64された文字列なので、複合します。
{"avatar_url":"[画像のURL]","name":"[名前]","userid":"[ユーザID]"}
アバターのURLや名前などのデータが入っています。値を書き換えてみます。
{"avatar_url":"https://help.qiita.com/images/qiitan-button.png","name":"きーたん","userid":""}
base64エンコードして、コンソールでcookieを書き換えます。

> document.cookie="auth=eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9oZWxwLnFpaXRhLmNvbS9pbWFnZXMvcWlpdGFuLWJ1dHRvbi5wbmciLCJuYW1lIjoi44GN44O844Gf44KTIiwidXNlcmlkIjoiIn0="

ブラウザを更新し、発言してみる

任意のユーザになりますことができた。

最後に

大事な事なので3回書きます。悪用厳禁です

最後まで読んでくださり、ありがとうございました。