SPAで問い合わせフォームを作ろうと思います。
フォームでは個人情報を扱うので、SPAでのセキュリティについてお伺いしたいです。
従来のセッションが分かれているフォームであれば、多少知見がありますので対策が思いつきます。
SPAの場合も従来の対策をそのまま当てはめても問題ないのか、SPA実装の経験がなくて判断できません。
セキュリティ周りについては、思いつく対策だけでは十分でない可能性もあり、是非ご意見をいただきたいです。
質問内容
- (後述しますが)自分が思い付いたセキュリティホール以外に、考慮すべき問題点はありますか?
また、対策方法はありますか? - Next.jsのようなフレームワークでは、セキュリティ対策用のモジュールや関数があるのでしょうか?
(もちろん、フレームワークに丸投げせず、概念として対策方法は知っておくべきだとは思います。)
アプリケーションの概要
個人情報を扱うお問い合わせフォームを作りたいと思います。
URL
フロントエンドから非同期でデータを送受信するのは、入力内容の保存をする時だけです。
また、コンテンツとAPIはドメインが一緒です。
サイトコンテンツ
URL | 概要 |
---|---|
https://example.com/contact | フォーム本体のページ |
API
POSTのみです。
GETで閲覧するAPIは実装しません。
URL | method | 概要 |
---|---|---|
https://example.com/api/contacts | POST | 問い合わせ内容を登録します。 |
ページ構成
よくあるフォームの構成です。
URL | ページ名 | 概要 |
---|---|---|
/contact/create | 入力ページ | フォームで個人情報と問い合わせ内容を入力します。 |
/contact/confirm | 確認ページ | 入力ページの登録内容を確認、問題なければ登録処理をする(APIで入力された内容を送信) |
/contact/send | 完了ページ | 登録完了したら完了ページを表示 |
登録データを送信するエンドポイントのAPIは自作です。
送信された情報の精査と、実際の登録の処理は実装します。
開発環境
フロントエンド
Reactベースで実装します。
以下のモジュールを使用します。
バックエンド
PHPのLaravelでAPIを実装します。
SPAで最初に表示するページに、パラメータを渡す事も出来ます。
所感
自分が思いつくセキュリティホールと対策は次の通りです。
セキュリティホールについて
- APIを外部から実行される危険がある(CSRF対策)
- APIで送信する個人情報を抜かれる危険性がある。
- パラメータに有害な情報(SQLインジェクションの誘発など)が入ってくる
対策
- APIを外部から実行される危険がある(CSRF対策)
-> バックエンドでトークンを発行してページ読み込み時に渡し、APIで登録内容を送信時にトークンも一緒に送信、認証する - APIで送信する個人情報を抜かれる危険性がある
-> HTTPSなのでそもそも暗号化されている - パラメータに有害な情報(SQLインジェクションの誘発など)
-> LaravelのクエリビルダーはPDO::ATTR_EMULATE_PREPARESが有効なので、対策はされている
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/07 04:54