あのサイトで使われている技術を調べる
自分が今見ているサイトが、どんな技術で作られているか気になった時に調べる方法を、色々書いてみた。
URLから調べる
URLの拡張子が、xxxx.xx/xxxx.phpとかだったら、PHPで作られているとわかるが、最近は拡張子が出てるサイトの方が少ない。
とはいえ一応拡張子ごとの技術を載せておく。
拡張子 | 技術等 | 備考 |
---|---|---|
.php | PHP | .php4、.phps、.phtmlの場合もある |
.asp | Active Server Pages(VBScript) | |
.aspx | ASP.net(C#/VB.net) | MVCじゃないWebフォーム形式だと見かける |
.asmx | ASP.net(C#/VB.net) | SoapなどのWebservice |
.bml | BML | Better Markup Language |
.do | Struts(Java) | Javaのフレームワーク |
.jsp | JSP(Java) | |
.jspa | Java Servlet Alias(Java) | Confluenceなど |
.jspx | XML Java Server Page | |
.cfm | ColdFusion | Adobe製のJVM言語 |
.cfc | ColdFusion | Adobe製のJVM言語 |
.cgi | CGI | 主にPerl |
.fcgi | FastCGI | 主にPerl |
.pl | Perl | 主にPerl |
.shtml | SSI(Server Side Include) | |
.stm | SSI(Server Side Include) | |
.lasso | Lasso | 実際に見たことないがあるらしい。 |
.rb | Ruby | 通常見かけないが、書籍等ではサンプル例を見かけた |
.py | Python | 通常見かけないが、書籍等ではサンプル例を見かけた |
.dll | 不明 | isapiとか?C++など |
.exe | 不明 | 何らかのバイナリファイルだと思われるが不明C++など |
とほほのWWW入門 拡張子一覧
List of file formats
拡張子ありのサイトは.html、.php以外のサイトは最近あまり見られなくなってきている。
拡張子別にどんなサイトがあるかはGoogleで inurl:index.jsp
みたいに検索すると色々見つかる。inurl:は大量に実行するとGoogleのCapcha画面が出て不正な通信と警告される場合があるので注意。
後述のhttp ヘッダー情報等からServerはnginxでcookieにJSESSIONがあるのに
拡張子が.aspというページもあるので、別システムに移行したけど、URLはそのままにしたため拡張子が食い違うケースもありそうだ。
RubyやPythonはMVCフレームワークが話題になり出してからWEBで採用され出したからか、拡張子つきは見かけたことがない。
http ヘッダー情報から調べる
ブラウザのディベロッパーツール等を使ってhttpのヘッダー情報を調べることができる。
WebMakeBlog KIYOTATSU HTTPリクエストとHTTPレスポンスをchromeのデベロッパーツールで確認する方法
Serverヘッダー
Serverヘッダーからは:Webサーバのアプリケーションを知ることができる。
Server:nginx
Server:Apache
Server:Microsoft-IIS/10.0
IISの場合はWindowsのOSのバージョンの判断もできる
Serverヘッダー値 | 技術等 | 備考 |
---|---|---|
Microsoft-IIS/7.0 | IIS(Windows用のWebサーバ) | Windows Server 2008/Windows Vista |
Microsoft-IIS/7.5 | IIS(Windows用のWebサーバ) | Windows Server 2008R2/Windows 7 |
Microsoft-IIS/8.0 | IIS(Windows用のWebサーバ) | Windows Server 2012/Windows 8 |
Microsoft-IIS/8.5 | IIS(Windows用のWebサーバ) | Windows Server 2012 R2 |
Microsoft-IIS/10.0 | IIS(Windows用のWebサーバ) | Windows Server 2016/Windows 10 |
nginx/0.0.0 (Ubuntu) | nginx | バージョンありの場合もあり、OS名が記載している場合もあり |
Apache | Apache | バージョンありの場合もあり、OS名が記載している場合もあり |
meinheld | Pythonのwebサーバ | Mozillaのサイト等 |
SimpleHTTP/0.* Python/3.. | Pythonのbuildinサーバー | |
WEBrick/..* (Ruby/../***--) | Ruby(WEBrick) | |
istio-envoy | ||
Kestrel | ||
cloudflare |
X-Powered-By
x-powered-by:
はWebアプリケーションが使用してるアプリケーションやそのバージョンを出力するのに使われている。
x-powered-by:
の値からPHPやASP.netを使われているとわかる場合もある。
ただし、X-Powered-By:ASP.NET
と入っていても、Windows IISサーバーで動いているからそう表示されるだけで、ASP.NETは使用していないケースもあり得る。
x-powered-by:PHP/5.3.3
x-powered-by値 | 技術等 | 備考 |
---|---|---|
PHP/..* | PHP | |
ASP.NET | ASP.NET | |
Servlet/2.4 JSP/2.0 | WebLogic | |
Express | Express(NodeJS) | |
Next.js | Next.js(NodeJS) |
他にもX-AspNet-Version:
のようなアプリケーション固有の値が付与される場合もある。
Cookieから調べる
ブラウザのディベロッパーツール等を使ってCookie情報を調べることができる。
WEBアプリケーションがSessionIDとして使用しているçookieの名称がアプリケーションごとに異なるので、それでわかるケースがある。
拡張子 | 技術等 | 備考 |
---|---|---|
ASPSESSIONID***** | ASP(VBScript) | 違うケースもあるかも |
ASP.NET_SessionId | ASP.net(C#/VB.net) | |
JSESSIONID | 主にJava | JVM言語であればJava以外でもありえる |
CFID,CFTOKEN | ColdFusion | JSESSIONIDの場合もある |
PHPSESSID | PHP | |
laravel_session | Laravel(PHP) | |
CakeCookie[***] | CakePHP(PHP) | |
_*****_session | Ruby on Rails(Ruby) | 他と被りそうなので判別は無理そう |
sessionid | Django(Python) | 他と被りそうなので判別は無理そう |
PLAY_SESSION | Play(Scala) | cookie名変更可能なので違う場合もある |
SessionIDに使うCookie名はカスタマイズされて、別の名前に変わっているケースもあるし、自前のCookie値でSession管理していて判定できないケースもあり得る。
他にもロードバランサーによってcookieが付与されているケース(BIGipServer***_***
)、
GoogleAnalyticによってCookieが付与されているケース(_ga
)などがある。
HTML、Javascriptから調べる
サイトのHTMLソースコードを見て、何を使っているか調べてみる。
JQueryのようなJavascriptのライブラリ等であれば、直接見てわかることができる。
CSRFトークン名文字列
Ruby on Railsの場合は、CSRF対策用のトークン名がauthenticity_token
となっているのでRuby on Railsを使用しているかどうかわかる。
<!-- metaタグの場合 -->
<meta name="csrf-param" content="authenticity_token" />
<!-- input hidden属性の場合 -->
<input name="authenticity_token" type="hidden" value="トークンの値" />
また、PythonのフレームワークDjangoのCSRF対策用のトークン名もcsrfmiddlewaretoken
と決まっているので、Djangoを使用しているかどうか判別することができる。
<input type='hidden' name='csrfmiddlewaretoken' value='値' />
フレームワークによってトークン名は変更して使う場合や、固定で決まっている場合などがある。
フレームワーク | トークン名 | 備考 | |
---|---|---|---|
Ruby On Rails(Ruby) | authenticity_token | ||
Django(Python) | csrfmiddlewaretoken | ||
Flask(Python) | csrf_token | ||
CakePHP(PHP) | data[_Token][key] | ||
Laravel(PHP) | _token | ||
FuelPHP(PHP) | fuel_csrf_token(変更有) | security.csrf_token_keyで任意指定 | |
CodeIgniter(PHP) | csrf_test_name(変更有) | $config['csrf_token_name'] の値を変えて使う | |
PlayFramework(Scala) | csrfToken | ||
ASP.net Core(C#) | __RequestVerificationToken | ||
Spring(Java) | _csrf | ||
csurf(NodeJS) | _csrf | ||
gorilla(Golang) | gorilla.csrf.Token | ||
echo(Golang) | _csrf | ||
Express(NodeJS) | _csrf | 変更可 |
HTML情報から、Javascript等のクライアント側の技術を知る事は出来るが、Ruby on Railsみたいに特徴的なものがないと、サーバサイド側の技術を知るのはちょっと難しい。
HTTPプロトコルを調べる
ブラウザのディベロッパーツール からHTTPプロトコルを確認することができる。
HTTPはWebブラウザーとWebサーバーをやり取りするための方法ですが、Webサーバーやその設定によっていくつかのバージョンや種類が存在する。
プロトコル | Chrome上の表示名 | 備考 |
---|---|---|
HTTP/1.1 | http/1.1 | |
HTTP/2 | h2 | |
HTTP/3 | h3 | |
HTTP/3 | http/2+quic/99 | ChromeのHTTP/3(ドラフト版)対応の時に使われていた表示 |
メールヘッダーから探す
受信するメールのヘッダー情報から、送信するアプリケーションの情報が取得できる場合もある。
Salesforce Trailblazer Community メールヘッダーを確認する方法
メールヘッダーからアプリケーションを特定する
メールのヘッダー情報の X-Mailer:
や User-Agent:
からどのアプリケーションを使用しているかわかる場合がある。
例えば、MailChimpのようなメール配信サービスを利用しているケース。
そのサービスの名前やサービスが使っているアプリケーション名がX-Mailer:
上に出力される。
X-Mailer:MailChimp Mailer - **XXXXXXXXXXXXXX**
PHPを使用しているとX-Php-Originating-Script:
のヘッダーが付く場合がある。
PHPマニュアル 実行時設定
X-Php-Originating-Script: 0000:hoge.php
CodeIgniterには標準でヘッダーに出力されるそう。
CodeIgniterの標準メールでユーザーエージェントを削除する
User-Agent: CodeIgniter
X-Mailer: CodeIgniter
CakePHPだと
X-Mailer: CakePHP Email
メールヘッダーの文字コード
Content-Type: text/plain; charset=iso-2022-jp
Content-Type: text/plain; charset=utf-8
Content-Type: text/plain; charset=us-ascii
テキストメールの場合、メールヘッダーに上記のような文字コードが記載されている。
iso-2022-jp
は、UTF-8に非対応のメールクライアントで日本語表示するための文字コードなので、日本語向けで、UTF-8に非対応のガラケーの時代からあったサービスだと推測できるかもしれない。
SPFレコードを調べる
送信メールがなりすましメールとして判断されないようにするため、送信元のサービスをSPFレコードに登録する必要がある。このSPFレコードはdigコマンドを使って調べられる。
dig slack.com txt
;; ANSWER SECTION:
slack.com. 3600 IN TXT "v=spf1 include:amazonses.com include:mailgun.org include:u931175.wl176.sendgrid.net include:_spf.qualtrics.com -all"
slack.comの場合は、メールの送信にamazonses、mailgun、sendgridが使われていることがわかる。qualtricsはアンケート作成サービスだが、ここ経由でメールが送られてると思われる。
dig gitlab.com txt
;; ANSWER SECTION:
gitlab.com. 300 IN TXT "v=spf1 include:mail.zendesk.com include:_spf.google.com include:spf.recurly.com include:mktomail.com include:_spf.salesforce.com include:_spf-ip.gitlab.com -all"
gitLab.comの場合、顧客管理のzendesk、個別のメール送信にGoogle(Gsuite?)、有料会員支払サービスにrecurly、販促ツールにmarketo、顧客管理か業務支援でSalesforce.comを使っていると思われる。
SSLサーバ証明書で調べる
多くのサイトがhttps対応しているのでSSLサーバ証明書が入っている。ここから何かわかるか。
Google ChromeでWebサイトのSSLサーバ証明書を調査・確認する
ここから得られる技術情報はあまり多く無い。どこのSSLサーバ証明書を使用しているかとか、発行した組織の情報とか。Qiitaの場合はAmazonのサーバ証明書を使っているので、AWSを使っているだろうと予測できる程度。
下記のサイトでSSL証明書の設定の安全性の評価などがわかる。TLS 1.1が無効になっているのかとか。
SSL Server Test (Powered by Qualys SSL Labs)
pingでOSなどの機器情報を特定する
サーバーにpingコマンドを打つとTTL(Time To Live)値が取得できる。
ping -c1 example.com
PING example.com (xx.xxx.xxx.xx): 56 data bytes
64 bytes from xx.xxx.xxx.xx: icmp_seq=0 ttl=50 time=182.884 ms
この値は、初期値がOSごとに決まっていて、ルータを1台通過するごとに1つ減る。
この初期値はLinuxは64、Windowsは128、Unixは255となっている。実際の値はこの値より減ってしまうが、これでどのOSを使っているか判別できる。
ただしpingがブロックされている場合もあるし、あまりやりすぎると迷惑行為になる可能性があるし、httpヘッダー情報をみた方が良い場合が多いので、あまり意味がないかも。
社内ネットワーク内で不明サーバーをチェックする時に使えるぐらいか。
また、どんなルーターを通っていたかはtracerouteを使うとわかる。
# Linux、Macの場合
traceroute example.com
# Windowsの場合
tracert example.com
- Pingコマンドだけで通信先のOSがわかってしまう!
- Default TTL (Time To Live) Values of Different OS
- Windowsの「ping」コマンドでネットワークトラブルの原因を調査する (1/2)
- traceroute(tracert) ~ネットワークの経路を調査する
WHOIS情報から調べる(ドメイン・IPアドレス)
ドメイン名から、そのドメインの登録情報を調べる事ができる。
下記のようなサイトから探す事が出来る。
登録年月日、ネームサーバ、レジストラ等がわかる。
登録年月日(Creation Date)から、いつ頃、そのサービスの企画が立ち上がったのかがわかる。
ネームサーバ、レジストラなどから、どのデータセンター、AWSなどのパブリッククラウドを使っているのかなどが推測できる。
Domain Name: EXAMPLE.COM
Registry Domain ID: 2336799_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.iana.org
Registrar URL: http://res-dom.iana.org
Updated Date: 2018-08-14T07:14:12Z
Creation Date: 1995-08-14T04:00:00Z
Registry Expiry Date: 2019-08-13T04:00:00Z
Registrar: RESERVED-Internet Assigned Numbers Authority
Registrar IANA ID: 376
Registrar Abuse Contact Email:
Registrar Abuse Contact Phone:
Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
Name Server: A.IANA-SERVERS.NET
Name Server: B.IANA-SERVERS.NET
また、IPアドレスから、下記のようなサービスで検索すると、データセンターなどの情報が取得できる。
ドメイン/IPアドレス サーチ 【whois情報検索】
サーバーのIPアドレスから、どこのパブリッククラウドを使っているか予測するという手もある。
Amazon/Azure/Google/Salesforceの公開IPアドレス範囲
CDN(コンテンツデリバリーネットワーク)を確認する
画像やCSSやJSなどのコンテンツのURLがサイトのURLとは異なっている場合がある。
<img src="https://qiita-user-contents.imgix.net/*****" >
これはCDN(Content Delivery Network)と呼ばれるコンテンツ配信サービスを使っている場合が多い。
CDNってそもそも何?なんかサーバの負荷が下がるって聞いたんだけど!〜Web制作/運営の幅が広がるCDNを知ろう第1回〜
例の場合はimgixというリアルタイム画像処理に特化したCDNのようだ。
Qiita Jobsにimgixを導入し、画像サイズを大幅に改善しました
ドメイン名で検索をかけてみるとサイトによって色んなCDN事業者が使われていることがわかる。
Wappalyzerを使う
Wappalyzerというツールが閲覧中のWebサイトで使われている情報を表示してくれる。Chrome/FireFoxのアドオンで使うと便利
細かい使い方はこちら。
閲覧中のWebサイトで使われている技術を確認できるChrome拡張「Wappalyzer」のご紹介
具体的にどうやって調べているのかなと、言うところだけど
GitHubのWappalyzer/src/apps.json
に記載されている部分を見ると、httpヘッダー情報やHTMLの中に記載されているタグとか特定の情報をもとに判定しているようだ。ちょっと見ていて面白い。
判定の性格度合いは、前述した、URL、httpヘッダー情報、cookie名、HTMLソース内の情報をもとにしているので、クライアントサイドの情報は結構ひろってくれるが、サーバサイド側の技術は正しく判定されてない、もしくは検出されない場合が多そうだ。Ruby on Railsについてはauthenticity_tokenの値判定のおかげで結構ちゃんと判定されていると思われる。
builtwithを使う
下記のサイトでチェックしたいサイトのURLを入れると、使われている技術が色々見れる。
https://builtwith.com/
Wappalyzerよりも取得できる情報は多そう。
ショッピングカートがあるかどうかの判定も出来ている。どうやっているのか謎。
他にも、メール配信サービスとか、日本向けのサービスも含めて網羅している。
ここで紹介されていた。
最強のリンク集の最強のリンク集
類似サービスでSimilarTechというのもある。
こちらは変更履歴もチェックしているらしい。あと類似サイトも表示してくれる。(例えばレシピサイトだったら類似のレシピサイトらしきものを紹介してくれる)
StackShareを使う
StackShareは企業や有名サービスがどんなツールを使っているか、このツールを使っているのはどんな企業があるか調べるサービス。企業自身が登録してるみたいなので信ぴょう性は高い。Wantedly Toolsと似た感じ。
他にも類似サービスはいくつかある。
企業の採用情報、転職サービスの採用情報から探す
自社開発しているとこだと、採用ページにどの技術を社内で使っているか情報がのっている。
転職サービスとかのサイトにも募集している職種の採用技術等が乗っている。
例えば、Amazonの場合、
必要条件にJavaが出てくる頻度が高いのでJavaの需要が高いのではと予想でき、
業務内容からJava、Ruby on Rails を使ったサービスがあるとわかる。
最初調べようと思ったAmazonの通販サイト側に関する情報は見つからなかったのでそこまではわからなかったけど。
-
Amazon PaymentのSoftware Development Engineerの場合、C, C++, C# または Javaのようなプログラミング言語が必要となっている。
-
Amazon Fulfillment SvcsのSoftware Development Engineerの場合、業務内容にJavaを使うと書かれている。
-
AWSのSoftware Development Engineerの場合、Python, Ruby, Perl, および Java またはいずれか一方が必要となっている。
-
AWSのPLM Agile System Architectの場合、JavaとOracleで作られたシステムの開発をするとある。
-
Amazon Music team Software Engineerの場合、サービスにRuby on Railsが使われていて、Java or C++, HTML, CSS, JavaScriptのスキルが必須となっている。
ちなみにこのAmazonの採用ページは
- HTTPヘッダー情報は、
X-Powered-By:Phusion Passenger
Ruby on Railsで使われるサーバを使用していて - cookie名も
_rails-root_session
でRuby on Railsと判定でき - HTML情報も
authenticity_token
がありRuby on Railsと判定でき
Ruby on Railsで作られていることは間違いないと判断できた。
企業の技術ブログや、技術系サイト、SNS、ニュース記事等で探す
目当てのサイトの企業ブログがあって、自社技術に書かれてあれば確実。
QiitaのOrganization一覧などからわかる場合も中にはある。
技術記事に書かれてあることやSNSなどの情報からわかる場合もある。
例えば、Javaの生みの親であるジェームズ・ゴスリンはAmazon Web Servicesに在籍していて、OpenJDKディストリビューションのAmazon CorrettoがAmazonのサービスで使われていると言っているのでJavaが使われているんだと判るとか。
他人のサイトでやってはダメな方法
サイトに迷惑をかけてしまう、攻撃をしているとみなされる可能性が高い行為は避けるようにすること。
ポートスキャンツールを使ってどのポートが開いているかチェックして、何が動いているか推測する方法があるが、これを他人のサイトでやると攻撃と見なされる可能性があるのでやるのは危険。
また、サーバーの情報を識別するツール(Server FingerPrinting)、脆弱性検査ツール(Vulnerability Scanner)などを使うのも、擬似攻撃を行うものもあるので管轄外のサイトで使用するのは危険。侵入(Penetration)テストツールは特に管轄外のサイトでは使用してはいけない。
たとえ自分のサイトでもデータセンター等に事前許可がいる場合もある。
- ポートスキャンツール「Nmap」を使ったセキュリティチェック
- OSS or Freeのセキュリティ診断ツール
- Web サーバーの Fingerprint のお話
- クラウドサービスを脆弱性診断する時のお作法
- ハニーポットの運用が規約違反でないか調べてみた
- Webスクレイピングする際のルールとPythonによる規約の読み込み
その他あれこれ
使われている技術と調べるとはちょっと意味が違うけど、
そのサイトから色々得られる情報をチェックできるサービスを書いていく。
IPひろば
ドメインとかIPアドレスから、そのサイトのWHOIS情報などを調べる。
単にwhois情報だけでなく、組織情報や不正情報が日本語で出てたが、その部分は現在有料版になってる。
https://www.iphiroba.jp/
CMAN ドメイン/IPアドレス サーチ 【whois情報検索】
これもドメインとかIPアドレスから、そのサイトのWHOIS情報などを調べる。
https://www.cman.jp/network/support/ip.html
NetCraft Site Report
WHOIS情報とかサーバ情報を取得。過去履歴もあるので、数年前に使われていたGlobal IPとかサーバOSがわかる場合もある。
https://toolbar.netcraft.com/site_report
DNSdumpster.com
該当ドメインに紐づいているサブドメインを見つけてくれたりできるサービス。
ポートスキャンするなど能動的にサーバーにアクセスする機能も含まれているため、物によっては攻撃とみなされる可能性があるため扱いには注意が必要。
サブドメイン一覧を表示させる方法
dnsdumpster.com
mxtoolbox
DNS Lookアップや、メールのSPFレコードのチェックを行える。
https://mxtoolbox.com/spf.aspx
PageSpeed Insights
Googleのサイトのスピード計測ツール
https://developers.google.com/speed/pagespeed/insights/?hl=ja
Lighthouse Chrome 拡張機能
Googleのサイトを評価する Chrome 拡張機能
https://webmaster-ja.googleblog.com/2018/02/seo-audit-category-in-lighthouse.html
GTmetrix
スピード計測ツール。PageSpeedやYSlowを使ってチェック。
テストサーバーがカナダなので日本のサイトだとLoaded Timeは長めに判定されるかも。
https://gtmetrix.com/
SimilarWeb
競合サイトのアクセス数などをチェックスする。
https://www.similarweb.com/ja
https://www.unionnet.jp/knowledge/similarweb/
https://webweb.hatenablog.com/blog/web-service/similarweb
Alexa
Webサイトのアクセス数ランキングなどをチェック。
https://www.alexa.com/siteinfo
https://webtan.impress.co.jp/e/2010/08/17/8603
SEOのツール
サイトの検索順位とかチェックするツール。沢山あったので紹介サイトをのせる。
https://ferret-plus.com/412
HTMLコーディングチェック
W3Cのhtmlが正しいかチェックするツール
https://validator.w3.org/
Gred
そのサイトが安全かチェックチェックしてくれる
http://check.gred.jp/
aguse
これも、そのサイトが安全かチェックしてくれる
https://www.aguse.jp/
ssllabs SSL Server Test
SSL証明書の設定の安全性の評価をA~Fの段階評価や細かく指摘してくれる。
https://www.ssllabs.com/ssltest/