├── 01_login_feature.md ├── 02_file_upload.md ├── 03_url_issue.md ├── 04_coupon.md ├── 05_authorization_control.md └── 06_mypage.md /01_login_feature.md: -------------------------------------------------------------------------------- 1 | # ログイン機能観点チェックリスト 2 | 3 | ## 共通 4 | 5 | - [ ] エラーメッセージは処理の成否に関わらず統一されている 6 | - [ ] レスポンスヘッダは処理の成否に関わらず統一されている 7 | - [ ] 処理時間は処理の成否に関わらず統一されている 8 | - [ ] 多要素認証が導入されている 9 | - [ ] reCAPTCHAが導入されている 10 | - [ ] IPアドレス単位の試行回数上限の導入が行われている 11 | 12 | ## PINコード 13 | 14 | - [ ] PINの桁数を6桁以上に設定している 15 | - [ ] PIN入力に回数制限を入れている 16 | - [ ] PIN入力の受付に時間制限を入れている 17 | - [ ] セッションやトークンの発行はPINの入力の成功を起点に発行している 18 | 19 | ## ログイン用リンク 20 | 21 | - [ ] ログイン用リンクは総当りや推測が不可能な形式で生成されている 22 | - [ ] ログインリンクの利用可能期限が定められている 23 | - [ ] サーバー側でリンクから遷移したユーザーのメールアドレス確認を行っている 24 | -------------------------------------------------------------------------------- /02_file_upload.md: -------------------------------------------------------------------------------- 1 | # ファイルアップロード機能観点チェックリスト 2 | 3 | ## アイコンや写真のファイルアップロード 4 | 5 | - [ ] ファイルの拡張子チェックがサーバーサイドで行われている 6 | - [ ] ファイル拡張子のチェックを正規表現による後方一致、または言語ごとの関数を利用して末尾の拡張子をチェックするようなやり方で行っている 7 | - [ ] 利用できるファイル形式を制限している 8 | - [ ] 許可する拡張子を「許可リスト方式」で確認している 9 | - [ ] ユーザーから送信された拡張子と実際のファイル形式を示すマジックナンバーが一致しているかを確認している 10 | - [ ] ファイル名にディレクトリを示す文字列(`/`,`\`,`:`)が使われている場合に取り除いている、もしくは別の文字列に置き換えている 11 | - [ ] 受け付けるファイルサイズを制限している 12 | - [ ] ファイル名に個人情報が含まれないように変更している 13 | - [ ] EXIF情報を削除している 14 | 15 | ## 業務データのCSV Bulk Import 16 | 17 | - [ ] 入力された値がアプリケーションの仕様にとって望ましいものかどうかチェックしている 18 | - [ ] 特殊記号 `=/+/-/@/Tab(0x09)/改行コード(\n,\r)/フィールド区切り文字(;/,)` が先頭に来ないようにしている 19 | 20 | ## 本人確認書類のアップロード 21 | 22 | - [ ] 不要なデータは削除する仕組みが導入されている 23 | - [ ] アップロードされたファイルにたいして適切なアクセス制限が行われている 24 | - [ ] ファイル名の推測を困難にしている -------------------------------------------------------------------------------- /03_url_issue.md: -------------------------------------------------------------------------------- 1 | # セキュアなURL生成観点チェックリスト 2 | 3 | - [ ] 発行されたURLが連番になっていない 4 | - [ ] 発行されたURLに日付が含まれていない 5 | - [ ] 発行されたURLを生成するのに単純な値を用いて生成されたハッシュ値が用いられていない 6 | - [ ] ソースコードやAPIレスポンスにURLが露出していない 7 | - [ ] 総当りでアクセスできてしまうような桁数、文字種になっていない 8 | -------------------------------------------------------------------------------- /04_coupon.md: -------------------------------------------------------------------------------- 1 | # クーポン機能観点チェックリスト 2 | 3 | ## 広く公開され一回しか使えないクーポン 4 | 5 | - [ ] サーバー側でクーポン利用状態を管理している 6 | - [ ] 排他制御を行いレースコンディションを防いでいる 7 | 8 | ## 限定公開されるクーポン 9 | 10 | - [ ] クーポンコードが連番になっていない 11 | - [ ] クーポンコードが総当りできない 12 | - [ ] 発行対象のユーザーとクーポンコードの紐付けを行っている 13 | 14 | ## 利用条件のあるクーポン 15 | 16 | - [ ] サーバー側で利用条件のバリデーションを行っている 17 | 18 | ## クーポンごとに割引率が異なるクーポン 19 | 20 | - [ ] サーバー側でクーポンの割引率を計算している -------------------------------------------------------------------------------- /05_authorization_control.md: -------------------------------------------------------------------------------- 1 | # 認可制御の不備観点チェックリスト 2 | 3 | ## 権限管理 4 | 5 | - [ ] GUIから機能を隠すだけではなく、サーバー側でエンドポイントにアクセスしてきたユーザーが権限のあるユーザーかどうかを判定している 6 | - [ ] GETのクエリやPOSTのパラメータだけで操作元ユーザーの判別を行っていない(セッション等からユーザーを取得している) 7 | - [ ] GETのクエリやPOSTのパラメータに操作権限に関するパラメータを含んでいない(操作権限はサーバー側でユーザーID等を用いてデータベースから取得している) 8 | 9 | ## マルチテナントサービスでの他テナントへの侵犯 10 | 11 | - [ ] エンドポイントへアクセスしたユーザーがそのテナントのユーザーかどうかを判定している 12 | 13 | ## 権限昇格 14 | 15 | - [ ] 一般ユーザーが情報変更を行う際に権限に関するパラメータを指定して権限を変更できない(一般ユーザーが変更できるパラメータを制限している) 16 | - [ ] 一般ユーザーが管理者権限ユーザーの認証情報を変更できない(認証情報変更時にユーザーの判定を行っている) 17 | - [ ] 一般ユーザーが管理者ユーザーを作成可能でない(一般ユーザーの作成時にパラメータに権限に関する情報を含んでいない) -------------------------------------------------------------------------------- /06_mypage.md: -------------------------------------------------------------------------------- 1 | # マイページ機能観点チェックリスト 2 | 3 | ## /{id} の形式のURLの場合 4 | - [ ] 更新、削除の操作を行うとき、送信元ユーザーが変更対象のユーザーと一致しているか調べている 5 | - [ ] マイページのGUIで表示する情報以外の余分な情報がレスポンスに含まれていない 6 | - [ ] ユーザーのIDがURLの予約語と重複しないように対処している 7 | 8 | ## /me のような形式のURLの場合 9 | - [ ] 最初にアクセスしたユーザーの情報が他のユーザーに表示されないように、キャッシュを制御している --------------------------------------------------------------------------------