ハッキングせずにできるウェブサイトのセキュリティチェック
ECサイト向けのパッシブなセキュリティチェック。TLS証明書の有効期限、HSTS、CSP、nosniff、Cookie属性、混在コンテンツ、古いjQuery、security.txt、DMARCを確認します。
FixReports 編集部2分で読めます
ECサイトのセキュリティ設定の多くは、サイトがすべての訪問者にすでに送っている情報を読むだけで、外部から確認できます。TLS証明書、リダイレクト、HTTPレスポンスヘッダー、Cookie、読み込んでいるスクリプト、公開DNSレコードです。こうしたパッシブ(受動的)なチェックは攻撃のための通信を一切送らず、ログインも不要なので、ストアにかかる負荷は通常の訪問と変わりません。有効期限が迫った証明書、HSTSの未設定、安全でないCookie、混在コンテンツ、既知の脆弱性があるバージョンのjQueryといった設定の不備を見つけられます。ただし、ペネトレーションテスト(侵入テスト)ではなく、ストアが安全であることを証明するものでもありません。
要点
- 2026年3月15日以降に発行された、公的に信頼されたTLS証明書の有効期間は最大200日です。2027年3月には100日、2029年3月には47日に短縮されます(CA/Browser Forum (新しいタブで開きます))。
- ブラウザーは、平文のHTTPで送られたHSTSヘッダーを無視します(MDN (新しいタブで開きます))。
- CSPの
frame-ancestorsディレクティブは<meta>タグでは機能しません。レスポンスヘッダーで指定する必要があります(MDN (新しいタブで開きます))。 - 3.5.0より前のjQueryには2つのXSS脆弱性があり、CISAはそのうちのCVE-2020-11023を、2025年1月23日に既知の悪用された脆弱性(KEV)カタログに追加しました(NVD (新しいタブで開きます))。
security.txtファイルにはContactフィールドとExpiresフィールドが必須で、/.well-known/security.txtに置く必要があります(RFC 9116 (新しいタブで開きます))。
どのようなものがパッシブなセキュリティチェックにあたりますか?
パッシブなチェックとは、通常のリクエストに対してサイトやDNSが返す内容を読むだけのものです。
具体的には、公開ページを読み込む、証明書とレスポンスヘッダーを読む、ページが設定するCookieとスクリプトを一覧にする、公開DNSレコードを照会する、といった作業です。パスワードを推測したり、インジェクションのペイロードを送ったり、管理画面のURLを探ったり、ポートスキャンをしたりはしません。以下の内容はすべて、ブラウザー、curl、openssl、digで実施できます。
TLS証明書とその有効期限はどう確認しますか?
証明書の日付と名前を直接読み取り、更新が自動化されていることを確認します。
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
notAfterが十分に先の日付であること、example.comとwww.example.comの両方を使っている場合は証明書が両方をカバーしていること(ブラウザーの証明書ビューアーで名前の一覧を確認できます)、ブラウザーに警告が表示されないことを確認します。証明書の有効期間は、2025年4月11日に採択されたBallot SC-081v3 (新しいタブで開きます)に基づき、CA/Browser ForumのBaseline Requirements(セクション6.3.2、2026年10月時点でバージョン2.3.1)のもとで短縮されつつあります。
| 証明書の発行日 | 最大有効期間 |
|---|---|
| 2026年3月15日より前 | 398日 |
| 2026年3月15日から2027年3月14日まで | 200日 |
| 2027年3月15日から2029年3月14日まで | 100日 |
| 2029年3月15日以降 | 47日 |
有効期間が短いと手動での更新はリスクが高くなるため、ホスティング会社や証明書ツールが自動で更新する設定になっているか確認してください。あわせて、平文のHTTPがHTTPSにリダイレクトされることも確認します。
curl -sI http://example.com/ | grep -i -E "^HTTP|^location"
locationヘッダーがhttps://で始まる301(または308)のレスポンスが返れば問題ありません。
ECサイトはどのセキュリティヘッダーを送信すべきですか?
少数のレスポンスヘッダーで、ブラウザー側でよくある攻撃を、ほとんどコストをかけずに防げます。
| ヘッダー | 役割 | 一般的な値 | 出典 |
|---|---|---|---|
Strict-Transport-Security | ブラウザーにHTTPSだけを使うよう指示し、ユーザーが証明書エラーを無視して先に進めないようにします | max-age=31536000; includeSubDomains | MDN (新しいタブで開きます) |
Content-Security-Policy: frame-ancestors | どのサイトがページを埋め込めるかを制御し、クリックジャッキングを防ぎます | frame-ancestors 'self' | MDN (新しいタブで開きます) |
X-Frame-Options | 従来のフレーム制御。OWASPによると、対応ブラウザーではframe-ancestorsに取って代わられています | DENYまたはSAMEORIGIN | OWASP (新しいタブで開きます) |
X-Content-Type-Options | MIMEスニッフィングを止め、誤ったタイプで配信されたスクリプトやスタイルシートをブロックします | nosniff | MDN (新しいタブで開きます) |
Referrer-Policy | ほかのサイトに送られるURL情報の量を制限します | strict-origin-when-cross-origin | OWASP |
X-XSS-Protection | ブラウザーのXSSフィルター用のヘッダー。OWASPによると、本来は安全なサイトにXSS脆弱性を生むことがあります | 設定しない、または0 | OWASP |
ストアが送信している内容を確認します。
curl -sI https://example.com/
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: frame-ancestors 'self'
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
注意点が2つあります。includeSubDomainsは、HTTPでしか動作しないサブドメインをすべてブロックするため、先にサブドメインを確認してください。HSTSのプリロードには、31536000以上のmax-ageとincludeSubDomainsが必要なので、preloadはすべてのサブドメインがHTTPSに対応してから追加します。スクリプトを制限する本格的なCSPは導入する価値がありますが、OWASPは設定と保守が複雑だと指摘しており、多くのアプリを入れているストアでは慎重にテストする必要があります。
CookieにはSecure、HttpOnly、SameSiteが設定されていますか?
セッションやカートのCookieには3つの属性すべてが必要で、Set-Cookieレスポンスヘッダーで確認できます。
| 属性 | 効果(MDN (新しいタブで開きます)による) | 重要になる場面 |
|---|---|---|
Secure | HTTPS経由でのみ送信されます。平文のHTTPのサイトでは設定できません | HTTPSのストアのすべてのCookie |
HttpOnly | JavaScriptからdocument.cookieで読み取れなくなり、XSS対策になります | ログインセッションとカート |
SameSite=LaxまたはStrict | クロスサイトのリクエストでCookieが送信される場面を制限します | セッション。Strictは認証用とカート用のCookieに適しています |
SameSite=None | クロスサイトのリクエストでも送信されます。Secureとの併用が必須です | それを必要とする、埋め込み型のサードパーティ機能だけ |
SameSite属性が設定されていない場合、ブラウザーはそのCookieをLaxとして扱います。自社のスクリプトで読み取る必要があるCookieはHttpOnlyにできないため、ログイン中の顧客や管理者を識別するCookieに重点を置いてください。
curl -sI https://example.com/ | grep -i "^set-cookie"
ブラウザーの開発者ツールでも同じ情報を確認でき、ページの読み込み後にスクリプトが設定したCookieも表示されます。
混在コンテンツはどう見つけますか?
混在コンテンツとは、HTTPSで配信されるページ上でHTTP経由で読み込まれるリソースのことで、ブラウザーのコンソールに一覧表示されます。
MDN (新しいタブで開きます)は、混在コンテンツを2つのグループに分けています。画像、音声、動画は「アップグレード可能」で、ブラウザーが自動的にHTTPSでリクエストします。スクリプト、スタイルシート、iframe、フォント、fetch()リクエストは「ブロック可能」で、ブラウザーがブロックするため、それに依存していた部分が動かなくなります。IPアドレスを直接指定したリクエストは、アップグレードされてもブロックされます。
見つけるには、主要なテンプレート(トップ、コレクション、商品、カート)でコンソールを開き、テーマのコード、ページのコンテンツ、アプリの設定からhttp://を検索します。Shopifyのヘルプセンターは、HTTPSで配信されていないアセットを含むストアのページは安全でないと見なされる (新しいタブで開きます)としており、アセットをShopifyでホストするか、HTTPSで配信するよう推奨しています。WooCommerceでは、サイトが過去にhttp://で運用されていた場合、古い投稿のコンテンツやテーマのオプションを確認してください。
既知のCVEがある古いJavaScriptライブラリはどう見つけますか?
各ページが読み込むライブラリを一覧にしてバージョンを確認し、National Vulnerability Database(NVD)と照合します。
まずはjQueryから始めます。ブラウザーのコンソールで$.fn.jqueryを実行すると、読み込まれているバージョンが返ります(jQuery API (新しいタブで開きます))。注意すべきバージョンは次のとおりです。
| CVE | 影響を受けるバージョン | 問題 | NVDスコア(v3.1) |
|---|---|---|---|
| CVE-2020-11022 (新しいタブで開きます) | 1.12.0以上3.5.0未満 | .html()や.append()などのメソッドに信頼できないHTMLを渡すと、コードが実行されるおそれがあります | 6.1 Medium |
| CVE-2020-11023 (新しいタブで開きます) | 1.0.3以上3.5.0未満 | 同様の問題で、<option>要素を含むHTMLが対象。2025年1月23日からCISAのKEVカタログに掲載 | 6.1 Medium |
| CVE-2019-11358 (新しいタブで開きます) | 3.4.0未満 | jQuery.extend(true, ...)によるプロトタイプ汚染 | 6.1 Medium |
2020年の2つの問題は、いずれもjQuery 3.5.0で修正されています。脆弱なバージョンであることは、欠陥のあるコードが存在することを意味します。実際に悪用できるかどうかは、サイトがそのコードにどのようにデータを渡しているかによります。WordPressはバージョン5.6以降 (新しいタブで開きます)jQuery 3.5.1を同梱しているため、WooCommerceのストアで古いjQueryが使われている場合は、WordPressが古いか、テーマやプラグインが独自のjQueryを読み込んでいることを示しています。Shopifyでは、テーマファイルと、スクリプトを挿入しているアプリを確認してください。
security.txtとは何で、ストアに必要ですか?
セキュリティ研究者に、脆弱性の報告方法を伝えるためのプレーンテキストファイルです。
RFC 9116 (新しいタブで開きます)(2022年4月。情報提供(Informational)のRFCのため、準拠は任意)によると、このファイルはHTTPSで/.well-known/security.txtにtext/plainとして配信する必要があります。ContactとExpiresは必須で、RFCはExpiresの日付を1年未満先にすることを推奨しています。
Contact: mailto:security@example.com
Expires: 2027-09-30T23:00:00.000Z
Preferred-Languages: en
Policy: https://example.com/security-policy
WooCommerceでは、サーバーにファイルを置けます。ホスティング型のプラットフォームでは、このパスにファイルを公開できるか確認してください。できない場合でも、お問い合わせページにセキュリティの連絡窓口をわかりやすく記載しておけば役立ちます。
DMARCはなりすましメールからストアをどう守りますか?
DMARCを使うと、アライメントの取れたSPFやDKIMに合格しないまま自社ドメインをFromアドレスに使っているメールを、隔離または拒否するようメールボックスプロバイダーに求めることができます。
p=noneのレコードはレポートを集めるだけで、なりすましメールは止められません。顧客は注文確認やパスワード再設定のメールが自社ドメインから届くと考えているため、自社のドメインそのものを表示するフィッシングメールはブロックする価値があります。ポリシーはdig +short TXT _dmarc.example.comで確認でき、仕様はRFC 9989 (新しいタブで開きます)で確認できます。DMARCが対象とするのはレコードを公開しているドメインだけで、よく似た別のドメインには効果がありません。
Shopifyが管理するのはどこまでで、WooCommerceでは何を自分で管理しますか?
Shopifyはストアフロントを支えるサーバーを運用していますが、セルフホストのWooCommerceストアでは、サーバーの設定はストア運営者とホスティング会社に委ねられます。
| 確認項目 | Shopify | WooCommerce(セルフホスト) |
|---|---|---|
| TLS証明書 | Shopifyに追加したすべてのドメインで無料 (新しいタブで開きます)。サードパーティのドメインでは最大48時間かかる場合あり | ホスティング会社または自前の設定 |
| HTTPからHTTPSへのリダイレクト | プラットフォーム | ウェブサーバー、CDN、ホスティングの設定 |
| セキュリティヘッダー | Shopifyのサーバーが送信 | ウェブサーバー、CDN、プラグイン |
| Cookieの属性 | Shopify独自のCookieはプラットフォームが設定。アプリとテーマのCookieは運営者の責任 | WordPressコア、プラグイン、サーバー |
| 混在コンテンツとJSライブラリ | 自社のテーマ、コンテンツ、アプリ | 自社のテーマ、コンテンツ、プラグイン |
| security.txtとDMARC | 自社のドメインとDNS | 自社のドメインとDNS |
2026年10月に当社がShopifyでホストされている複数のストアフロントを確認したところ、レスポンスにはmax-ageが約91日のHSTS、X-Content-Type-Options: nosniff、upgrade-insecure-requestsを含むCSPが含まれていましたが、frame-ancestorsはストアによって異なりました。ShopifyはPCI DSSレベル1準拠の認定を受けている (新しいタブで開きます)としています。テーマとインストールしたアプリは、引き続きストア運営者の責任です。
WooCommerceについては、WordPressのセキュリティ強化ガイド (新しいタブで開きます)が、WordPressとプラグインを最新の状態に保つこと、使っていないプラグインを削除すること、ホスティング会社にどのようなセキュリティ対策を講じているか確認することを勧めています。
なぜこれはペネトレーションテストではないのですか?
ペネトレーションテストは実際に攻撃を試みますが、パッシブなチェックは観察するだけです。
NIST SP 800-115は、ペネトレーションテストを、評価者が現実の攻撃を模倣し、システムのセキュリティ機能を回避する方法を見つけるセキュリティテストと定義しています(NISTの用語集 (新しいタブで開きます))。パッシブなチェックでは、プラグインのサーバー側の欠陥、脆弱な管理者パスワードや使い回しのパスワード、二要素認証の未設定、アクセス制御の不備、ページのソースに現れない脆弱なコードは見えません。いつでも繰り返せるベースラインとして活用してください。より確かな保証が必要な場合は、自社が所有している、またはテストの許可を得ているシステムを対象に、範囲を文書で定めたペネトレーションテストを依頼してください。
無料スキャンで、ストアの最初のチェックを実施できます。ウェブサイトセキュリティレポートは、TLSやリダイレクトからヘッダー、Cookie、混在コンテンツ、古いライブラリ、security.txt、DMARCまで、この記事で紹介したパッシブなチェックを網羅し、指摘事項ごとに修正方法を示します。ほかのパッシブな診断と同様に、ストアが安全であることを保証するものではありません。
よくある質問
パッシブなセキュリティチェックはストアにリスクをもたらしますか?
リスクは通常の訪問と変わりません。ブラウザーやメールサーバーがリクエストするのと同じ公開ページとDNSレコードを要求するだけで、ログインを試みたり、攻撃用のペイロードを送ったりはしません。
Shopifyでセキュリティヘッダーを追加できますか?
ストアフロントのレスポンスヘッダーはShopifyのサーバーから送られるため、必要なヘッダーがない場合はShopifyサポートに問い合わせてください。テーマにCSPの<meta>タグを入れれば一部のディレクティブは追加できますが、MDNによるとframe-ancestorsは<meta>ではサポートされていません。
古いバージョンのjQueryが使われていたら、ストアはハッキングされているということですか?
いいえ。既知の脆弱性があるコードが読み込まれているということであり、サイトが影響を受けるメソッドに信頼できないHTMLを渡している場合にリスクが高まります。jQueryを更新するか、それを読み込んでいるテーマやプラグインを削除してください。
現在、TLS証明書の有効期間は最長どのくらいですか?
2026年3月15日以降に発行された、公的に信頼された証明書の有効期間は最大200日です。この上限は2027年3月15日から100日、2029年3月15日から47日に短縮されます。
security.txtファイルは必須ですか?
RFC 9116は情報提供(Informational)のRFCなので、規格上、ファイルの公開は任意です。公開の手間は小さく、研究者にとって明確な連絡手段になります。
パッシブスキャンで問題がなければ、ストアは安全ですか?
いいえ。公開されている設定が正しく見えることを示すだけです。サーバー側の脆弱性、アカウントのセキュリティ、ビジネスロジックの欠陥には、別のテストが必要です。
出典
- Baseline Requirements for the Issuance and Management of Publicly-Trusted TLS Server Certificates, version 2.3.1 (新しいタブで開きます)、CA/Browser Forum、2026年10月4日
- Ballot SC-081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods (新しいタブで開きます)、CA/Browser Forum、2025年4月11日
- Strict-Transport-Security (新しいタブで開きます)、MDN Web Docs、2026年9月11日最終更新
- CSP: frame-ancestors (新しいタブで開きます)、MDN Web Docs、2026年8月27日最終更新
- X-Content-Type-Options (新しいタブで開きます)、MDN Web Docs、2026年3月17日最終更新
- Using HTTP cookies (新しいタブで開きます)、MDN Web Docs、2026年9月17日最終更新
- Mixed content (新しいタブで開きます)、MDN Web Docs、2026年8月15日最終更新
- HTTP Security Response Headers Cheat Sheet (新しいタブで開きます)、OWASP Cheat Sheet Series、2026年10月22日閲覧
- CVE-2020-11022 (新しいタブで開きます)、NIST National Vulnerability Database、2020年4月29日公開
- CVE-2020-11023 (新しいタブで開きます)、NIST National Vulnerability Database、2020年4月29日公開
- CVE-2019-11358 (新しいタブで開きます)、NIST National Vulnerability Database、2019年4月20日公開
- .jquery (新しいタブで開きます)、jQuery API Documentation、2026年10月22日閲覧
- Updating core jQuery to version 3, part 2 (新しいタブで開きます)、Make WordPress Core、2020年11月5日
- RFC 9116: A File Format to Aid in Security Vulnerability Disclosure (新しいタブで開きます)、IETF、2022年4月
- RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC) (新しいタブで開きます)、IETF、2026年5月
- Enabling secure connections to your Shopify store (新しいタブで開きます)、Shopify ヘルプセンター、2026年10月22日閲覧
- Security (新しいタブで開きます)、Shopify、2026年10月22日閲覧
- Hardening WordPress (新しいタブで開きます)、WordPress Developer Resources、2026年10月22日閲覧
- Penetration testing (glossary) (新しいタブで開きます)、NIST Computer Security Resource Center、NIST SP 800-115(2008年9月)を引用、2026年10月22日閲覧
すべてのガイド
- ADAデマンドレターが届いたら:最初に確認することウェブサイトへのADAデマンドレターで指摘されやすい点、WCAGとの関係、集めるべき資料、オーバーレイで解決しない理由、弁護士に相談する時期を解説。法的助言ではありません。
- ECサイトのCore Web Vitals:LCP・INP・CLS解説LCP・INP・CLSが測る内容、75パーセンタイルでの「良好」「不良」の基準、ラボデータとフィールドデータの違い、ShopifyとWooCommerceでのよくある改善策を解説します。
- ECサイトのSPF・DKIM・DMARC設定:Gmail・Yahooの送信者要件に対応SPF・DKIM・DMARCの役割、Gmail・Yahoo・Outlook.comが送信者に求める要件、ShopifyとWooCommerceでの設定方法、p=rejectまで進める手順を解説します。