Check Before Upload - ファイルのミスアップロードを防止
ID: glikkfgjidibcccbcennobhhocfnmoee
Extension Info & Metadata
Publisher Contextual Analysis
- Author
- appteamc56View Profile
- MX records exist
- Yes
- Domain exists
- Yes
- Is disposable
- No
- Is role-based
- No
- Mailbox exists
- Yes
誤操作によるwebサイトへのミスアップロードを防止することを目的に作成されました。
Check Before Uploadは、webサイトへのファイルミスアップロードを防止するための簡易なツールです。 非常にシンプルな機能により、不注意や操作ミスによるファイルのアップロードによるセキュリティリスクの顕在化を未然に防ぐことが可能です。 ✅ Check Before Uploadの主な機能 ▸ ファイルのドラッグアンドドロップを含めた一般的なファイルアップロード操作時に、アップロード先のwebサイトURLや、ファイル名を表示させた確認画面を差し込み確認を促します。 ▸ 一度、許可リストに登録したファイルを再びアップロード操作することにより、アップロードが実行されます。 ▸ 事前にホワイトリストで確認画面を表示させたくないURLを登録しておくことにより、安全が確認されているサイトでの確認画面表示を抑制することができます。 ❓ よくある質問 ▸ Check Before Uploadは無料ですか? はい。Check Before Uploadは無料のツールです。 ▸ Check Before Uploadは全てのwebサイトで動作しますか? いいえ。ドラッグアンドドロップ等によって渡されたファイルがどのような仕組みでwebサイトに送信されるかは、webサイトごとに異なります。一般的なwebサイトでは上手く動くように配慮して作成されていますが、全てのwebサイトでの動作確認はできないことをあらかじめご理解いただいた上で活用ください。 ▸ Check Before Uploadの確認ダイアログにファイルを追加しても、ファイルのアップロードを実行することができません。どうすればよいですか? 対応していないwebサイトである可能性が高いです。ホワイトリストに登録し、Check Before Upload の対象外としてください。 ▸ ホワイトリスト設定画面の出し方が分かりません。 タスクバーにピン留めした後、アイコンをクリックしてください。 ▸ 連絡方法は? 事務局からの案内に従って、適切な問い合わせ先までメールで問い合わせをお願いします。 👷 今後の予定 ▸ 多言語対応。 ▸ 検知力の向上。
Content script (which runs on <all_urls>) installs a full-document MutationObserver, a 1-second setInterval, and monkey-patches history.pushState/replaceState on every page the user visits. These are powerful page-instrumentation primitives that look suspicious in isolation, but here they are used solely to detect SPA URL changes so the per-URL upload-confirmation cache can be cleared. No data is sent off-device. Pattern likely contributed to the ML flag but is benign in context.
// 2. `MutationObserver` を使用して URL 変更を監視(SPAのページ遷移)const observer = new MutationObserver(clearStorageIfUrlChanged);observer.observe(document.body, { childList: true, subtree: true});// 3. `setInterval` で定期チェック(保険)setInterval(clearStorageIfUrlChanged, 1000);// 4. `pushState` / `replaceState` をフック(BoxなどのSPA対策)(function() { const originalPushState = history.pushState; const originalReplaceState = history.replaceState; history.pushState = function(...args) { originalPushState.apply(this, args); clearStorageIfUrlChanged(); }; history.replaceState = function(...args) { originalReplaceState.apply(this, args); clearStorageIfUrlChanged(); };})();Scrapes inline <script> tags to regex out Box.prefetchedData, then issues an authenticated fetch() to a derived Box internal API endpoint to read folder metadata (owner, external-collaborator flags, path). Reading prefetched JS state and calling internal Box APIs from a content script on <all_urls> is unusual and is the kind of pattern ML models associate with reconnaissance/exfiltration. However, the call is gated on the URL containing 'cmic.ent.box.com' (content.js:65) and the response is only used locally to decide whether to show a warning dialog — no data is transmitted off-device.
// Box.prefechedData から fetch すべき API endpoint URL を取得document.querySelectorAll('script') .forEach(script => { if (script.textContent.includes('Box.prefetchedData')) { try { const match = script.textContent.match(/Box\.prefetchedData\s*=\s*(\{.*?\});/s); if (match) { parsedData = JSON.parse(match[1]); } } catch (error) { console.error("Box.prefetchedData の取得に失敗しました", error); } } });parsedData = parsedData['/app-api/enduserapp/current-user'];apiUrl = parsedData['preview']['appHost'] + 'app-api/enduserapp/folder/' + document.URL.split('/') .pop();// API endpoint を fetch して JSON 形式で返すreturn await fetch(apiUrl)Uses innerHTML to inject strings into the confirmation dialog. The strings are sourced from chrome.i18n.getMessage(), which reads from the extension's bundled _locales/ files and cannot be controlled by an attacker, so this is not exploitable; it is, however, the kind of innerHTML usage code-feature ML models often weight as a code-injection signal.
const securityRiskText = chrome.i18n.getMessage("dialog_security_risk");const confirmInstructionText = chrome.i18n.getMessage("dialog_instruction");...const message1 = document.createElement("div");message1.className = "modal-message";// message1.textContent = securityRiskText;message1.innerHTML = securityRiskText;const message2 = document.createElement("div");message2.className = "modal-message";message2.innerHTML = confirmInstructionText;By severity
Versions scanned
Showing 1 of 15 scanned versions with more than one unique finding. Counts are unique findings that include each version.
| Extension Version | Code Review Findings |
|---|---|
| 2.8 | 3 |
Files with findings
3 distinct paths — top paths by unique finding count:
- content.js1
- utils/box.js1
- utils/confirmDialog.js1
URLs
View the external URLs this extension communicates with to understand its network activity and data interactions.
Gain full insight into all external connections.
Upgrade for full visibility.
Gain full insight into all external connections.
Upgrade for full visibility.
Code Diff
Compare extension code between any two versions.
No comparable text files found between these versions.
Browse and explore files within this extension package
Gain full insight into all external connections.
Upgrade for full visibility.