【バルスの呪文】Python+Flaskでウェブサイト自爆ボタンを作ってみた
たとえば自分が運営しているウェブサイトが、何らかの理由で炎上したり、何者かに乗っ取られたりしたとき、管理者の意思でウェブサイトをただちに消滅させることができれば、被害を最小限に喰いとどめられるだろう。
いざというときに頼りになるのは自爆のみ。このことはラピュタのアニメを観ても明らかである。
作ったもの
以下はデモサイトです。
https://balse.herokuapp.com/leete_latobarita_uruth_ariaroth_bal_netoreel
画面中央にあるBALSEボタンを押すと、そのウェブサイト上の全ファイルが物理削除され、誰もそのサイトにアクセスできなくなります。
ちなみに、上のデモサイトを開いたときに「This website has been balesd by someone.」というメッセージが表示された人は、すでに通りすがりの誰かがBALSEボタンを押してサイトを破壊してしまった後なので、当面アクセスできません。
気まぐれで再デプロイするので、運が良いと下図のような画面が表示されます。
ソースコード
ローカル環境で動作させる方法
自分のPCでローカルサーバを立てて、画面を表示する方法を説明します。
少し危険なコードなので、くれぐれも削除するディレクトリのパスをCドライブに書き換えたり、プログラムファイルを元あったディレクトリの外に移動させたりしないようにしてください。すべて自己責任でお願いします。
動作確認したバージョン
- python 3.6.8
- flask 1.0.3
上記のバージョンは下記のコマンドで確認できます。
$ flask --version
Flaskがインストールされていない場合は、下記のコマンドでFlaskをインストールします。
$ pip install Flask
手順
すでにPythonの実行環境は整っているものとします。
Gitからリポジトリをクローンしてきます。
$ git clone https://github.com/yoshy-toshy/balse.git
次に、balseフォルダの中に移動し、laputa_command.py(Flaskのサーバ起動処理を含むPythonファイル)を実行します。
$ cd balse
$ python laputa_command.py
ここでサーバが起動します。
おそらく5000番ポートが開いたと思うので、以下のURLにアクセスします。
http://localhost:5000/leete_latobarita_uruth_ariaroth_bal_netoreel
なお、URL中のleete_latobarita_uruth_ariaroth_bal_netoreelというのは、laputa_command.pyの中で定義されているバルス画面へのパスです。
バルスの対象範囲は、基本的にlaputa_command.pyが置かれているディレクトリ以下すべてです。 ただし、laputa_command.py自身は消されずに残ります。
Herokuで動作させる方法
ローカル環境ではなく、Herokuで動作させる方法を説明します。 Herokuとは、自分の構築したウェブサイトをデプロイし、一般公開することができる環境です。一定の制限内ならば、無料で利用できます。
Githubに自分用のリポジトリを作成
HerokuはGithubのブランチと連携することにより、簡単に開発物をデプロイすることができます。
(おそらく前章でローカルに落としてきたリポジトリはバルスによって消失してしまっているのではないかと思うので)再びクローンして正常に動作することを確認します。
その後、Githubに自分用のリポジトリを作成してプッシュします。
Herokuにデプロイ
Herokuアカウントを持っていない場合、以下の公式サイトでアカウントを作成します。
アカウント登録が完了したら、適当な名前で新規アプリを作成し、先ほどGithubで作成したリポジトリのブランチと連携設定をします。 新規アプリ作成からブランチとの連携については、以下のページが参考になりました。
デプロイが完了したら、以下のURLを改変してバルス画面にアクセスします。
https://{アプリ名}.herokuapp.com/leete_latobarita_uruth_ariaroth_bal_netoreel
以上で完成です。
現在存在しているのはバルス画面だけですが、あとは自分の好きなようにページを追加するなどして自身のウェブサイトを構築できます。 BALSEボタンを押してウェブサイトを破壊してしまった場合、もう一度Herokuの管理画面からデプロイすれば、初期状態に復元することができます。