独学フリーランスの備忘録

「うちのサイト、大丈夫?」に答えるために、セキュリティ診断アプリを自作した話

更新日:2026-10-20 著者:unigram 読了目安:7分

「うちのサイト、大丈夫?」と聞かれることが増えた

ここ最近、企業や団体の情報漏えいのニュースを目にしない週はほとんどありません。サイトの改ざんや、会員情報の流出、取引先を装ったなりすましメールなど、被害の形もさまざまです。

そうしたニュースが続くと、Web制作の仕事をしている私のところにも「うちのサイトは大丈夫?」「何か対策しておいた方がいい?」という相談が増えてきました。中には、取引先から届いたセキュリティのチェックシートに回答を求められて困っている、という方もいます。

ただ、「大丈夫かどうか」を毎回手作業で調べるのは時間がかかります。調べた結果を、専門用語に慣れていないお客様にわかりやすく伝えるのも一苦労です。
正直それを対応するための費用を請求したいけど、それもなかなかむずかしい時も。。

そこで、URLを入れるだけでサイトの弱点を洗い出し、対応方法まで出してくれるアプリを自作することにしました。この記事では、その制作の過程をまとめます。

作ったもの:URLを入れるだけの「サイトセキュリティチェック」

作ったのは、MacとWindowsで動くデスクトップアプリです。アイコンをダブルクリックするとブラウザに操作画面が開き、診断したいサイトのURLを入れるだけで診断が始まります。

診断が終わると、次のものができあがります。

  • レポート:A〜Eの総合評価と、「要対応」「要改善」の項目を優先順に並べた一覧。項目ごとに「なぜ必要か」と「どのファイルのどこに何を書くか」まで載せています
  • 設定ファイル一式:.htaccess の追記内容、wp-config.php の追記内容、置くだけで効くプラグイン、DNSの設定値など。コピーして使える形で作られます
  • お客様向けのExcel:専門用語を避けた印刷用の資料。危険性とかんたんな対応方法をまとめています
  • チェックシートへの自動回答:取引先から届いたExcel・Wordのチェックシートを読み込ませると、診断結果をもとに回答欄を埋めます。形式が毎回違っても、質問の列と回答欄を自動で見つけます(API使用でお金はかかるが数円〜数十円でできる)

さらに詳しい診断も可能。
URLだけで行う「外部診断」に加えて、サーバーに確認用のファイルを一時的に置くと、外からは見えない部分(プラグインの全件、ファイルの改ざん、マルウェアなど)まで確認できます。
このファイルは読み取り専用で、正しいトークンがないと「存在しないページ」として振る舞うようにしてあります。

同じサイトを定期的に診断すると、レポートの冒頭に「前回からの変化」が出ます。評価が下がった項目や、前回はなかった外部スクリプトの追加(改ざんの典型的な兆候)にすぐ気づけます。


何をチェックしているのか

診断項目は約50。攻撃を仕掛けるような試験はせず、公開されている情報と通常のアクセスだけで判定します。分野ごとの主な内容は次のとおりです。

分野主なチェック内容
通信の暗号化HTTPS対応、SSL証明書の期限、古い暗号方式(TLS1.0/1.1)、http→httpsの転送
更新・保守の状況WordPress本体・プラグイン・テーマの更新、既知の脆弱性、開発が止まったプラグイン、PHPのサポート期限
管理画面の保護ログイン画面が誰でも開けないか、ログインIDが外から分からないか、XML-RPC
サーバーの設定WAFの有無、インターネットに開いているポート(データベース等)、ファイルの権限
情報の漏えい設定ファイルやバックアップが誰でも取得できないか(35パターン)、エラー表示
ブラウザ側の防御セキュリティヘッダー、外部JS/CSSの改ざん防止(SRI)
改ざん・マルウェアページ内の不審なコード、検索エンジンやスマホにだけ不正な内容を見せる手口、公式ファイルとの照合
バックアップバックアップの仕組みと保管場所
ドメイン・メールなりすましメール対策(SPF・DMARC)、ドメインの有効期限

「最新の情報」が必要な項目は、無料で公開されているデータから自動で取得しています。

取得元使い道
WordPress.org本体・プラグインの最新版、公開停止されたプラグイン
Wordfence IntelligenceWordPress関連の既知の脆弱性(無料のAPIキーが必要)
endoflife.datePHP・MySQL等のサポート期限
CISA KEV実際に攻撃で悪用されている脆弱性(米国政府の公開データ)

特にCISA KEVとの突き合わせは大事にしています。「脆弱性がある」だけでなく「今まさに攻撃に使われている」ものを最優先で表示することで、お客様に優先順位を伝えやすくなります。

制作の流れ

制作は、AIアシスタントのClaudeと対話しながら進めました。「こういうことができる?」と相談し、試作を動かしては気になった点を伝える、という繰り返しです。大きな流れは次のとおりです。

  1. できるかどうかの確認:WordPressのサイトもそうでないサイトも、外からどこまで判定できるかを整理しました。サーバーに依存する部分は「サーバー内チェック」として切り分ける方針に。
  2. 実際のチェックシートをもとに診断項目を決定:取引先から届いたチェックシートや外部評価サービスの指摘を参考に、一般的に重要とされる項目(OWASP、IPAのガイドなど)も加えました。ただし「保守契約の内容」のような、技術的に診断できない項目は外しています。
  3. まずはコマンドで動く版:診断の中身を先に作り、テスト用のWordPressを用意して正しく判定できるかを確かめました。
  4. チェックシートへの自動回答:シートは取引先ごとに形式が違うので、「決まったシートに記入する」のではなく「どんなシートでも質問を読み取って回答する」仕組みにしました。
  5. 誰でも使えるアプリに:ターミナルを使わず、アイコンのダブルクリックで起動できるMac版・Windows版を作りました。Windows版はPythonごと同梱しているので、インストールは不要です。
  6. 画面と言葉の作り込み:Googleアナリティクスのようなシンプルな管理画面にし、レポート一覧をサイトごとにまとめたり、お客様向けExcelを追加したりと、実際に使いながら改良を重ねました。
  7. 仕様書の作成:最後に、診断方法や情報の取得元、制限事項をまとめた仕様書をPDFで作りました。

AIに任せると「それらしいもの」はすぐにできます。ただし、実際のサイトで試すと想定外のことが次々に出てきます。仕事で使えるものにするには、そこからの積み重ねが本番でした。

つまずいたところ

作ってみて一番時間がかかったのは、診断そのものより「実際の環境で正しく動かすこと」でした。

Macでアプリが起動しない

ダウンロードしたフォルダからそのまま開くと、macOSが安全のためにアプリを一時的な場所で動かす仕組みがあります。そのせいで、起動後に一部の機能が動かない、という不具合が出ました。「アプリケーション」フォルダに移してから開くよう案内を出し、起動時に必要な部品を先に読み込むことで解決しました。アプリを移動したあとに「すでに閉じられています」と出て開けなくなる現象もあり、古い起動を自動で止める仕組みを入れています。

Windowsでファイル名が文字化け

日本語のファイル名を含むzipをWindowsで開くと、ファイル名が文字化けしました。zipの作り方を変え、文字コード(UTF-8)を正しく伝える形式にして解決しています。

WordPressがサブフォルダにあるサイト

公開フォルダの中の別フォルダにWordPressを入れ、サイト自体はルートで表示しているケースです。この場合、ログイン画面を守る設定はルートではなく、WordPressのフォルダ側の .htaccess に書く必要があります。当初はそれに対応しておらず、案内どおりに設定しても「要対応」のままでした。今は設置フォルダを自動で見つけ、置き場所もそのフォルダ名で案内します。

正常なファイルを「改ざん」と判定

WordPressの公式ファイルと照合する機能で、日本語版の version.php が「改変されている」と出ました。日本語版と英語版では、このファイルの中身が1行だけ違うためです。照合に使う公式データを、そのサイトに入っている配布物の言語に合わせるよう直しました。誤って「改ざん」と伝えるとお客様を不必要に不安にさせてしまうので、特に気を使った部分です。

外部サービスの仕様変更

脆弱性情報を提供しているWordfenceのAPIが新しい版に切り替わり、古い版はデータを返さなくなっていました。利用条件を調べ直したときに気づいて対応しています。外部のデータに頼るツールは、作って終わりではなく、定期的な見直しが欠かせません。

お客様に伝わるように工夫したこと

診断結果は、読んだ人が動けなければ意味がありません。そのため、言葉の選び方にはかなり時間を使いました。

  • 担当を「自分ごと」にできる言い方に:最初は「ベンダー」という表現を使っていましたが、「サイト制作・保守会社」「レンタルサーバー会社」「サイト運営者(お客様)」に変えました。誰が対応するものかが、読んだ瞬間にわかります
  • 置き場所を具体的に:「.htaccess に追記」ではなく、「公開フォルダ直下の .htaccess の、# BEGIN WordPress の行より前」のように、どのファイルのどこに書くかまで書きます
  • 初心者向けの手順を先に:管理画面やFTPソフトでできる方法を先に書き、コマンドを使う方法は「上級者向け」と分けています
  • お客様用と作業者用を分ける:設定値まで載った詳しいレポートは作業者向け。お客様には、危険性とかんたんな対応だけをまとめた印刷用のExcelを渡せるようにしました
  • 変化を冒頭に:定期診断では「前回から何が変わったか」が一番知りたい情報なので、レポートの一番上にまとめています

注意点と限界

便利なツールにはなりましたが、万能ではありません。使う上で以下の点はお客様にも正直に伝えています。

  • 専門の脆弱性診断の代わりではない:入力フォームへの攻撃試験などは行いません。既知の問題を見つけ、対応を助けるためのものです
  • 外から見えないことはわからない:URLだけの診断では、サーバー内部の項目は「要確認」になります。完全に確かめるには、サーバー内チェックが必要です
  • 自分が管理するサイトだけで使う:診断は破壊的なものではありませんが、ポートの確認なども含むため、管理者の了解を得たサイトだけで使っています
  • 外部APIの利用条件に注意:Google Safe Browsing や WPScan の無料枠は非営利目的に限られます。仕事で使う場合は、営利目的でも無料で使える Wordfence を中心にしています
  • 結果は「その時点」のもの:新しい脆弱性は毎日のように見つかります。一度の診断で安心せず、定期的な診断と更新作業をおすすめしています

まとめ

「うちのサイト、大丈夫?」という相談に、今はレポートを見せながら「ここが大丈夫で、ここを直しましょう」と具体的に答えられるようになりました。取引先から届くチェックシートへの回答も、以前よりずっと早くなっています。

セキュリティ対策で一番大事なのは、特別なことよりも「更新を止めない」「管理画面を守る」「バックアップを取る」といった基本を続けることだと、作ってみて改めて感じました。このアプリは、その基本ができているかを定期的に確かめるための道具です。

自分のサイトが気になっている方は、お気軽にご相談ください。

広告

以下のエリアには広告またはプロモーションが表示される場合があります。

この記事を書いた人

unigram
web、印刷、映像などの制作をしています。@京都、フリーランス18年目。 大学で講師もしています。 自身の備忘録も兼ねて、Web制作・WordPress・SEO・GA4・生成AI活用をテーマに情報発信しています。わかりやすく優しい内容で記事作成を心がけています。