セキュアコーディングガイドライン

はじめに

ネクストエンジンAPIを利用してのアプリ開発は、利便性を高める反面、次のリスクを伴います。

  • セキュリティー上の問題が発生する可能性。
  • ネクストエンジンが正常に動作しなくなる可能性。
  • それらによるユーザー企業へご迷惑がかかり、賠償問題への発展の可能性。

このページではネクストエンジンAPIを使用したアプリを作成する上で注意すべき点をご説明致します。


クロスサイトスクリプティングを防ぐ

クロスサイトスクリプティングとは

クロスサイトスクリプティング(Cross-Site Scripting 以下XSS)とは、標的となるウェブサイトに外部から攻撃用のスクリプトを混入し、被害者のウェブブラウザー上で実行させようとする攻撃手法の一つ。


発生しうる脅威

  • ネクストエンジンのデータが盗み出される
  • 偽のページが表示される
  • 不正なファイルが読み込まれる
  • セッションの乗っ取り
  • 悪意あるCookieがWebブラウザーに保存される

脆弱性のあるコードの例

var t1 = document.getElementById('t1');
var d1 = document.getElementById('d1');
d1.innerHTML = '<input type="text" value="' + t1.value + '" />';

このコードは、t1 の値からテキストボックスを生成します。t1 を次のような形式にすることで、コード実装者の意図しないコードが実行されます。

"onclick="alert(1)

対策

出力する全ての要素に対して、エスケープ処理を施す

外部からプログラムに渡される文字列から、特殊な意味を持つ文字(「
<」「>」「”」など)をエスケープします。ただし、HTMLの要素を適切にエスケープするには、様々な知識を要します。できる限り、 document.writeや innerHTMLを使用したHTMLの動的な生成は避けることを推奨します。なお、innerHTMLの代わりにinnerTextを使用することでも、一般的な XSS は防げます。

出力するURLは「http://」または 「https://」で始まるURLだけにする

外部からの入力をもとに a タグの href 属性や img タグの src 属性などのURLを動的に生成する場合は、「javascript:」などから始まる文字列を入力してスクリプトを埋め込まれる場合があります。これを防ぐには、「http://」と 「https://」で始まる URL のみを出力するようにします。

外部からの入力値を使用した要素の生成は避ける

以下のような実装をしてはいけません。

var tag = document.createElement(“d1”);
/* untrusted = "{ left:expression( alert('xss') )" などでXSSが発生 */
d1.style.cssText = untrusted;

外部からの入力値を使用したスタイルシートの生成は避ける

スタイルシートには、 expression() 等を利用してスクリプトを記述できます。 そのため、次のようなプログラムには脆弱性があります。

var tag = document.createElement(“d1”);
/* untrusted = "{ left:expression( alert('xss') )" などでXSSが発生 */
d1.style.cssText = untrusted;

信頼できない外部サイトに置かれた JavaScript や CSS を読み込まない

取り込み先のスクリプトが変わり、ある日突然、データを盗み出すためのプログラムが作動するかもしれません。外部のスクリプトなどを取り込む場合は、そのサイトを信頼できるかどうか、十分吟味してください。


より詳しい対策方法

クロスサイトスクリプティング[参照先:salesforce.com]


クロスサイトリクエストフォージェリを防ぐ

クロスサイトリクエストフォージェリとは

クロスサイトリクエストフォージェリ(Cross-Site Request Forgeries 以下CSRF)とは、Webサイトににスクリプトを組み込んで、閲覧者に意図せず別のWebサイトに対する何らかの操作を行わせる攻撃手法のひとつ。 ネクストエンジンに対してこの攻撃が行われた場合、ネクストエンジンにログインしたユーザー自身からリクエストが送られるため、そのリクエストが実行されてしまう場合があります。


攻撃の大まかな流れ

  1. 攻撃者が、攻撃用の Web ページを作成して WWW 上に公開する。

    (WWW上ででなくとも、未対策のHTMLメーラーにウェブページをHTMLメールとして送信するなど、様々な攻撃手法が考えうる。)
  2. 第三者が、攻撃用の Web ページにアクセスする。
  3. 第三者は、攻撃者が用意した任意の HTTP リクエストを送信させられる。
  4. 送信させられた HTTP リクエストによって、攻撃者の意図した操作が行われる。

    (ここで「第三者」とは、被攻撃サイトに意図せずアクセスさせられると言う意味で用いている。)

発生しうる脅威

ネクストエンジンのユーザーが、自身が意図しない操作を行なってしまう。


CSRFを防ぐための制限

ネクストエンジン では、CSRFに対して次の対策が採られています。 セッションごとに発行されるトークンが付いたリクエストのみ受け付ける アプリURLとして登録したドメインからのリクエストのみ受け付ける そのため、ネクストエンジンAPIを使用せずにネクストエンジンに対してリクエストを送ることはできません。


ネクストエンジンAPI 利用時の注意点

CRSF対策による上記の制限のため、本サイトで説明するネクストエンジンAPI を使用しないリクエストは、外部から実行させることができません。 また、ネクストエンジンAPIによるリクエストには、認証情報を含める必要があります。リクエストに認証情報を含める方法は、本サイトの説明やSDKやサンプルを参考にしてください。


より詳しい対策方法

クロスサイトリクエストフォージェリ[参照先:salesforce.com]


SQLインジェクション

SQLインジェクションとは

SQLインジェクションとは、データベースと連動したWebサイトで、データベースへの問い合わせや操作を行うプログラムにパラメータとしてSQL文の断片を与えることにより、データベースを改ざんしたり不正に情報を入手する攻撃手法の一つ。


対策方法

SQLインジェクション[参照先:salesforce.com]


通信にHTTPSを使用する

通信方法の制限

ネクストエンジンのサービスでは、HTTPS によりお客様の Web ブラウザとの通信を暗号化しています。ネクストエンジンAPIを使用するための通信にも、HTTPSを使用する必要があります。また、アプリの提供もHTTPSでの提供をお願い致します。


取得したデータは適切に保管する

ネクストエンジンから取得したデータには、個人情報や機密情報が含まれます。これらの情報を外部アプリケーションで保存する場合は、データの流出や損失が発生しないよう、慎重にシステムの設計と運用を行うようにしてください。 特に、パスワードなどの重要な情報をプログラムにハードコーディングするような実装は避けてください。


サービスへの影響を考慮する

問題のあるプログラムによって、サービス低下や利用不能な状況が発生することがあります。

短時間で大量のリクエスト送信を避ける

自動的に大量のリクエストを送信するようなプログラムや、並列で多数のリクエストを同時実行するプログラムは、レスポンス悪化などのサービス低下を招く原因になります。サーバーの高負荷や大量リソース消費を生じさせるリクエストについては、アクセス制限を実施させていただく場合がありますのでご注意ください。


複数のWebブラウザーで動作を確認する

読み込むJavaScriptやCSSやHTMLの問題によって、作成したアプリの機能が正常に動作しない場合があります。 ネクストエンジンAPIを利用して作成したアプリが意図通りに動作していることをテスト環境で十分確認してください。 Webブラウザーの種類やバージョンの違いによって問題が発生する場合があります。動作確認の際には、複数のWebブラウザーを使用することを推奨します。