令和最新版!「うわっ……わたしのウェブサイト、古すぎ?」

アンチパターンを集めた。一個でも当てはまったら修正してください。私の精神が安定します。

お客様の安全のために、不便にしています

#アンチパターン何が問題なのか
01確認メールが異世界に届くサインアップ後に確認メールが届かない。再送もできず、登録できたかすら分からない。
02独自進化したサインアップメールアドレスで登録したつもりが、謎のユーザーIDや初期パスワードが必要になる。一般的な登録フローから逸脱している。
03パスワード一本足打法パスキーにもMFAにも対応していない。パスワードが漏洩すれば、それだけでアカウントを乗っ取られる。
04パスキー?何それ、おいしいの?WebAuthnもFIDO2も普及しているのに、いまだにパスワード認証しか提供しない。
0590日ごとに記憶力テストパスワードの定期変更を強制する。変更のたびに覚えやすい弱いパスワードを作らせる結果になりかねない。
06記号と大文字がセキュリティの証大文字・小文字・数字・特殊記号の組み合わせを強制する。長さや漏洩済みパスワードの排除より文字種ルールを重視する。
07パスワードは8〜16文字です長いパスフレーズやパスワードマネージャーが生成した強力なパスワードを拒否する。
08コピペ禁止という謎の防御策パスワードの貼り付けや自動入力を禁止する。パスワードマネージャーの利用を妨害している。
09秘密の質問という公開情報「母親の旧姓」「最初のペットの名前」など、調査やSNSから推測できる情報を認証・復旧に使用する。
10SMSさえ送れば二要素認証より強力な認証手段を用意せず、SIMスワップなどのリスクがあるSMS認証に依存する。
11メールを送ったから多要素認証パスワードとメール認証コードを組み合わせるだけで、独立した認証要素によるMFAが実現したと考えている。
126桁のコードを6回に分けて入力ワンタイムパスワードを1文字ずつ別フィールドに入力させ、6桁まとめての貼り付けもできない。
13ログイン画面にログイン方法がないSSOやパスキーを登録していても、どこからログインすればよいのか分からない。
14二要素認証は毎回、でもログイン状態は30秒不必要に短いセッション有効期限と、繰り返される認証操作。リスクに応じたセッション管理がない。

セキュリティの設定はありませんが、パスワードは変更できます

#アンチパターン何が問題なのか
15アカウント設定はある。セキュリティ設定はないパスワード変更以外のセキュリティ機能が用意されていない。
16どこからログインされているかは秘密ですログイン履歴、使用デバイス、アクティブなセッションを確認できない。
17ログアウトは、この端末だけ不審なセッションを発見しても、他の端末から強制ログアウトさせられない。
18パスキーは登録できるが削除できない登録した認証器を確認、識別、管理、削除する手段がない。
19アカウント復旧は電話してください本人確認が必要な復旧処理を、理由の説明もなく平日の電話窓口に限定する。
20安全なログイン、無防備な復旧ログインに強力なMFAを要求する一方、メールだけ、あるいは秘密の質問だけで認証をリセットできる。
21パスワード再設定メール無限ループリンクが期限切れになる、使用済み扱いになる、アプリとブラウザの切り替えで失敗する。
22重要な設定変更を黙って実行メールアドレス、パスワード、認証手段が変更されても通知しない。
23アカウント削除はお問い合わせくださいアカウント作成は30秒でできるのに、削除するには問い合わせフォームや電話が必要。
24本人確認のために、また個人情報をください必要性や保存期間の説明もなく、本人確認のたびに追加の個人情報を収集する。

入力していただくことに意味があります

#アンチパターン何が問題なのか
25全角・半角警察数字や記号の全角・半角をユーザーに修正させる。システム側で正規化できる内容を人間に処理させている。
26住所は日本の住所しか存在しません郵便番号や都道府県が必須で、海外住所を入力できない。住所表記の多様性が考慮されていない。
27お名前は漢字でお願いします漢字氏名を必須とし、外国人や通称・旧字体などを想定していない。
28生年月日を選ぶために40年間スクロールカレンダーUIで年月を1か月ずつ戻さないと生年月日が指定できない。
29「戻る」は「最初からやり直す」の意味前の画面に戻っただけで入力した内容が失われる。
30一時保存という概念がない長いフォームを中断すると、それまでの入力がすべて失われる。
31入力内容に誤りがありますどの項目が、なぜ間違っているのか表示しない。
32すべて必須項目ですサービス提供に不要な住所、電話番号、生年月日まで入力させる。
33二度入力すれば正確になるという信仰一度入力した氏名や住所を、確認画面や決済画面で再入力させる。

動作確認は開発者のPCで完了しました

#アンチパターン何が問題なのか
34マウスがない人はお断りキーボードだけでは操作できない。Tabキーで移動できない、Enterキーで実行できない。
35見た目がボタンならボタンですdivやspanをクリック可能にしただけで、適切なHTML要素やアクセシビリティ情報がない。
36今どこにいるかは勘で分かるキーボードフォーカスが視覚的に分からない。
37押したいボタンは広告の下固定ヘッダー、バナー、ポップアップが重要な操作要素を覆っている。
38デザイナーには読める薄いグレーコントラスト不足で文字が読みづらい。
39ホバーすると秘密のメニューが現れるマウスホバーに依存し、タッチ操作やキーボード操作では機能が見つからない。
40スマートフォンは小さなPCです画面を縮小しただけのレイアウト。タップ領域や入力方式がスマートフォンに最適化されていない。
41ポップアップを閉じるのはミニゲーム閉じるボタンが小さい、画面外にある、Escキーで閉じられない。

ロボットではないことを証明してください。AIのほうが得意ですが

#アンチパターン何が問題なのか
42AIにも解けるCAPTCHAで人間を苦しめるAIや自動化ツールで突破できる場合がある一方、視覚障害者や一般ユーザーには大きな負担になる。
43CAPTCHAさえあれば安全CAPTCHAを主要なボット対策と考え、レート制限、不正行動の検知、リスクベース認証などを実装していない。
44自動操作は禁止。ただしAPIもありませんユーザーが自分のデータを操作・連携する正式な手段を提供していない。
45人間にしか分からないボタンボタンの意味や操作状態がHTMLのセマンティクスとして表現されていない。スクリーンリーダーにもAIにも解釈しにくい。
46エージェントにも全権限を渡してくださいAI連携に必要な操作範囲だけを許可する仕組みがない。アカウント全体へのアクセス権を要求する。
47AIの操作も人間の操作も区別しません代理操作の権限、実行主体、操作履歴などを管理できない。
48確認なしで取り消せない操作を実行AIや自動化ツールが操作した場合も、削除・購入・送信などを確認や取り消しの機会なしに実行してしまう。
49データは画面からコピーしてください機械可読なエクスポート手段がなく、CSV・JSONなどの標準的な形式で取得できない。
50スクレイピング対策が正規ユーザーを排除不正アクセス対策を一律に適用し、正当なユーザーの代理操作や支援技術まで妨害する。

お客様の同意を大切にしています。拒否ボタンはありません

#アンチパターン何が問題なのか
51同意するボタンしか見えませんCookieやトラッキングに関する同意画面で、拒否の選択肢が極端に分かりにくい。
52設定変更は迷路の奥にありますプライバシー設定の変更や同意撤回まで何階層も移動させる。
53おすすめ設定は全部オン広告、トラッキング、個人情報共有などを、ユーザーに不利な初期設定にしている。
54登録したのでメルマガを送りますサービスへの登録とマーケティングメールへの同意を混同している。
55無料だと思いましたか?有料契約への移行条件や更新時の請求額が分かりにくい。
56サブスク解約は脱出ゲーム契約はオンラインで完結するのに、解約には電話や複雑な手続きが必要。
57あなたのデータは我々のものですユーザー自身が登録したデータなのに、取得・移行・削除の方法が提供されていない。
58サービス改善のため何でも収集必要性が説明されないまま、大量の個人情報や行動履歴を収集している。

昔からこういう仕様なので

#アンチパターン何が問題なのか
59ブラウザの戻るボタンは使用禁止SPAなどで履歴管理が正しく実装されず、戻る操作で予想外の画面に移動する。
60すべてのページのURLが同じコンテンツへの直接リンクやブックマークができない。
61無限ローディング、永遠の希望通信エラーや処理失敗が発生しても、スピナーが回り続けるだけ。
62エラーが発生しました(以上)エラーの内容、回復方法、問い合わせに必要な情報が提示されない。
63一時的な失敗がデータ消失に直結通信失敗やセッション切れで入力中のデータが失われる。
64ブラウザによって動作が違います標準Web APIで実現できる機能なのに、特定ブラウザでしか動作しない。
65日付と時刻にタイムゾーンなどない日時のタイムゾーンが不明で、予約や締め切りを間違える原因になる。
66検索機能はあります。見つかりませんが完全一致しなければ結果が出ない。表記揺れ、スペース、同義語などへの配慮がない。
67閉じた広告が何度でも蘇る一度拒否・閉じる操作をした案内や広告が、画面遷移のたびに再表示される。

HTTPSなので安全です

#アンチパターン何が問題なのか
68認証していれば認可もできているログイン済みであれば、URLやIDを変更するだけで他人のデータにアクセスできてしまう。
69クライアントを信用するサーバーボタンの非表示やJavaScriptの入力チェックだけで操作を制限し、サーバー側で権限を検証していない。
70セキュリティアップデートは年中行事古いライブラリやフレームワークを放置し、既知の脆弱性への対処が遅れる。
71HTTP 200なら成功です処理が失敗してもHTTP 200を返し、エラー内容を独自のJSONフィールドだけで表現する。
72API仕様はソースコードを読んでくださいAPIの認証方式、スキーマ、エラー、レート制限などの仕様が公開・文書化されていない。
73トークンは永久不滅ですAPIキーやアクセストークンに適切な有効期限、失効、権限範囲の制御がない。
74誰が何をしたかは分かりません重要な操作や認証イベントの監査ログがなく、不正利用やインシデントを調査できない。
75バックアップは取っています。復旧は未経験ですバックアップの存在だけで安心し、復元テストや復旧手順の検証を行っていない。