web-dev-qa-db-ja.com

Web APIのセキュリティヘッダー

私は、Let's Encryptを介してデフォルトでHTTPSを備えたキャディサーバーの背後にあるgolang Web APIのセットアップを取得しました。サーバーは、Web APIへのすべてのリクエストをプロキシします。そこで、securityheaders.ioなどのサイトでWebサーバーの「セキュリティ」をテストしました。彼らは私にFを与えたので、私は彼らが要求したヘッダーを追加し、私はAを得ました

Access-Control-Allow-Methods "GET, POST, OPTIONS"
Strict-Transport-Security "max-age=31536000;"
Content-Security-Policy "script-src 'self'"
X-XSS-Protection "1; mode=block"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
-Server

これらは現在私が持っているヘッダーですが、私が作っているものがウェブサイトではなくAPIウェブサーバーであるときに、それらがセキュリティのために必要かどうか知りたいです

Access-Control-Allow-Methods "GET, POST, OPTIONS"
-Server

基本的に、APIをリクエストするだけの場合に必要なセキュリティヘッダーはすべてありますか?

14
Whiteclaws

リストのヘッダーをチェックすることは、サイトのセキュリティを主張するための最良の方法ではありません。 securityheaders.io のようなサービスはあなたを正しい方向に向かわせることができますが、彼らが行うすべてのことは、アプリケーションに関するコンテキストなしで提案された設定のリストと比較することです。その結果、一部の提案は、JSON応答しか提供しないAPIエンドポイントのセキュリティに影響を与えません。

  • Strict-Transport-Securityは、ユーザーが最初にアクセスしてからmax-ageタイムアウトに達するまでHTTPS経由でサイトに直接接続することを保証し、ダウングレード攻撃を防ぐため、意味があります。 APIエンドポイントでもSSLで保護する必要があるため、そのヘッダーを保持してください。

  • Access-Control-Allow-Methods: GET, POST, OPTIONS自体はセキュリティオプションではありません。 APIが [〜#〜] cors [〜#〜] プリフライトリクエストを介して機能する場合は、クロスオリジンサイトで使用できるメソッドを決定する必要があります。 CORSを無効にすると、APIが使用できなくなる可能性があります。その特定の設定が適切かどうかは、実装によって異なります。

  • X-XSS-Protection: 1; mode=blockは、XSS Auditor(WebKitブラウザーに実装されているがFirefoxでは実装されていない)に、反映されたXSS試行を検出したときにサイトをレンダリングしないように指示するため、通常のサイトに適した方法です。ただし、JSON応答のみを提供し、アクティブコンテンツを提供しないAPIの場合、このヘッダーは何のメリットもありません。

  • X-Content-Type-Options: nosniffは、サイトがタイプを正しく宣言していなかった場合に、ブラウザがコンテンツタイプを推測できないようにします。 JSON APIを実行している場合は、Content-Type: application/jsonを使用して応答を提供する必要があります。これを正しく行えば、nosniffディレクティブを追加する必要はありません。

  • X-Frame-Options: Denyを使用すると、WebサイトがHTMLフレームにサイトを埋め込むことができなくなります。そのオプションは停止します クリックジャッキング攻撃 攻撃者が偽装したフレームを介してユーザーをだましてWebサイトを操作させます。しかし、インタラクティブな要素がなければ、クロスオリジンのフレーミングによるリスクは限られています。ただし、フレームからコンテンツをドラッグすることを含む高度な攻撃があり、JSON応答を開示する可能性があるため、そのヘッダーをそこに残したい場合があります。

  • Content-Security-Policyヘッダーは、サイトが操作を許可されているOriginのコンテンツの種類(スクリプト、スタイルシート、画像など)を制御します。 "script-src 'self'の設定は、同じOriginからのスクリプトのみがロードされることを意味します。 CSPは通常のサイトに役立ちますが、CSPによって制御される可能性のあるアクティブコンテンツを提供しないため、APIエンドポイントには意味がありません。

  • Serverヘッダーは、サーバーとその上で実行されているソフトウェアに関する情報を指定します。多くの場合、バックエンドソフトウェアとバージョンに関する情報を開示しないために、そのヘッダーをまったく送信しないことをお勧めします。

32
Arminius