開示事項:本記事はFastDLとの提携により制作されました。Hackread.comが公開前に内容を確認・編集しています。
StudySecurity
「SaveVid.Netを使えば、非公開のInstagramアカウントからでも制限なくダウンロードできます」。savevid.netの非公開ダウンローダーのページには、こう記されています。ところが、さらに下へ進むと、免責事項には、このツールは利用者自身のアカウントが投稿した動画や画像をダウンロードするためのものだと書かれています。
同じページに並ぶこの2つの記述のうち、このサービスが実際にアクセスできる範囲をより正確に説明しているのは後者です。
今回の調査では、「private Instagram downloader」とそれに近い検索語で見つかったダウンローダーのページ10件を確認しました。各ページの公開HTMLを、固定のブラウザユーザーエージェントを使って調べています。確認の過程で、フォームへの入力や情報の送信は一切行わず、非公開アカウントにもアクセスしていません。
10件のうち7件は、利用者が自分の認証済みInstagramセッションから情報を取得し、それをダウンローダーに貼り付ける方式でした。アカウント所有者の許可なく非公開投稿にアクセスできる方法を示していたサービスは、ひとつもありませんでした。
非公開投稿には正規のアクセス権が必要
InstagramのヘルプセンターによるといDe、非公開アカウントの写真や動画を閲覧できるのは承認済みのフォロワーだけです。非公開のリールは、Instagram標準の機能ではダウンロードできません。また、非公開の写真や動画を外部のウェブサイトに埋め込むこともできません。
無関係なウェブサイトが、アカウント名や投稿URLを知っているだけでInstagramから非公開コンテンツを取得することはできません。そのため、調査対象のダウンローダーはいずれも、訪問者が自分のログイン済みInstagramセッションから該当のレスポンスを取得する必要がありました。
利用者は最初から、アカウントの所有者であるか、承認済みのフォロワーである必要があります。ダウンローダーが独自にそのアクセス権を得ているわけではありません。
貼り付け方式の仕組み
調査した7つのサービスは、ほぼ同じ手順でした。利用者にInstagramへログインさせ、生成されたリンクを別のブラウザタブで開かせたうえで、Instagramが返した情報をコピーし、ダウンローダーのサイト上のフォームに貼り付けるよう指示します。
Savevid.netは、訪問者に「Login to Instagram account by PC」と案内し、「all the page source data」をフォームにコピーするよう求めています。
Instasave.websiteも同様の手順を示しており、同じブラウザでInstagramにログインしていることを確認するよう案内しています。
CompareBroadband
Indown.ioは、非公開プロフィールをすでにフォローしているアカウントでログインする必要があると説明しています。同サイトのフォームでは、別のタブから同サイトが「alien text」と呼ぶテキストをコピーし、ダウンローダーに貼り付けるよう求められます。
Statusdownloader.comは、この制約についてより率直です。同サービスはプライバシー設定を回避せず、訪問者がフォローを承認されていないアカウントにはアクセスできないと明記しています。手順では、訪問者のInstagramセッションを通じて返される生のJSONを求めています。
Instasaver.ioも、Instagramのプライバシー設定は回避できないと述べています。FAQによると、このツールが扱えるのは、ログイン済みのアカウントで利用者がすでに閲覧できるコンテンツに限られます。
これらのサービスはパーサーとして動作します。Instagramが認可されたセッションに非公開投稿を送り、利用者がその結果のページデータやJSONをコピーし、ダウンローダーがそこからメディアのリンクを抽出する仕組みです。
残る調査対象には、利用者自身のInstagramアカウントを必要とするコマンドラインツールが1つと、非公開コンテンツには対応していないと明記したサービスが2つありました。
貼り付けた情報の送信先
公開HTMLからは、複数のサービスが貼り付けられた内容をどう扱うかについて、いくつかの情報が得られました。
instasave.websiteでは、htmlという名前のテキストエリアが、api.instasave.website/privateへデータを送信するよう設定されたフォーム内に置かれています。Indown.ioでは、responseという名前のテキストエリアが、indown.io/private-downloadへデータを送信するよう設定されたフォーム内にあります。
調査中に送信は一切行っていないため、受信側サーバーでの処理内容やデータの保持方針は検証していません。また、JavaScriptによって、送信時のフォームの動作が変わる可能性もあります。
Instasaver.ioは、貼り付けられたテキストはバックエンドに送信され、メディアのリンクを抽出して結果を返すと説明しています。Statusdownloader.comは、処理は訪問者のデバイス上で行われると述べていますが、この主張は独自には検証していません。
Savevid.netは貼り付けられた情報をスクリプトに渡しますが、取得できたHTMLからは、その情報が最終的にどこで処理されるのかは確認できませんでした。
コピーされたレスポンスの中身は確認していません。確認には認証済みのInstagramセッションが必要になるためです。そこには、非公開のメディアや関連するメタデータ、認可されたセッション向けに生成された情報が含まれている可能性があります。利用者は、そのレスポンスを加工せずそのまま別のウェブサイトへ渡すよう求められているのです。
ダウンローダーのページで読み込まれるサードパーティサービス
複数のダウンローダーのページでは、広告、アナリティクス、通知のサービスも読み込まれていました。
Savevid.netは、Cloudflare Turnstile、Google AdSense、Googleタグ、ShareThisを読み込んでいました。Instasave.websiteは、AdSense、Googleタグ、ShareThis、プッシュ通知SDKを読み込んでいました。instasave.websiteを通常どおり1回読み込むと、15のサードパーティホストに接続しました。
CompareBroadband
これらのサードパーティが、ダウンローダーのフォームに貼り付けられた情報を受け取ったことを示す証拠はありません。ただ、認証済みのInstagramセッションから取得したデータを利用者が送信しうるページで、外部サービスが多数動作していることは事実です。
Statusdownloader.comは、Google AdSense、Microsoft Clarity、そしてacscdn.comのスクリプトを読み込んでいました。このスクリプトには、Adcashが公開しているバナー連携の関数と一致するものが含まれていました。通常どおり1回読み込むと、14のサードパーティホストに接続しました。
Indown.ioとinstasaver.ioは、それぞれ1つのサードパーティスクリプトホストを読み込んでいました。
調査対象のうち3ページは、同じAdSenseパブリッシャーIDを使い、似たページテンプレートを共有していました。これはサイト間の技術的なつながりを示しますが、所有者や運営者の特定にはつながりません。
調査したサービスの比較
| ページ | サービスの訴求内容 | 要求される情報 | 情報の送信先 | サードパーティスクリプトホスト数 | アクセス上の制約 |
|---|---|---|---|---|---|
| savevid.net | 「制限なし」の非公開ダウンロード | ログイン、生成されたリンク、コピーしたページソース | 確認できず | 4 | 利用者自身のアカウントが投稿したコンテンツに言及 |
| instasave.website | 非公開Instagramアカウントからのダウンロード | ログイン、生成されたリンク、コピーしたページソース | フォームが自社のAPIへ送信するよう設定されている | 4 | 明確な制約の記載は見当たらず |
| indown.io | 非公開の動画・ストーリーのダウンローダー | 承認済みフォロワーとしてログインし、返されたテキストを貼り付け | フォームが自社サーバーへ送信するよう設定されている | 1 | 非公開ユーザーをフォローしているアカウントが必要 |
| statusdownloader.com | 利用者がフォローしているアカウントのダウンロード | ログイン、コピーした生のJSON | 処理はデバイス上で行われると主張 | 3 | プライバシー設定は回避しないと記載 |
| instasaver.io | 非公開Instagramビューアー | ログイン、コピーしたページテキスト | 情報はバックエンドに送信されると記載 | 1 | アクセス権は提供できないと記載 |
| fastdl.app | 公開コンテンツのみ | 公開リールのURL(ログインは求められない) | Instagramのセッション情報は要求されない | 3 | 非公開リールには非対応と記載 |
より安全な選択肢はアカウントの所有者かどうかで変わる
Instagramには、自分自身の情報のコピーを取得したい利用者向けにエクスポート機能があります。この方法なら、認証済みセッションのページレスポンスを外部のダウンローダーに送らずに済みます。
承認済みのフォロワーは、非公開アカウントが投稿したコンテンツをすでに閲覧できます。しかし、調査した貼り付け方式のサービスでは、その認可されたセッションから取得した情報を提供する必要があります。さらに詳しく調べた貼り付け方式のサービス5件のうち3件では、HTMLまたはサービス自身の説明から、送信された情報がバックエンドサーバーに渡ることが示されていました。
公開リールには、こうした手順は必要ありません。FastDLは、Instagramへのログインを求めずに公開リールのURLを受け付けます。NASAの公開リールを使ったテストでは、720p動画へのリンクが返されました。FAQには、非公開のInstagramリールには対応していないと記載されています。
FastDLを比較対象に加えたのは、サービスの対象を公開コンテンツに限定しているためです。表中の他のいくつかのページと同様に、Google AdSense、Googleタグ、Google以外のアナリティクスサービスを含む3つのサードパーティホストを読み込んでいました。
認証済みInstagramのレスポンスを素性の知れないサイトに貼り付けない
調査したサービスのうち、利用者がすでに正規のアクセス権を持っていない限り、非公開アカウントの投稿をダウンロードできる方法を示したものはありませんでした。
貼り付け方式のサービスは、利用者自身のInstagramセッションから取得した情報に依存しています。そのレスポンスを別のウェブサイトに送ると、非公開のメディアやメタデータ、リクエストに関連するその他の情報が、処理するサービス側に渡る恐れがあります。
CompareBroadband
コピーしたInstagramのページレスポンスやJSONを、サードパーティのダウンローダーに渡すことは避けるべきです。自分のアカウントデータを取得するなら、Instagramのエクスポート機能が安全です。公開コンテンツ向けのダウンローダーであれば、認証済みセッションへのアクセスは必要ありません。
(写真:Brian Ramirez、Pexels)
翻訳元: https://hackread.com/private-instagram-downloaders-parsers-privacy-bypass-tools/