安全なスパイラルアプリケーションの作り方(機能グループ別)
最終更新日:2025年01月08日
当ページでは、スパイラルのDBやフォームなどでアプリケーションを構築する際のセキュリティ対応についてご案内いたします。
DB
1.通常DB
1.パスワードとして、「簡易パスワード」「メッセージダイジェスト(MD5)」「メッセージダイジェスト(SHA1)」を使用するのは非推奨です。
簡易パスワード、メッセージダイジェストは提供開始した時期と現在を比べると、パスワードとしては弱いフィールドタイプと言えます。
使用する場合は「パスワードフィールド」を使用してください(スパイラルver.1.13.6時点)
※「パスワードフィールド」はDBオペレーションからの登録・更新、APIでの更新はできない等の制限事項があるため、
DBオペレーション等からの登録・更新の運用想定がある場合は「メッセージダイジェスト(SHA256)」をご利用ください。
2.ファイル型フィールドの拡張子制限は、必要なものだけ許可するようにしましょう。
exeなどのプログラム実行ファイルがアップされる危険を考慮しています。
万が一、プログラム実行ファイルをスパイラル内に保存されても機能しませんが、アプリケーション側でも制限しましょう。
関連するページ
2.フィールド値自動生成トリガ
1.フォームやトランザクションDBで使用する認証キーに対してトリガを作成する場合、複雑で推測しにくい値を生成する必要があります。
更新フォームや削除フォームにて、ブラウザの「ソースを表示」機能を使ってHTMLソースを表示した場合に認証キーを閲覧することができるため、他人の認証キーが推測できないよう、複雑なキーを使用しましょう。
複雑で推測しにくい値の作り方
- フィールドタイプは簡易パスワードフィールドにします。
- 「レコードIDを元にしたランダム値」「アルファベットと数字」「16桁」を設定します。
- 数字記号アルファベット32byteと整数でもトリガは作成できますが、簡易パスワードが一番複雑な値を生成できます。
関連するページ
関連するFAQ
フィールド値自動生成トリガとはどんな機能ですか
フォームの認証キーとは何ですか?
3.抽出ルール
1.抽出ルールを変更する場合、その抽出ルールがどの設定で使用されているか十分確認してください。
一覧表で意図しないデータが表示されたり、意図しない宛先にメール配信されてしまう可能性があります。
関連するページ
関連するFAQ
4.DBオペレーション
1.テンプレート設定や表示項目の設定で、必要最小限のデータのみ閲覧・ダウンロードするようにしましょう。
不要な項目が含まれていると、誤操作や誤認につながり、削除してはいけないデータを誤って削除してしまったり、個人情報の管理手順が複雑になる可能性があります。
関連するページ
関連するFAQ
DBオペレーションで検索した結果一覧の項目の順番を変更したい
DBオペレーションでデータを登録したい
データを検索したい
データを削除したい
5.トランザクションDB
1.トランザクションDBに保存されているデータは変更削除ができないため、個人情報の閲覧を制限するために個人情報マスクを設定しましょう。
関連するページ
関連するFAQ
WEB
1.フォーム
1.セキュリティ設定の初期値が「制限する」「禁止する」「設定する」になっている項目はそのまま使いましょう。
用途にそぐわない場合のみ、「制限しない」「禁止しない」「設定しない」に変更します。
(1)「非SSL(http)での登録」を「許可する」にした場合、フォームにアクセスした人の端末からスパイラルへ送信した個人情報などのデータが、盗み見されたり、改ざんされる可能性があります。
(2)「不正経路からの登録防止」を「制限しない」にした場合、いたずら登録やなりすまし登録をすることができてしまいます。
(3)「連続投稿の禁止」を「禁止しない」にした場合、いたずらによる大量登録をされる可能性があります。
また、サンキューメールや登録通知メールを設定している場合、特定のメールアドレスへの大量送信ができてしまうからです。
(4)「POST制限」を「制限しない」にした場合、URLの一部にIDや名前などの送信情報が表示されるため、重要情報が漏えいする場合があります。
(5)「コンテンツに関するセキュリティ設定」を「設定しない」にした場合、ウィルス感染、利用者をだます表示によるフィッシング詐欺、cookie情報の取得によるセッションハイジャック、情報詐取、他の不正サイトへの誘導などの被害につながったり、意図しないボタンをクリックさせられたりする可能性があります。
「制限しない」になっている項目は、初期値のままフォームの設定を完了すると登録の受け付けができなくなってしまうため、フォーム発行直後は「制限しない」になっています。 用途に合わせて、「制限する」を積極的に使いましょう。
(6)「使用しないフィールドの値」を「受付ける」に設定した場合、攻撃者による意図しないデータの登録などの被害に繋がる可能性があります。
「無視する」に設定しましょう。
2.メールアドレスフィールドについて、「フィールド別チェック」にて「ドメイン」による制限を活用しましょう。
登録できるメールアドレスのドメインが絞られることによって不正な登録等を防ぐことができます。
3. 更新フォームまたは削除フォームでは、認証キーを設定することを強く推奨します。
更新フォームや削除フォームの設定で識別キーのみを設定している場合、識別キーを推測するだけで、第三者がなりすまして情報を更新することができてしまいます。
更新フォームや削除フォームの用途によっては、認証キーが不要の場合があるため、設定画面にて入力必須にしていませんが、なりすましての更新削除を防ぎたい場合は、認証キーの設定をお勧めします。
4.thankyou_urlによるリダイレクトの設定を使用している場合、設定を「無効にする」へ変更することを推奨します。
thankyou_urlの値を変更されることによって発生するオープンリダイレクトやクロスサイトスクリプティングの脆弱性があるため、設定は無効にしていただき、サンキューページの標準機能で設定可能な外部サンキューページの使用やPHP等で他のページへリダイレクトをさせるようにしてください。
認証キーを設定していない場合、起こり得ること
会員登録が必要なWebサイトにて、ユーザ名が主キー(識別キー)になっているものとします。(ユーザ名を識別キーとしている前提です)
ユーザA(ユーザ名:userA)が会員情報変更フォームのHTMLファイルを自分のPCに保存。
HTMLソースを見ると、
<input type="hidden" name="memberid" value="userA">
と書いてある箇所がありました。これを
<input type="hidden" name="memberid" value="userB">
と書き換えて、ブラウザ上で「送信」ボタンを押すと、ユーザB(ユーザ名:userB)がDB内に実在した場合、ユーザBの情報が更新されます。
4.フォームをGETで送信する場合、URLに会員識別キーやIDなどを含めないようにしましょう。
エンドユーザーが1つの端末を複数人で使っているかもしれません。URLに重要な情報を付与して送信した場合、フォームにアクセスした人以外がブラウザの履歴から、会員識別キーや重要なIDを閲覧したり、URLを改ざんして送信することができてしまいます。
5.フォームのHTMLソース内に、コメント部分に不要な情報を記載しないようにしましょう。
ブラウザの「ソースを表示」機能を使ってHTMLソースを表示した場合、ブラウザ上で表示されていないコメント部分も閲覧できるからです。
6.フォームの使用フィールド設定にて、「値を引き継ぐ(hidden)」フィールドは必要最小限にしましょう。
上記4と同様です。必要のない情報をhiddenで送信することは、Webサイトを攻撃しようと考えている第三者にヒントを与えることにつながります。
7.スパイラルシールを使用しましょう。
スパイラルシールは、あらかじめユーザーから申請いただいたWebサイト、またはスパイラルで作成したフォーム上でのみ表示されます。
スパイラルのフォームと同じ見た目のWebフォームを、ユーザーと関係のないサーバーに設置しても、スパイラルシールは表示されません。
一般ユーザーを偽サイトに誘導し、なりすまし登録や入力データを盗難するなどの攻撃手法がありますが、スパイラルシールを設置することで、 一般ユーザーはアクセスしているWebフォームと、入力データの送信先の関係を確認することができます。
8.登録通知メールには個人情報を含めないようにします。含める場合、S/MIMEで暗号化しましょう。
配信サーバから配信されたメールは複数のサーバを中継して届けられますが、途中で盗み見や改ざんされる可能性があります。
9.「旧機能」で作成されたフォームでは一部のセキュリティ機能を使用できないため、「旧機能」でフォームを作成するのは避けましょう。
関連するページ
フォーム
Webフォームを作成する
スパイラルシール管理
通知先管理
関連するFAQ
スパイラルシールとは何ですか
登録通知メールをS/MIMEで暗号化したい
S/MIMEが見られない
フォームの認証キーとは何ですか?
フォームの「セキュリティ」とはどのような機能ですか?
2.マイエリア
1.会員識別キーにIDを設定できますが、レコードIDは連番なので、他のレコードIDが推測しやすくなっています。
会員識別キーにはID以外を設定しましょう。用途にそぐわない場合のみIDを使用します。
2.DBのフラグや日時を使い、適切な条件でログイン拒否しましょう。
退会の方法が「DBからの削除」の場合、物理的にログインできませんが、「フラグで退会」としている場合、ログイン拒否をしていないと、退会した人が再度ログインできてしまいます。
3.ログイン後のページにはログアウトボタンを設置しましょう。
エンドユーザーが1つの端末を複数人で使っているかもしれません。エンドユーザー自身でログアウトできるようにしましょう。
4.退会フォームやパスワード再登録フォームの場合、ログイン後に表示するフォームのサンキューページはマイエリア内に設置し、サンキューページにてマイエリアから自動ログアウトさせます。
5.ログインのセッション維持時間は、マイエリア発行直後の初期値ではなく、適切な期間に変更しましょう。
エンドユーザーが1つの端末を複数人で使っている場合、またはメールのクリックログインURLがメール受信者によって外部に公開された場合、またはマイエリアにログインした後のURLが流出した場合を想定しています。
どの場合でも、セッション維持時間を短く設定することで、個人情報などが流出する可能性が低くなります。
6.二段階認証機能を活用しましょう。
パスワードのみの認証の場合、パスワードの流出等悪意のある第三者からの攻撃を受け、会員ページ等の個人情報へアクセスされる可能性があります。
二段階認証を利用することで、IDとパスワードの認証が通っても、スマートフォンアプリやメール、SMSなど登録者端末で確認できる認証コードを利用した認証が残っている為、会員ページへのアクセスを防ぐことが可能になります。
7.ログインロック機能を活用しましょう。 マイエリアにログインするためにIDとパスワードを総当りで試す攻撃を防止するためです。
8.マイエリアのパスワード再登録ページでは、パスワード強度は強または最強を強く推奨します。
上記6と同様です。パスワードで使用する文字の種類が少ない、文字数が少ないほど、漏洩する可能性は高くなります。
複雑で推測されにくいパスワードを再登録してもらうようにしましょう。
9.FIDO認証機能を活用しましょう。
パスワードを利用する場合、パスワードの流出や悪意のある第三者からの攻撃で会員ページへアクセスされる可能性があります。
FIDO認証はパスワードの代わりにメンバー(ログインを行う会員)が持つ、指紋や虹彩等の生体情報やセキュリティキーをログインに使用するので本人認証の強化ができます。
10.URL期限設定の「無期限に設定する」は使用しないでください(旧仕様のため非推奨)。
上記5と同様です。適切な期間を設定しましょう。
11.「IPアドレスによるアクセス制限」「接続元URLによるアクセス制限」を活用しましょう。
アクセスできる経路やIPアドレスが絞られることによって不正なアクセス等を防ぐことができます。
12.「コンテンツに関するセキュリティ設定」を「設定しない」にした場合、ウィルス感染、利用者をだます表示によるフィッシング詐欺、cookie情報の取得によるセッションハイジャック、情報詐取、他の不正サイトへの誘導などの被害につながったり、意図しないボタンをクリックさせられたりする可能性があります。
13.「非SSL(http)での登録」を「許可しない」にすることを強く推奨します。
非SSL(http)での登録では、フォームにアクセスした人の端末からスパイラルへ送信した個人情報などのデータが、盗み見されたり、改ざんされる可能性があります。
関連するページ
マイエリア
API:マイエリア
3.マイエリア セキュリティ
関連するFAQ
フォームのサンキューページにてマイエリアからログアウトしたい。
3.一覧表・単票
1.アクセス権限は「ユーザー」か「マイエリア」を選択しましょう。
「一般公開」を選択する場合、一覧表または単票に個人情報や非公開情報が含まれないことを今一度お確かめください。
検索エンジンによる記録・公開について
アクセス権限を「一般公開」にすることはインターネット上に公開することになります。
インターネット上に公開された一覧表はGoogleなどの検索エンジンのサーバに記録され、インターネット上で検索できるようになります。
後日、アクセス権限を「一般公開」以外に変更しても、検索エンジンの記録によって、しばらくの間はインターネット上で公開されている状態となります。
一覧表の一般公開機能を利用した、一覧表または単票に含める情報の管理において、全てユーザーの責任とし、スパイラル株式会社は一切の責任を負いません。
2.IPアドレスや接続元による制限をしましょう。
3.「コンテンツに関するセキュリティ設定」を「設定しない」にした場合、ウィルス感染、利用者をだます表示によるフィッシング詐欺、cookie情報の取得によるセッションハイジャック、情報詐取、他の不正サイトへの誘導などの被害につながったり、意図しないボタンをクリックさせられたりする可能性があります。
4.「非SSL(http)での登録」を「許可しない」にすることを強く推奨します。
非SSL(http)での登録では、フォームにアクセスした人の端末からスパイラルへ送信した個人情報などのデータが、盗み見されたり、改ざんされる可能性があります。
関連するページ
関連するFAQ
メール
1.全般
1.クリックログイン期間は、初期値ではなく適切な期間に変更しましょう。
期間を短く設定すれば、万が一、クリックログインURLが外部へ流出した場合、クリックログイン後の情報が外部から閲覧される可能性が低くなります。
※クリックログインURLは、配信毎に異なるURLが表示されます。
マイエリアの「URL期限設定」との関係について
メール文面設定の「URL有効期間設定」にて、マイエリアのクリックログインURLの有効期間を10分から365日まで設定できますが、マイエリアの「セキュリティに関する設定」にて、URL期限設定を「無期限に設定する」にチェックを入れている場合、メールのURL有効期間で設定した期間ではなく、「無期限」の方が優先されます。
但し、上記「2.マイエリア」にある通り、「無期限に設定する」は使用しないでください。
関連するFAQ
開発
1.スパイラルAPI
1.APIトークンおよびトークンシークレットはDB内のデータにアクセスできる重要な情報です。
APIトークンとトークンシークレットが漏洩した場合、第三者がスパイラルAPIを実行し、DBにアクセスできる可能性があります。
ログインパスワードと同レベルの管理をしてください。
2.APIトークンは、開発用・本番用など使い分けましょう。
本稼働後は開発用のAPIトークンを無効化する、または削除しましょう。
本番環境以外からスパイラルAPIを実行できなくするためです。
3.セキュリティ設定は「制限する」を選択しましょう。
用途にそぐわない場合のみ、「制限しない」を選択します。
万が一、APIトークンとトークンシークレットが漏洩した場合、実行できるAPIのレベルや環境が制限されていれば、悪用される可能性は低くなります。
関連するページ
2.スパイラルPHP
1.PHPの基本的なセキュリティ対策を実施しましょう。
インジェクション対策について
Cookieに重要な情報を格納しないようにしましょう。格納する場合、secure属性を付けます。
secure属性を付けた場合、暗号化された安全な通信の時だけ、ブラウザのCookieに保存された情報がサーバーへ送信されます。