結論(パスワード欄への貼り付けを許可)
パスワード欄への貼り付けを許可とは、ログイン画面や会員登録画面のパスワード欄で、onpaste="return false" やpasteイベントの拒否によって貼り付け(Ctrl+V)を妨げないことです。OWASP ASVS 5.0.0 V6.2.7(L1)、NIST SP 800-63B-4、WCAG 2.2 達成基準3.3.8はそろって貼り付けやパスワードマネージャーの利用を認めるよう求めています。貼り付け禁止は安全そうに見えて、短いパスワードの使い回しを招きます。
この記事のポイント
- 貼り付け禁止は、パスワードマネージャーが生成した長く一意なパスワードを使えなくし、弱いパスワードの使い回しやメモ書きを誘発します。
- OWASP ASVS 5.0.0 V6.2.7(L1)、NIST SP 800-63B-4 3.1.1.2、WCAG 2.2 達成基準3.3.8が、貼り付け・パスワードマネージャーを妨げないことを求めています。
- 確認用の「パスワード(再入力)」欄だけを貼り付け禁止にするのも同じく問題で、表示切替ボタンで代替できます。
- セキュリティAIチェッカーは、onpasteの拒否やpasteイベントのpreventDefaultの兆候があれば△、なければ○、パスワード欄がなければ対象外と判定します。
- 外部JSでの拒否は検出できない場合があるため、実機での貼り付け確認もあわせて行います。
| 診断項目名 | パスワード欄への貼り付けを許可 |
|---|---|
| 項目ID | forms.password-paste-policy |
| 分類 | フォーム・パスワード入力 |
| 重大度・配点の重み | 中(medium) 重み 2 |
| 関連する標準・ガイドライン | OWASP ASVS 5.0.0 V6.2.7(貼り付け・ブラウザのパスワード補助・外部パスワードマネージャーを許可する/L1)、NIST SP 800-63B-4 3.1.1.2(貼り付けを許可すべき=SHOULD、パスワードマネージャーと自動入力を許可しなければならない=SHALL)、WCAG 2.2 達成基準 3.3.8 認証のアクセシビリティ(最低限、レベルAA)、OWASP WSTG-ATHN-07(弱い認証方式) |
パスワード欄への貼り付けを許可とは
パスワード欄への貼り付けを許可とは、ログイン画面や会員登録画面のパスワード欄で「貼り付け(Ctrl+V)」を妨げないことです。実際のサイトでは、onpaste="return false" という属性や、JavaScriptで paste イベントを拒否する処理によって、貼り付けを禁止している実装が見られます。
貼り付け禁止は一見すると安全側の対策に見えます。しかし実際には、利用者がパスワードマネージャーで生成した長く一意なパスワードを使えなくなり、短く覚えやすいパスワードの使い回しや、紙へのメモを誘発します。
国際的な標準はそろって「貼り付けを妨げない」ことを求めています。セキュリティAIチェッカーのこの項目は、診断AIが取得したHTML内に、パスワード欄への貼り付けを拒否する記述があるかを確認します。
貼り付け禁止の典型的な実装パターン
<!-- 典型例1:インライン属性で拒否 -->
<input type="password" name="pw" onpaste="return false;">
<!-- 典型例2:スクリプトで拒否 -->
<script>
document.getElementById('password').addEventListener('paste', function (e) {
e.preventDefault();
alert('パスワードは貼り付けできません');
});
</script>
確認用の「パスワード(再入力)」欄だけを貼り付け禁止にする例も多く見られます。しかし、パスワードマネージャーの生成値を確認欄に入力できなくなるため、同じく問題です。
なぜパスワードの貼り付けを許可すべきなのか(標準の要求)
主要な標準・指針の立場
| 出典 | 求めていること |
|---|---|
| OWASP ASVS 5.0.0 V6.2.7(L1) | 貼り付け機能、ブラウザのパスワード補助機能、外部パスワードマネージャーが許可されていることを検証する |
| NIST SP 800-63B-4(2025年版)3.1.1.2 | パスワードマネージャーと自動入力機能の利用を許可しなければならない(SHALL)。自動入力APIが使えない場面に備えて貼り付けを許可すべき(SHOULD) |
| WCAG 2.2 達成基準3.3.8(レベルAA) | 解説書は、パスワードマネージャーによる入力やコピー&ペーストを妨げると、代替手段がない限り達成基準を満たさないと説明 |
| 英国NCSCのブログ記事「Let them paste passwords」(現在はNCSCのサイトから削除済み) | 貼り付け禁止はパスワードの使い回しや単純化を招き、クリップボード経由の窃取リスクは小さいと指摘 |
ASVSのL1は最低限の水準であり、公開サービス全般が対象です。WCAG 2.2の観点では、記憶や転記が難しい利用者にとって、貼り付けは認証の前提となる支援機能です。
パスワードの貼り付け禁止についてよくある誤解
- 「貼り付け禁止はキーロガーやクリップボード窃取の対策になる」:端末がマルウェアに感染していれば、キー入力も画面も盗まれます。貼り付け禁止で防げるリスクは小さく、弱いパスワードを招く不利益のほうが大きいというのが標準の立場です。
- 「確認欄なら禁止してよい」:確認欄は入力ミス防止のためにありますが、マネージャー利用者にとっては二重入力の障害になります。表示切替(目のアイコン)で確認させる方法が推奨されます。
- 「autocomplete=offにすればより安全」:主要ブラウザはログイン欄の
autocomplete=offを無視して保存を提案することが多く、効果は限定的です。用途に応じてcurrent-password/new-passwordを指定するほうが適切です。これは「パスワードマネージャーに適したautocomplete」で確認します。
なお、パスワード欄の文字数上限は「64文字以上のパスワードをHTMLで妨げない」、入力欄が伏せ字になっているかは「パスワード欄のtype属性」の各項目で確認します。このページは「貼り付けを妨げないか」に絞って解説します。
パスワード欄への貼り付けを許可の診断基準(セキュリティAIチェッカー)
取得対象
外部診断強化モジュールが、トップページと、Ver2巡回で見つかった同一オリジンの追加ページ(ログイン・管理・アカウント系URLを優先)から最大2ページ、合計最大3ページのHTMLを使います。追加リクエストはGETのみで、JavaScriptは実行しません。
検出の手順
- 各ページのHTMLから
<input ...>タグを抽出し、type属性がpasswordのものをパスワード欄とします。 - パスワード欄の
onpaste属性値にreturn falseまたはpreventDefaultが含まれるものを「インラインでの貼り付け拒否」とします。 - ページ全体のHTML(インラインスクリプトを含む)で
preventDefault(を探します。その位置を起点に、直前およそ400字以内にpaste/clipboardの語があり、かつ、その語の前およそ900字以内またはpreventDefault(の後ろおよそ900字以内にpassword/passwd/pwdの語がある記述を「スクリプトによる貼り付け拒否の兆候」とします(いずれも大文字小文字を区別しません)。
判定条件
| 判定 | 条件 | 得点への影響 |
|---|---|---|
| ○ 問題なし(pass) | パスワード欄があり、上記いずれの兆候もない | 重み2を満点で加算 |
| △ 要確認(warn) | インライン拒否、またはスクリプト兆候がある | 重み2×0.45を加算 |
| × 要改善(fail) | 使用しない(静的解析のため断定せず、△止まり) | — |
| 対象外(na) | 取得ページにパスワード欄がない | 分母・分子から除外 |
スコアは「Σ(重み×係数)÷Σ(適用項目の重み)×100」で、係数はpass=1.00、warn=0.45、fail=0です。
×ではなく△にとどめる理由は、外部ファイルのJavaScriptやフレームワークのイベント処理は取得HTMLだけでは完全に追えず、近接語の一致が別の処理(例:検索欄の貼り付け整形)を誤って拾う可能性があるためです。逆に、外部JSで貼り付けを禁止している場合は検出できず、○になることがあります。
自治体サイトでの判定例
| 状況 | 判定 |
|---|---|
| 自治体公式サイトのトップや下層ページに、ログイン欄がまったくない | 対象外(多くの自治体公式サイトはこの判定) |
図書館の利用者ログインや電子申請の入口が同一オリジン内にあり、onpaste="return false" が付いている | △ |
| ログイン欄に貼り付け拒否の記述がない | ○ |
パスワードの貼り付けを禁止するとどんなリスクがあるか
- 弱いパスワードと使い回し:長いランダムなパスワードを手入力するのは現実的でないため、利用者は短く覚えやすいパスワードを選び、他サービスと使い回しがちになります。他サービスから漏えいしたID・パスワードの組み合わせを試すパスワードリスト攻撃(クレデンシャルスタッフィング)の成功率が上がります。
- アクセシビリティの阻害:認知・記憶・運動機能に制約のある利用者が、マネージャーや貼り付けなしでは認証できなくなり、住民向けサービスの利用機会を奪います。WCAG 2.2の3.3.8に抵触し得ます。
- フィッシング耐性の低下:パスワードマネージャーは登録したドメインでしか自動入力しないため、偽サイトに気付くきっかけになります。マネージャーを使えない設計は、この防御を手放すことになります。
貼り付け禁止そのものが直接の侵入経路になるわけではないため重大度はmediumですが、他の認証対策の効果を下げる設計上の問題です。
パスワード欄の貼り付けを許可する修正方法(HTML・CMS・Next.js)
1. HTMLとJavaScriptから拒否処理を削除する
<!-- 修正後:貼り付け拒否なし、用途を明示 -->
<label for="login-password">パスワード</label>
<input type="password" id="login-password" name="password"
autocomplete="current-password" required>
<!-- 新規登録・変更画面 -->
<input type="password" id="new-password" name="new_password"
autocomplete="new-password" minlength="15" required>
拒否処理を探すには、テンプレートとJSを次のように検索します。
grep -rniE "onpaste|oncopy|oncut" ./htdocs ./templates
grep -rniE "addEventListener\(\s*['\"](paste|copy|cut)['\"]" ./htdocs ./src
grep -rniE "on\(\s*['\"]paste" ./htdocs ./src # jQueryの場合
2. 確認欄の代わりに「表示切替」を用意する
確認欄を廃止し、パスワードを一時的に表示するボタンで入力ミスを防ぐ方法があります。ASVS V6.2.6も、マスク入力を基本としつつ一時表示の機能を認めています。
<input type="password" id="pw" autocomplete="new-password">
<button type="button" aria-controls="pw" aria-pressed="false"
onclick="const f=document.getElementById('pw');
const show=f.type==='password';
f.type=show?'text':'password';
this.setAttribute('aria-pressed',String(show));">
パスワードを表示
</button>
CSPでインラインイベントを禁止している場合は、同じ処理を外部JSの addEventListener で実装してください。
3. CMS・パッケージ製品の場合
- 電子申請システムや図書館システムなどのパッケージ製品で拒否処理が組み込まれている場合は、ベンダーに設定変更または改修を依頼します。調達仕様書に「ASVS V6.2.7準拠(貼り付け・パスワードマネージャーを妨げない)」を明記すると、次回更新時の要件として扱えます。
- WordPress等でプラグインが貼り付けを禁止している場合は、プラグインの設定を確認し、不要なら無効化します。
4. Next.js(React)の場合
// 悪い例:onPasteで拒否
<input type="password" onPaste={(e) => e.preventDefault()} />
// 良い例
<input type="password" name="password" autoComplete="current-password" />
修正後の確認方法
- ブラウザでログイン画面を開き、テキストをコピーしてパスワード欄に貼り付けられるか確認します。
- 主要なパスワードマネージャー(ブラウザ内蔵、外部製品)で保存・自動入力ができるか確認します。
- HTMLを取得して拒否記述が残っていないか確認します。
curl -s https://www.example.lg.jp/login/ | grep -niE "onpaste|preventDefault"
修正後は、セキュリティAIチェッカーで再診断し、この項目が○になることを確認します。
サイトを壊さないための注意点
- 貼り付け拒否と同じ関数内で入力チェックや送信処理をしている場合があります。イベントハンドラーを丸ごと削除する前に、拒否部分だけを取り除けるか確認してください。
- 貼り付けを許可すると、前後に空白を含む値が入ることがあります。NIST SP 800-63B-4は前後の空白除去などの限定的な許容を認めていますが、検証の挙動を変える場合は既存パスワードでのログイン可否を事前に試験してください。
- 外部JSで拒否している場合は本診断で検出されないことがあるため、実機での貼り付け確認を必ず行ってください。
よくある質問(FAQ)
パスワード欄の貼り付け禁止はセキュリティ対策になりますか?
ほとんどなりません。端末がマルウェアに感染していればキー入力も画面も盗まれるため、貼り付け禁止で防げるリスクは小さく、弱いパスワードを招く不利益のほうが大きいというのが標準の立場です。英国NCSCも、クリップボード経由の窃取リスクは小さいと述べています。
確認用の再入力欄だけなら貼り付け禁止にしてもよいですか?
おすすめしません。パスワードマネージャーの生成値を確認欄に入力できなくなり、二重入力の障害になります。確認欄の代わりに、パスワードを一時的に表示する切替ボタンで入力ミスを防ぐ方法があります。
パスワード欄への貼り付け許可は、どの標準で求められていますか?
OWASP ASVS 5.0.0 V6.2.7(L1)、NIST SP 800-63B-4 3.1.1.2(貼り付けを許可すべき=SHOULD、パスワードマネージャーと自動入力の許可=SHALL)、WCAG 2.2 達成基準3.3.8(レベルAA)です。
貼り付け禁止の処理はどうやって探せばよいですか?
テンプレートとJavaScriptを onpaste・oncopy・oncut、addEventListener('paste'…)、jQueryの on('paste'…) などで grep 検索します。公開ページは curl でHTMLを取得し、onpaste や preventDefault の記述が残っていないか確認できます。
パスワード欄への貼り付け禁止は、セキュリティAIチェッカーでどう判定されますか?
パスワード欄の onpaste に return false や preventDefault がある、またはパスワード欄付近でpasteイベントを拒否するスクリプトの兆候がある場合は「△ 要確認」(重み2の45%)です。兆候がなければ「○ 問題なし」、取得ページにパスワード欄がなければ「対象外」です。静的解析のため×にはしません。
自治体の公式サイトでも対象になりますか?
多くの自治体公式サイトにはログイン欄がないため「対象外」になります。図書館の利用者ログインや電子申請の入口が同一オリジン内にあり、貼り付け拒否がある場合は△になります。
この項目を含む127項目を、URLを入れるだけで無料診断します。