名古屋でAIシステムの開発をしている小嶋です。ホームページのURLを入れるだけで、外から見える守りの弱さを診断するシステム「Kurage Security Check」を作りました。今日1日で作り、デモを公開して、Kurage App Store に出品しています。
Kurage Security Check(デモ) https://proto.exbridge.jp/kseccheck/#ref=vibeblog-kseccheck
なぜ作ったか
今日は朝から、セキュリティの記事を3本書きました。
PHPの脆弱性「PHP2Shell」と相次ぐ情報漏洩は関係あるのか https://exbridge.jp/vibeblog/2026-10-24-php2shell-joho-roei-team-mirai.html#ref=vibeblog-kseccheck
中小企業21社のホームページを、SEO・AEO・GEOと安全面で診断した結果 https://exbridge.jp/vibeblog/2026-10-24-homepage-shukyaku-security-21sha.html#ref=vibeblog-kseccheck
サイバー攻撃対策に使えるOSSのセキュリティ対策ツール https://exbridge.jp/vibeblog/2026-10-24-cyber-kogeki-taisaku-oss-tool.html#ref=vibeblog-kseccheck
21社の診断では、スクリプトを読み込む先を絞る設定(CSP)をしているサイトは0社でした。サポートの切れたPHPのままのサイトや、既知の脆弱性がある古い部品を使っているサイトもありました。
ただ、そのときは手で調べたので、ほかの人がすぐに試せる形ではありませんでした。セキュリティのOSSには良いものがたくさんありますが、多くはPythonやシェルで動く道具で、ふつうのレンタルサーバーには置けません。そこで、「URLを入れるだけ」「PHPを置くだけで動く」形で作ることにしました。
何を調べるか
4つの分野に分けて、100点満点で採点します。
- 通信の暗号化:https で開けるか、http で来た人が https に切り替わるか、証明書の期限と正しさ、「必ず https で開く」指示(HSTS)
- ブラウザへの守りの指示:読み込んでよいスクリプトの指定(CSP)、他のサイトへの埋め込みの禁止、Cookie の守りの属性など
- 版の見えすぎ・古い部品:サポートの切れたPHP、PHP2Shellの修正が入っていないPHP、古いWordPress、既知の脆弱性がある jQuery・jQuery UI・Bootstrap など
- ページと入力欄:入力欄の送り先が暗号化されていないか、PHPのエラーが画面に出ていないか、トップページのエラー、連絡先(security.txt)の公開
指摘ごとに、実際に見えた値と直し方を出し、重い順に並べます。結果は、Xに貼れるカード画像と、Markdownの診断書で受け取れます。
決めたこと1:攻撃に近い検査はしない
セキュリティの検査には、管理画面を探す、隠しファイルを探す、パスワードを試す、弱い暗号で接続し直す、といった攻撃に近いものがあります。持ち主の許可なく他人のサイトにやると、攻撃とみなされます。
Kurage Security Check は、ふつうの訪問者がページを開くのと同じ範囲だけを見ます。トップページ、決まった場所に置く security.txt、ページが読み込んでいるスクリプトの先頭だけです。だから、取引先や子会社、委託先のサイトの点検にも使えます。最近の情報漏洩は委託先を経由したものが多いので、ここは大事だと考えました。
そのかわり、サーバーの中の設定や、プラグインの一つひとつの脆弱性は分かりません。点数が高くても「安全が保証された」わけではないことを、画面にも診断書にも書いています。
決めたこと2:結果のページのURLは、推測できない番号にする
当社のSEO・AEO・GEOの診断システムでは、結果のページの番号をURLから計算していました。これをセキュリティの診断でやると、だれでも他社のサイトの弱点の一覧を引けてしまいます。
そこで、結果のページは診断のたびに作る、推測できない番号のURLにしました。検索エンジンにも出しません。
決めたこと3:社内のアドレスに向けさせない
URLを入れると、こちらのサーバーがそのサイトを読みに行きます。ここに社内のアドレスを入れられると、こちらのサーバーが踏み台にされます。入れられたURLの行き先を確かめるだけでなく、リダイレクトの先も1回ごとに確かめ、確かめた行き先に接続を固定しています。
当社のサイトを診断したら67点だった
作ってすぐ、当社の exbridge.jp にかけました。結果は67点でした。
- 古い jQuery(1.6.3):10年以上前の版を、トップページなどで読み込んでいました。既知の脆弱性があります。
- http で来た人が https に切り替わらない:昔のリンクやブックマークから来た人は、暗号化されないまま見ていました。
- CSP がない
jQuery は、新しい版に上げるだけでは済みませんでした。サイトの共通のスクリプトが、新しい版では消えた機能や、新しい版ではエラーになる書き方を使っていたためです。中身を見ると、していることは「ページ内のリンクをなめらかにスクロールする」と「画像の切り替え」の2つだけでした。そこで jQuery をやめ、素の JavaScript に書き直しました。読み込むファイルも減って軽くなります。
http から https への切り替えは、サーバーの設定に数行足しました。https のページで転送がくり返されないかを、すぐに確かめています。
直したあと、ブラウザで6ページを開き、エラーが出ないこと、画像の切り替えとスクロールが動くことを確かめました。測り直すと87点でした。残っているのは CSP と security.txt です。
今朝は、同じサイトのPHPも、修正の出ない古い版から修正の入った版に切り替えています。これも、外から見えるところからは分かりにくい問題でした。
作る途中で見つけた落とし穴
- CDNのURLの読み方:配信元の jQuery は、
/jquery/3.5.1/jquery.min.js?ver=1.11.0のように、フォルダ名の版と末尾の?ver=が食い違うことがあります。最初は?ver=を先に読んでいて、新しい版を「古い」と誤判定しました。フォルダ名の版を先に読むように直しました。 - ツールの誤判定は、実物で確かめる:判定を作ったあと、21社のサイトにかけて、出てきた指摘を1件ずつ実物と見比べました。誤判定はここで見つかりました。手元のテストだけで「できた」とは言えません。
追記:Pro 版の仕様と機能(同日夜)
公開のあと、同じ日のうちに Pro 版を作りました。ノーマル版の判定には手を入れず、設定に接続先と鍵を書くと Pro の点検が足される作りです。
Kurage Security Check Pro(デモ) https://proto.exbridge.jp/kseccheck/#ref=vibeblog-kseccheck-pro
Pro で足される点検
対象は、所有を確かめた自社のドメインだけです。
- https の設定の詳しい読み取り:受け付ける暗号の方式、弱い組み合わせ、証明書の検証と並び順。SSLyze を別のコマンドとして呼び、結果だけを受け取ります
- 部品の脆弱性の照合:読み込んでいる jQuery・Bootstrap などの版を、retire.js の脆弱性の一覧と突き合わせます。一覧は毎日取り直します
- WordPress プラグインの版の照合:ページに見えるプラグインの版を、WordPress.org の公開 API の最新版と比べます
- 前回との差:点検の履歴を残し、直った指摘と新しく出た指摘を出します
仕組み
- Pro の点検は、当社のサーバーで動く別のプログラム(FastAPI)が受けます。ノーマル版(PHP)は、設定の
KSC_PRO_URLとKSC_PRO_KEYが書かれているときだけ、そこへ問い合わせます - 所有の確かめ:決まった場所のファイル(
/.well-known/kseccheck-verify.txt)か、DNS の TXT レコードで行います。確かめていないドメインには、Pro のサーバーは何もしません。他社のサイトに深い点検をかけさせないためです - 契約と連動:鍵は契約ごとに発行します。契約が終わって当社が鍵を止めると、ノーマル版は Pro に断られ、自動でノーマル版の表示に戻ります。エラーは出ません
- だれが・いつ・どのドメインを点検したかは、すべて記録します
使える条件
- AI-IT顧問・AI-SNS顧問(月15時間)の契約中は、Pro の点検が顧問契約に含まれます
- Pro を自社のサーバーに置く形は、契約中に顧問の時間で設置でき、契約後もそのまま使えます
Pro が使っているオープンソース
- SSLyze(AGPL-3.0):https の設定の読み取り
- retire.js の脆弱性の一覧(Apache-2.0):部品の版と既知の脆弱性の突き合わせ
- dnspython(ISC):所有の確かめ
- FastAPI(MIT):Pro のサーバーの受け口
デモは Pro 版で動いています。当社のドメインは所有を確かめてあるので、入口の「当社のサイトで Pro の結果を見る」から、Pro の結果(当社のサイトは Pro の点で100点)を見られます。他社のドメインを診断した結果には Pro の欄は付かず、条件の案内だけが出ます。
よくある質問
Webサイトの脆弱性診断とは何ですか
Webサイトに、攻撃に使われる弱いところがないかを調べることです。専門の会社が許可を得て攻撃に近い検査をする「脆弱性診断サービス」と、外から見える設定や部品の版を調べる簡易な診断があります。Kurage Security Check は後者で、攻撃に近い検査はしません。
他社のサイトを診断しても大丈夫ですか
ふつうの訪問者がページを開くのと同じ範囲だけを見るので、相手のサーバーに負担や害は与えません。ただし、結果を相手をおとしめる目的で公開することはやめてください。
点数が高ければ安全ですか
外から見える範囲で、よくある弱さが無いという意味です。サーバーの中の設定、プラグインごとの脆弱性、パスワードの強さは見ていないので、安全が保証されたわけではありません。
自社で使えますか
PHPを置くだけで動きます。データベースは要りません。パスワードを設定して、社内だけで使うこともできます。
Pro 版は何が違いますか
所有を確かめた自社のドメインに、https の設定の詳しい読み取り、脆弱性の一覧による部品の照合、WordPress プラグインの版の照合が足され、前回との差も出ます。AI-IT顧問・AI-SNS顧問の契約中に使え、契約が終わると自動でノーマル版に戻ります。
Kurage Security Check(導入版・Kurage App Store) https://kappstore.exbridge.jp/app.php?id=a96e95e176b48800#ref=vibeblog-kseccheck
診断で見つかった直しや、外からは見えないサーバーの中の点検は、AI-IT顧問で引き受けています。
AI-IT顧問 https://exbridge.jp/ai-it-komon.html#ref=vibeblog-kseccheck
