本文へ移動

ホーム / Web / 第2部 Web の基礎

第2部 Web の基礎・第3章

Web セキュリティ

★★★ 必須11トピック・面接 5問

Web アプリで起きやすい脆弱性と、その防ぎ方を押さえる。

ひとことで

他人のページに悪意あるスクリプトを埋め込む攻撃。出力時のエスケープと CSP で防ぐ。

XSS は、攻撃者が用意したスクリプトを、他のユーザーが見るページの中で動かす攻撃です。そのサイトのオリジンで動くので、Cookie(HttpOnly でないもの)や画面の情報を盗んだり、ユーザーになりすまして操作したりできます。

格納型 XSS:保存された入力が、他の人の画面で動く攻撃者サーバー・DB投稿を保存他のユーザーのブラウザページに script が混ざるscript 入りの投稿開くと HTML に入る対策:出力時にエスケープCookie・画面の情報を攻撃者に送る対策:CSP で実行を止めるHttpOnly で盗まれにくく盗んだ情報
格納型 XSS の流れと、エスケープ・CSP が効く場所
種類仕組み例
反射型URL などの入力を、そのまま返すページに埋め込む/search?q=<script>… のリンクを踏ませる
格納型DB に保存された入力が、他の人の画面に出る掲示板・プロフィール・商品レビュー
DOM ベースサーバーを通らず、ブラウザの JS が入力を危ない形で DOM に入れるlocation.hash を innerHTML に入れる

フレームワークのエスケープと、危ない書き方

基本の対策は、出力するときに < > & " などを文字として表示されるように変えるエスケープです。React・Vue・テンプレートエンジンは {value} のような埋め込みを自動でエスケープします。ただし次は自動では守られません。

  • dangerouslySetInnerHTML・v-html・innerHTML:HTML をそのまま入れる。どうしても必要なら DOMPurify などでサニタイズ(危ないタグや属性を取り除く)してから。
  • href・src に入れる URL:javascript:alert(1) が動く。https: などの許可したスキームだけ通す。
  • eval・new Function・setTimeout("文字列")。
  • サーバー側で JSON を <script> に埋め込むとき(</script> で抜けられる)。

面接ではこう答える

XSS は、攻撃者の用意したスクリプトを、他のユーザーが見るページの中で動かす攻撃です。そのサイトのオリジンで動くので、画面の情報を盗んだり、本人になりすまして操作したりできます。基本の対策は出力するときのエスケープで、React などは自動で行いますが、dangerouslySetInnerHTML や href に入れる URL は守られません。二重の守りとして CSP を使い、Cookie は HttpOnly にします。

ひとことで

ページで実行してよいスクリプトの出どころをヘッダーで限定し、XSS が起きても実行されにくくする仕組み。

エスケープが一の守り、CSP は漏れたときの二の守りエスケープ・出力するときに文字にする・フレームワークが自動で・漏れが1か所でもあると破られるCSP・動かしてよいスクリプトを限定・nonce のない script は止まる・漏れても実行されにくい
XSS への二重の守り

CSP は「このページで動かしてよいスクリプトはどこから来たものか」をヘッダーで決める仕組みで、エスケープ漏れがあったときの二重の守りになります。

Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-ランダム値'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'

リクエストごとに作る nonce を付けた <script nonce="…"> だけを動かし、インラインのスクリプトや onclick= 属性は止めます。いきなり適用すると画面が壊れることがあるので、まず Content-Security-Policy-Report-Only で違反を集めてから本番にします。'unsafe-inline' を付けると XSS への効果はほぼなくなります。

あわせて、セッションの Cookie は HttpOnly にして、スクリプトから読めないようにします。

指定意味
default-src 'self'指定がない種類は自分のオリジンだけ
script-src 'nonce-…'その nonce を持つ script だけ実行
object-src 'none'プラグイン(object・embed)を禁止
base-uri 'self'<base> で読み込み先を変えられないように
frame-ancestors 'none'他サイトの iframe に埋め込ませない(クリックジャッキング対策)

面接ではこう答える

CSP は Content-Security-Policy ヘッダーで、このページで動かしてよいスクリプトの出どころを決める仕組みです。リクエストごとに作った nonce を付けた script だけを許可すると、攻撃者が差し込んだインラインのスクリプトは実行されません。エスケープの漏れがあったときの二重の守りという位置づけです。いきなり適用すると画面が壊れるので、Report-Only で違反を集めてから本番に入れます。

3.3CSRF

用語★★★ 必須
ひとことで

ログイン中のユーザーに、意図しないリクエストを送らせる攻撃。SameSite Cookie とトークンで防ぐ。

CSRF(クロスサイトリクエストフォージェリ)は、ログインしているユーザーに、罠のサイトから本人の意図しないリクエストを送らせる攻撃です。ブラウザは Cookie を自動で付けて送るので、サーバーから見ると本人の操作と区別がつきません。

Cookie が自動で付くことを悪用されるユーザーのブラウザ罠のサイト銀行のサイトログイン済み(Cookie: sid を持っている)罠のページを開く自動で送信されるフォームPOST /transfer Cookie: sid=…(自動で付く)本人の操作と区別できず実行してしまう対策:SameSite・CSRF トークン・Origin の確認
CSRF の攻撃の流れ

攻撃の流れ

  • ユーザーが bank.example にログインしたまま、攻撃者のページを開く。
  • そのページに、bank.example/transfer へ自動で送信されるフォームが仕込まれている。
  • ブラウザがログインの Cookie 付きで POST を送り、送金や設定変更が実行される。

攻撃者はレスポンスを読めませんが、「実行させる」だけで被害が出ます。

対策の組み合わせ

対策内容
SameSite CookieLax 以上にすると、他サイトからの POST に Cookie が付かない。土台になる対策
CSRF トークンセッションに結びつけた推測できない値をフォームや独自ヘッダーに入れ、サーバーで照合する。多くのフレームワークに組み込みがある
Origin / Sec-Fetch-Site の確認更新系のリクエストで、Origin が自サイトか、Sec-Fetch-Site が same-origin かを確かめる
GET で更新しないSameSite=Lax でも GET の移動には Cookie が付くため
重要な操作は再確認送金・パスワード変更は再入力や多要素認証を求める

トークンを Authorization ヘッダーで送る API(Cookie を使わない)は、ブラウザが自動で付けないので CSRF の心配はほぼありません。ただしそのトークンをどこに保存するかで、今度は XSS への強さが変わります。

面接ではこう答える

CSRF は、ログイン中のユーザーに、罠のサイトから本人の意図しないリクエストを送らせる攻撃です。ブラウザが Cookie を自動で付けるので、サーバーからは本人の操作と区別できません。対策は、SameSite を Lax 以上にした Cookie を土台に、更新系のリクエストに CSRF トークンや Origin ヘッダーの確認を組み合わせることです。GET で更新をしないことも大事です。

別のページで開く →

ネットワーク図を読み込んでいます…

3.4SQL インジェクション

用語★★★ 必須
ひとことで

入力を SQL の文字列に直接つなげると、条件を書き換えられる。プレースホルダで防ぐ。

SQL インジェクションは、入力値を文字列のまま SQL に連結したせいで、入力の一部が SQL の命令として実行されてしまう攻撃です。データの全件取得・改ざん・削除につながります。

// 危ない:入力が ' OR '1'='1 だと全件が返る
db.query("SELECT * FROM users WHERE email = '" + email + "'");

// 安全:プレースホルダ(値は SQL と別に送る)
db.query("SELECT * FROM users WHERE email = $1", [email]);
SQL と値を混ぜるか、分けて送るか文字列の連結(危ない)プレースホルダ(安全)SQL と入力が1本の文字列になるWHERE email = '' OR '1'='1'DB が OR を命令として実行→ 全件が返るSQL の形WHERE email = $1値' OR '1'='1値は値としてだけ比べる→ 0 件(そのメールはない)
文字列の連結とプレースホルダの違い

プリペアドステートメント

SQL の形(? や $1 の場所)を先に決め、値は後から別に渡す方法です。値はどんな文字が入っていても「値」としてしか扱われないので、命令に化けません。自分でエスケープ関数を書くより確実です。

ORM でも危ない書き方

ORM(オブジェクトと表を対応させるライブラリ)は普通に使えば値をプレースホルダにしますが、文字列を直接渡す機能では守られません。

場面危ない書き方安全な書き方
Rails の条件where("name = '#{params[:name]}'")where("name = ?", name)、where(name: name)
Prisma の生 SQL$queryRawUnsafe に文字列を組み立てて渡す$queryRaw`… ${x}`(値はプレースホルダになる)
並べ替えの列名・ASC/DESC入力をそのまま ORDER BY に入れる(プレースホルダにできない)許可する値の対応表から選ぶ({"new": "created_at DESC"})
LIKE の検索%・_ をそのまま値はプレースホルダにし、%・_ はエスケープ(意味が変わるため)

あわせて、アプリが使う DB ユーザーの権限を必要最小限にし(DROP できないなど)、エラーメッセージに SQL を出さないようにします。

面接ではこう答える

SQL インジェクションは、入力値を文字列のまま SQL につなげたせいで、入力の一部が命令として実行されてしまう攻撃です。対策はプレースホルダを使うことで、値は SQL の形とは別に渡されるので、どんな文字でも値としてしか扱われません。ORM でも生の SQL を文字列で組み立てる機能は危なく、並べ替えの列名のようにプレースホルダにできないものは許可した値の表から選びます。

別のページで開く →

DBラボを読み込んでいます…

ひとことで

サーバーに URL を取りに行かせる機能を悪用して、外から届かない内部のサーバーやメタデータにアクセスさせる攻撃。

サーバーは内側の住所にも届いてしまう攻撃者URL を入力Web サーバー代わりに取りに行く内部の宛先メタデータ・管理画面例:画像の URL 取り込み・Webhook の送り先・OGP の取得・PDF 化の機能
SSRF の流れ

SSRF(サーバーサイドリクエストフォージェリ)は、「URL を受け取って、サーバーがそこへ取りに行く」機能を使って、外からは届かない社内のサーバーやクラウドのメタデータ(169.254.169.254)にアクセスさせる攻撃です。メタデータから一時的な認証情報を盗まれると、クラウドの権限まで奪われます。OWASP Top 10 の 2025年版では「アクセス制御の不備」に含まれています。

対策内容
宛先の許可リスト取りに行ってよいドメインを決め打ちにする。できない機能は特に慎重に
内部のアドレスを拒否名前解決したあとの IP が、プライベート・ループバック・リンクローカルなら止める(リダイレクト先も毎回確かめる)
メタデータを守るAWS なら IMDSv2(トークン必須)にする
出口を分ける取りに行く処理を、内部に届かない別のネットワークやプロキシ経由にする
応答を返さない取得した中身やエラーの詳細をそのまま利用者に見せない

「名前解決のときは外の IP、接続のときは内の IP」に変える DNS リバインディングもあるので、確かめた IP にそのまま接続するように作ります。

面接ではこう答える

SSRF は、画像の URL 取り込みや Webhook のように、サーバーが利用者の指定した URL へアクセスする機能を悪用する攻撃です。サーバーは社内ネットワークの内側にいるので、外からは見えない管理画面やクラウドのメタデータに届いてしまいます。対策は、宛先を許可リストで絞ること、名前解決した後の IP が内部のアドレスなら止めること、AWS なら IMDSv2 にすることです。リダイレクト先でも同じ確認をします。

ひとことで

Web アプリの代表的なリスクの一覧。アクセス制御の不備が最も多い。

OWASP Top 10 は、Web アプリでよく起きる危険の種類を、OWASP という団体がまとめた一覧です。数年ごとに改訂され、2026年時点の最新は 2025年版です(2021年版から、SSRF がアクセス制御に統合され、サプライチェーンと例外処理の項目が新しく入りました)。脆弱性の名前を覚えるより、「自分のアプリのどこで起きうるか」を確かめるチェックリストとして使います。

分類(2025年版)Web アプリでの例と対策
A01 アクセス制御の不備URL の ID を変えると他人のデータが見える(IDOR)。URL を受け取ってサーバーが取りに行く機能で社内やクラウドのメタデータ(169.254.169.254)を読まれる(SSRF)。サーバーで毎回、持ち主か権限を確かめる。取りに行く宛先は許可リストで絞る
A02 セキュリティの設定ミスデバッグモードのまま本番、公開されたストレージ、詳しすぎるエラー表示、既定のパスワード
A03 ソフトウェアのサプライチェーンの失敗古い・乗っ取られた依存パッケージ、改ざんされたビルドの仕組み。ロックファイル・更新の自動化・CI の権限の最小化
A04 暗号の失敗HTTP のまま送る、パスワードを平文や MD5 で保存。HTTPS と専用のハッシュ(bcrypt・Argon2)
A05 インジェクションSQL・OS コマンド・XSS など。プレースホルダとエスケープ
A06 安全でない設計回数制限のない確認コードの入力など、仕様の段階の穴。設計レビューで脅威を考える
A07 認証の失敗総当たりを止めない、セッションの固定。回数制限・MFA
A08 ソフトウェアとデータの完全性の失敗署名を確かめない Webhook や更新、信頼できないデータの逆シリアル化。署名・完全性の確認
A09 ログとアラートの失敗攻撃に気づけない。ログイン失敗や権限エラーを記録し、通知まで仕組みにする
A10 例外的な状況の扱いの誤りエラー時に処理が途中で止まって不整合になる、失敗したのに許可してしまう(fail open)。例外の扱いを決めてテストする

SRE の「CVEと脆弱性管理」

面接ではこう答える

OWASP Top 10 は、Web アプリでよく起きる危険の種類を OWASP という団体がまとめた一覧で、2026年時点では2025年版が最新です。一番上はアクセス制御の不備で、URL の ID を変えると他人のデータが見える問題などが含まれます。ほかにも設定ミス、依存パッケージのサプライチェーン、インジェクションなどがあります。名前を覚えるより、自分のアプリのどこで起きうるかを確かめるチェックリストとして使います。

ひとことで

アプリのコードの大部分は依存パッケージ。ロックファイルで版を固定し、更新の自動化と既知の脆弱性の確認を仕組みにする。

依存の更新を「仕組み」で回すロックファイル入る版を固定自動の PRDependabot・RenovateCI のテスト通れば入れる監査audit で既知の CVE
依存パッケージを安全に保つ流れ

今の Web アプリのコードの大部分は依存パッケージです。Dependabot(GitHub)や Renovate で更新のプルリクエストを自動で作り、pnpm audit・npm audit などで既知の脆弱性(CVE)を確かめます。ロックファイルをコミットして入る版を固定し、更新は CI のテストを通してから入れます。重大度だけで慌てず、その関数を実際に使っているかも見て優先度を決めます。

近年は、人気のパッケージの作者のアカウントが乗っ取られて悪意のある版が公開される事件が続いています。公開されたばかりの版をすぐ入れない設定(pnpm の minimumReleaseAge など)や、インストール時のスクリプトを止める設定も守りになります。

面接ではこう答える

今の Web アプリは、自分で書いたコードより依存パッケージのほうがずっと多いので、依存の脆弱性管理は欠かせません。ロックファイルをコミットして入る版を固定し、Dependabot や Renovate で更新のプルリクエストを自動で作り、CI のテストを通してから入れます。audit で既知の CVE も確かめますが、重大度だけでなく、その機能を実際に使っているかで優先度を決めます。

3.8秘密情報の扱い

用語★★☆ 重要
ひとことで

API キーやパスワードはコードに書かず、環境変数やシークレット管理サービスに置く。

秘密情報(API キー・DB のパスワード・署名の鍵など)は、漏れると他人があなたのサービスやお金を使えてしまうものです。

フロントに置いてはいけないもの

ブラウザに送った JavaScript は誰でも読めます。ビルド時に埋め込んだ環境変数も同じです。Next.js の NEXT_PUBLIC_、Vite の VITE_ で始まる変数はバンドルに入ります。

フロントに置いてよい置いてはいけない(サーバーに置く)
公開前提のキー(地図・計測の公開用キー、決済サービスの publishable key など)。ドメイン制限や権限が限られたもの秘密鍵・シークレットキー・DB の接続情報・管理者用トークン・外部 API の有料のキー
公開してよい設定(API の URL・機能のオン・オフ)それらを使う処理は API・サーバー関数に置き、フロントからはそこを呼ぶ

保管と運用

  • コードや Git に書かない。.env は .gitignore に入れ、本番はクラウドのシークレット管理(Secrets Manager など)や CI のシークレットに置く。
  • ログやエラートラッキングに出さない(リクエストのヘッダーや本文を丸ごと記録しない)。
  • GitHub の secret scanning や gitleaks などで、コミットに混ざっていないか自動で調べる。
  • キーは用途ごとに分け、権限を最小にする。

面接ではこう答える

API キーや DB のパスワードのような秘密情報は、コードや Git に書かず、環境変数やクラウドのシークレット管理サービスに置きます。ブラウザに送る JavaScript は誰でも読めるので、NEXT_PUBLIC_ のようにバンドルに入る変数には公開してよいものだけを入れます。ログやエラートラッキングにも出さないようにし、secret scanning でコミットに混ざっていないか自動で調べます。

漏れたら、まず止める。消すのは後無効化・入れ替え最優先利用ログを調べる何に使われたか影響の報告関係者へ再発防止スキャンの導入
秘密情報が漏れたときの順番

ローテーションは鍵を定期的に新しくすることです。新しい鍵を発行 → アプリを新しい鍵に切り替え → 古い鍵を無効化、の順に進めると止まりません。漏れたときは、まず鍵を無効化(または入れ替え)し、その鍵で何が行われたかを利用ログで調べ、影響があれば関係者に報告します。Git の履歴から消しても、公開されていた時点で取られた前提で動きます。

やってしまいがちなぜ不十分か
Git の履歴から消して終わり公開された時点でボットに取られている前提で動く
リポジトリを非公開にするすでに複製されているかもしれない
新しい鍵を発行しただけ古い鍵を無効にしないと使われ続ける

アプリのコードを変えずに、レスポンスヘッダーで守りを足せるものがあります。フレームワークのミドルウェア(Helmet など)や CDN の設定でまとめて付けるのが一般的です。

ヘッダー守るもの値の例
Strict-Transport-Security一度来たら以後は必ず HTTPS で接続させる(HSTS)max-age=31536000; includeSubDomains
Content-Security-PolicyXSS・埋め込み(frame-ancestors)前のトピックを参照
X-Content-Type-Options中身から形式を推測させない(JS として実行される事故を防ぐ)nosniff
Referrer-Policy他サイトへ移るときに URL の詳細を渡さないstrict-origin-when-cross-origin
X-Frame-Options古いブラウザ向けのクリックジャッキング対策DENY(CSP の frame-ancestors が後継)
Permissions-Policyカメラ・位置情報などの機能を使わせないcamera=(), geolocation=()

HSTS は、一度付けると期限まで HTTP に戻せません。サブドメインに HTTP だけのものが残っていないか確かめてから includeSubDomains を付けます。URL に秘密(パスワード再設定のトークンなど)を入れないことも、Referrer で漏らさないための基本です。

ひとことで

アップロードは攻撃の入口。保存名の付け直し・中身での形式判定・別ドメインからの配信・サイズ上限で守る。

アプリのサーバーを通さず、ストレージに直接送るブラウザ署名付き URL を要求API種類・サイズを決めて発行ストレージ直接アップロード非同期の検査形式・ウイルス・変換
署名付き URL を使ったアップロードの流れ

画像や書類のアップロードは、攻撃の入口になりやすい機能です。

危険対策
拡張子を偽った HTML・SVG を開かせて XSS配信は別ドメイン(ユーザーのコンテンツ用)から。Content-Disposition: attachment、nosniff
巨大なファイル・大量の送信サイズと回数の上限。署名付き URL に条件を付ける
ファイル名で上書き・パスの操作(../)保存名はサーバーで UUID などに付け直す
画像に見せかけた別の形式拡張子や Content-Type ではなく中身で判定し、画像は作り直す(再エンコード)
個人情報の公開バケットは非公開。見せるときは期限付きの URL

S3 などのオブジェクトストレージに署名付き URLで直接送らせると、アプリのサーバーが大きなファイルを受け止めずに済み、性能面でも有利です。

面接ではこう答える

ファイルのアップロードでは、拡張子を偽ったファイルや巨大なファイルが送られてくる前提で作ります。保存名はサーバーで付け直し、形式は拡張子ではなく中身で判定し、画像は再エンコードします。配信はアプリと別のドメインから行い、HTML や SVG がアプリのオリジンで実行されないようにします。実装は、署名付き URL でストレージに直接送らせると、サーバーの負荷も下げられます。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • OWASP Top 10 の代表的な攻撃と対策を、コードのレベルで説明できる
  • 認証と認可の違い、秘密情報の扱いを説明できる

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1XSS の対策を説明してください。

模範回答

基本は出力するときのエスケープです。React などは埋め込んだ値を自動でエスケープするので、普通に書けば守られますが、dangerouslySetInnerHTML や innerHTML で HTML をそのまま入れる所、href に入れる URL(javascript: スキーム)、eval の類は守られません。HTML をどうしても入れるなら DOMPurify などでサニタイズし、URL は https などの許可したスキームだけ通します。

そのうえで二重の守りとして CSP を設定し、nonce を付けたスクリプトだけを動かしてインラインのスクリプトを止めます。最初は Report-Only で違反を集めてから適用します。セッションの Cookie は HttpOnly にして、万一動いても盗まれにくくします。

深掘りされたら

  • 格納型の XSS は入力時と出力時のどちらで防ぎますか?

見られているポイントエスケープ・CSP・フレームワークの仕組みを具体的に

Q2SQL インジェクションはどう防ぎますか?

模範回答

SQL と値を別に渡すプレースホルダ(プリペアドステートメント)を使い、入力を文字列で SQL に連結しないことです。値は値としてだけ扱われるので命令に化けません。

ORM でも、生の SQL を書く機能や文字列で条件を渡す書き方では守られないので、そこもプレースホルダ版を使います。また ORDER BY の列名や並び順はプレースホルダにできないので、許可する値の一覧から選ぶようにします。加えて、アプリの DB ユーザーの権限を最小にし、エラーに SQL を出さないことで、被害と手がかりを減らします。

深掘りされたら

  • エスケープ関数を自作するのはなぜよくないのですか?

見られているポイントプレースホルダと、ORM でも危ないケース

Q3CSRF とはどんな攻撃で、どう防ぎますか?

模範回答

ログイン中のユーザーに罠のサイトを開かせ、そこから本人の Cookie 付きで送金や設定変更のリクエストを送らせる攻撃です。サーバーからは本人の操作と区別がつきません。

対策は組み合わせです。Cookie を SameSite=Lax 以上にして他サイトからの POST に付かないようにし、更新系のリクエストには CSRF トークンを入れてサーバーで照合します。Origin ヘッダーが自サイトかの確認も加えます。GET で更新しないことも前提です。トークンを Authorization ヘッダーで送る API なら、ブラウザが自動で付けないので CSRF の心配はほぼなくなります。

深掘りされたら

  • SameSite だけでは足りないのはなぜですか?

見られているポイント攻撃の仕組みと、複数の対策の組み合わせ

Q4API キーを誤って GitHub に push してしまいました。どうしますか?

模範回答

最初にやるのは、そのキーを無効化するか新しいキーに入れ替えることです。公開リポジトリなら数分で自動的に収集されることもあるので、履歴から消すより先に鍵を止めます。

次に、そのキーの利用ログで、漏れていた間に不審な使われ方がないかを調べ、影響があれば関係者に報告します。そのあと Git の履歴から取り除き、再発防止として、secret scanning や pre-commit の検査を入れる、キーをシークレット管理に移す、キーの権限を絞る、といった対策をします。個人を責めず、仕組みで防ぐことを意識します。

深掘りされたら

  • フロントのコードに置いてよいキーはありますか?

見られているポイント無効化が最優先・影響調査・再発防止

Q5SSRF とは何ですか? どんな機能で起きますか?

模範回答

SSRF は、サーバーに URL を渡して取りに行かせる機能を悪用し、本来外から届かない社内のサーバーやクラウドの管理用の情報を読ませる攻撃です。例えば、画像の URL を指定して取り込む機能や、Webhook の送信先、リンクのプレビューで起きます。クラウドのメタデータのアドレス(169.254.169.254)を指定され、認証情報を読まれるのが典型です。

対策は、取りに行く先を許可リストで絞ること、名前解決したあとの IP アドレスがプライベートなものなら拒否すること、リダイレクトを追わないことです。クラウド側でも、メタデータにトークンを求める設定(AWS の IMDSv2 など)にしておきます。

深掘りされたら

  • DNS の名前解決を使った回避にはどう備えますか?

見られているポイント起きる機能の具体例と、宛先の制限