badtodo-railsは、徳丸浩さんによるockeghem/badtodo にインスパイアされた、Ruby on Rails + React.jsで作成された「やられサイト」です。
※アイデア等の借用について、徳丸浩さんの了承を得て作成しています。
freeeの技術スタックを使い、社内セキュリティ教育のために開発をしましたが、OSSとして公開しています。ライセンスはApache 2.0になります。
現状は骨組みができただけで、実装されている脆弱性はわずかですが、今後充実させていく予定です。
任意のディレクトリに移動し、リポジトリをcloneしてください。
その後、badtodo-rails
ディレクトリに移動して下記コマンドを実行し、dockerコンテナを起動します。
docker compose up -d
dockerコンテナが起動されていることを確認したのちに、下記コマンドを実行します。 このコマンドは、DBの初期化および初期値を行うものです。コンテナ作成後、一回だけ実行します。
./setup.sh
このアプリケーションは、以下の構成で動作します。
frontend: localhost:3000で動作するReactアプリケーション
api: localhost:3001で動作するrailsアプリケーション(APIモードで動作します)
db: localhost:3307で動作するmysqlデータベース
- ログイン前:一覧、新規追加、お問い合わせ、ログイン
- ログイン後:一覧、新規追加、お問い合わせ、マイページ、ログアウト
- 登録したメールアドレスとパスワードを入力して認証する。
- アクセストークンを発行して、ローカルストレージに保管する。
- ログイン処理で発行したアクセストークンを使用してアクセスの制御をする。
- ローカルストレージにあるアクセストークンをバックエンドに渡し、トークン情報をローカルストレージから破棄する
- 問い合わせをするための画面を表示(問い合わせ処理は未実装)
- todo,期限、他ユーザに公開するかどうか、メモ、添付ファイル、URL,URLの表示タイトルを入力して登録する
- ログインしたユーザのID、メールアドレス、パスワード、アイコン、種別を表示する
- 自分のtodo一覧や公開設定している他ユーザのtodo一覧を表示する
- 管理者権限を持っている場合に限り、登録している全ユーザのID,パスワード、メールアドレス、アイコン、種別
- todoのID、todoの内容、todoの登録日、todoに設定している期限、完了しているかどうか、todoに関する添付ファイル、todoに関するメモ、todoを説明するためのURL、登録したtodoを他ユーザに登録するかどうかを表示する
フロントエンドからのリクエストを受け取り、結果を返すAPIとしての機能
- GET /todos : 一覧表示アクション (index)
- POST /todos : 新規作成アクション (create)
- GET /todos/:id : 詳細表示アクション (show)
- PATCH/PUT /todos/:id : 更新アクション (update)
- DELETE /todos/:id : 削除アクション (destroy)
devise-token-authにて実装
- POST /auth : ユーザー新規登録
- POST /auth/sign_in : ログイン
- DELETE /auth/sign_out : ログアウト
- GET /auth/validate_token : トークンの有効性確認
脆弱性の詳細と対策の答え合わせはAnswer.mdを参照してください。
XSSとは,悪意あるコードをWebページのユーザに実行させる攻撃のことでず。ユーザの入力をそのままHTMLに埋め込んでしまうと発生する可能性があります。
SQLインジェクションとは、Webアプリケーションにおいて、不正なSQL文を実行させる攻撃のことです。クライアントから送られてきたデータをそのままSQL文に埋め込んでしまうと、SQL文を改竄されてしまう可能性があります。