hacktricks/pentesting-web/browser-extension-pentesting-methodology
2024-07-19 16:18:57 +00:00
..
browext-clickjacking.md Translated ['pentesting-web/browser-extension-pentesting-methodology/REA 2024-07-19 16:18:57 +00:00
browext-permissions-and-host_permissions.md Translated ['pentesting-web/browser-extension-pentesting-methodology/REA 2024-07-19 16:18:57 +00:00
browext-xss-example.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:20:41 +00:00
README.md Translated ['pentesting-web/browser-extension-pentesting-methodology/REA 2024-07-19 16:18:57 +00:00

Browser Extension Pentesting Methodology

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Basic Information

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ DOM рд╣реЛрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ DOM рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдЧреЛрдкрдиреАрдпрддрд╛, рдЕрдЦрдВрдбрддрд╛ рдФрд░ рдЙрдкрд▓рдмреНрдзрддрд╛ (CIA) рдХреЛ рдЦрддрд░реЗ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред

Main Components

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓реЗрдЖрдЙрдЯ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВ рдЬрдм рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рддреАрди рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦреЗрдВред

http://webblaze.cs.berkeley.edu/papers/Extensions.pdf

Content Scripts

рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд╛рд╕ рдПрдХрд▓ рд╡реЗрдм рдкреГрд╖реНрда рдХреЗ DOM рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЙрдЬрд╛рдЧрд░ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред

Extension Core

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░/рдкрд╣реБрдБрдЪ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░ рдХреЗрд╡рд▓ XMLHttpRequest рдФрд░ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗрдм рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░ рдХреЗ рдкрд╛рд╕ рд╣реЛрд╕реНрдЯ рдорд╢реАрди рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

Native Binary

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рдиреИрдЯрд┐рд╡ рдмрд╛рдЗрдирд░реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реЛрд╕реНрдЯ рдорд╢реАрди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред рдиреИрдЯрд┐рд╡ рдмрд╛рдЗрдирд░реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░ рдХреЗ рд╕рд╛рде рдорд╛рдирдХ рдиреЗрдЯрд╕реНрдХреЗрдк рдкреНрд▓рдЧрдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ (NPAPI) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреНрд▓реИрд╢ рдФрд░ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд▓рдЧ-рдЗрдиреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Boundaries

{% hint style="danger" %} рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдпрд╣ рдордирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рд╡рд╣ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЗрдирдкреБрдЯ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдХреЛрд░ рдореЗрдВ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдХреЛрд░ рд╕реЗ рдиреИрдЯрд┐рд╡ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗред {% endhint %}

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдордЬрдмреВрдд рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ рд╕реАрдорд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдЕрд▓рдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдиреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рд╕реЗ рдЕрд▓рдЧ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реАрдк рдореЗрдВ рдЪрд▓рддреА рд╣реИред рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╡реЗрдм рдкреГрд╖реНрда рдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд DOM рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдХрднреА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ, рдЬрд┐рд╕рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд▓реАрдХ рд╣реЛрдирд╛ рд░реЛрдХрддрд╛ рд╣реИред

manifest.json

рдПрдХ рдХреНрд░реЛрдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрд╕ рдПрдХ рдЬрд╝рд┐рдк рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ .crx рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрддрд╛ рд╣реИред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдХреЛрд░ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд░реВрдЯ рдореЗрдВ manifest.json рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ рд▓реЗрдЖрдЙрдЯ, рдЕрдиреБрдорддрд┐рдпреЛрдВ рдФрд░ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

Example:

{
"manifest_version": 2,
"name": "My extension",
"version": "1.0",
"permissions": [
"storage"
],
"content_scripts": [
{
"js": [
"script.js"
],
"matches": [
"https://example.com/*",
"https://www.example.com/*"
],
"exclude_matches": ["*://*/*business*"],
}
],
"background": {
"scripts": [
"background.js"
]
},
"options_ui": {
"page": "options.html"
}
}

content_scripts

рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд▓реЛрдб рд╣реЛрддреА рд╣реИрдВ рдЬрдм рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рднреА рдкреГрд╖реНрда рдЬреЛ https://example.com/* рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ *://*/*/business* regex рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ред рдпреЗ рдкреГрд╖реНрда рдХреЗ рдЕрдкрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреА рддрд░рд╣ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдкреГрд╖реНрда рдХреЗ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ (DOM) рддрдХ рдордирдорд╛рдирд╛ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИред

"content_scripts": [
{
"js": [
"script.js"
],
"matches": [
"https://example.com/*",
"https://www.example.com/*"
],
"exclude_matches": ["*://*/*business*"],
}
],

рдЕрдзрд┐рдХ URLs рдХреЛ рд╢рд╛рдорд┐рд▓ рдпрд╛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП include_globs рдФрд░ exclude_globs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред

рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдмрдЯрди рдЬреЛрдбрд╝реЗрдЧреА рдЬрдм рд╕реНрдЯреЛрд░реЗрдЬ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ message рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

chrome.storage.local.get("message", result =>
{
let div = document.createElement("div");
div.innerHTML = result.message + " <button>Explain</button>";
div.querySelector("button").addEventListener("click", () =>
{
chrome.runtime.sendMessage("explain");
});
document.body.appendChild(div);
});

рдЬрдм рдЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, runtime.sendMessage() API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдпрд╣ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА APIs рддрдХ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪ рдХреА рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЬрд┐рд╕рдореЗрдВ storage рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрди рдЕрдкрд╡рд╛рджреЛрдВ рд╕реЗ рдкрд░реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╢ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреГрд╖реНрдареЛрдВ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддреА рд╣реИрдВред

{% hint style="warning" %} рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдХреНрд╖рдорддрд╛рдПрдБ рдереЛрдбрд╝реА рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдХреНрд░реЛрдорд┐рдпрдо-рдЖрдзрд╛рд░рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рд╕реВрдЪреА Chrome Developers documentation рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП, MDN рдкреНрд░рд╛рдердорд┐рдХ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд╛рд╕ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред {% endhint %}

Chrome рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Chrome рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдореЗрдиреВ рдХреЛ Options > More tools > Developer tools рд╕реЗ рдпрд╛ Ctrl + Shift + I рджрдмрд╛рдХрд░ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдкрд░, Source tab рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд╕рдХреЗ рдмрд╛рдж Content Scripts рдЯреИрдмред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреЛрдВ рд╕реЗ рдЪрд▓ рд░рд╣реА рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

Injected content scripts

{% hint style="success" %} рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Content Scripts рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд╛рдпрдирд╛рдорд┐рдХрд▓реА inject рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдФрд░ programatically inject рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рдВрднрд╡ рд╣реИ tabs.executeScript рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ granular controls рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред {% endhint %}

рдПрдХ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЙрд╕ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП host permissions рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдпреЗ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдпрд╛ рддреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рдЙрдирдХреА рдорд╛рдВрдЧ рдХрд░рдХреЗ рдпрд╛ activeTab рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрд╕реНрдерд╛рдпреА рдЖрдзрд╛рд░ рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред

Example activeTab-based extension

{% code title="manifest.json" %}

{
"name": "My extension",
...
"permissions": [
"activeTab",
"scripting"
],
"background": {
"service_worker": "background.js"
},
"action": {
"default_title": "Action Button"
}
}

{% endcode %}

  • рдХреНрд▓рд┐рдХ рдкрд░ рдПрдХ JS рдлрд╝рд╛рдЗрд▓ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ:
// content-script.js
document.body.style.backgroundColor = "orange";

//service-worker.js - Inject the JS file
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: { tabId: tab.id },
files: ["content-script.js"]
});
});
  • рдХреНрд▓рд┐рдХ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ:
//service-worker.js - Inject a function
function injectedFunction() {
document.body.style.backgroundColor = "orange";
}

chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target : {tabId : tab.id},
func : injectedFunction,
});
});

рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг

// service-workser.js
chrome.scripting.registerContentScripts([{
id : "test",
matches : [ "https://*.example.com/*" ],
excludeMatches : [ "*://*/*business*" ],
js : [ "contentScript.js" ],
}]);

// Another example
chrome.tabs.executeScript(tabId, { file: "content_script.js" });

URLs рдХреЛ рд╢рд╛рдорд┐рд▓ рдпрд╛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП include_globs рдФрд░ exclude_globs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред

рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ run_at

run_at рдлрд╝реАрд▓реНрдб рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ JavaScript рдлрд╝рд╛рдЗрд▓реЗрдВ рд╡реЗрдм рдкреГрд╖реНрда рдореЗрдВ рдХрдм рдЗрдВрдЬреЗрдХреНрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдкрд╕рдВрджреАрджрд╛ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди "document_idle" рд╣реИред

рд╕рдВрднрд╡ рдорд╛рди рд╣реИрдВ:

  • document_idle: рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ
  • document_start: css рд╕реЗ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рдж, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдЕрдиреНрдп DOM рдХреЗ рдирд┐рд░реНрдорд╛рдг рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЪрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред
  • document_end: DOM рдХреЗ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд▓реЗрдХрд┐рди рдЙрдк-рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдЬреИрд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рдлрд╝реНрд░реЗрдореЛрдВ рдХреЗ рд▓реЛрдб рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред

manifest.json рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ

{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["https://*.example.com/*"],
"run_at": "document_idle",
"js": ["contentScript.js"]
}
],
...
}

service-worker.js рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ

chrome.scripting.registerContentScripts([{
id : "test",
matches : [ "https://*.example.com/*" ],
runAt : "document_idle",
js : [ "contentScript.js" ],
}]);

background

рд╕рдВрджреЗрд╢ рдЬреЛ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рдордиреНрд╡рдп рдореЗрдВ рдПрдХ рдХреЗрдВрджреНрд░реАрдп рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рджреМрд░рд╛рди рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ, рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ (DOM) рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЬрдЯрд┐рд▓ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдФрд░ рд╕реНрдерд┐рддрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдореБрдЦреНрдп рдмрд┐рдВрджреБ:

  • рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдХреА рднреВрдорд┐рдХрд╛: рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдирд░реНрд╡ рд╕реЗрдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдФрд░ рд╕рдордиреНрд╡рдп рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рд╕реНрдерд┐рд░рддрд╛: рдпрд╣ рдПрдХ рд╣рдореЗрд╢рд╛ рдЙрдкрд╕реНрдерд┐рдд рдЗрдХрд╛рдИ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрджреГрд╢реНрдп рд▓реЗрдХрд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИред
  • рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдорд╛рдг: рдпрджрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдмрдирд╛рдПрдЧрд╛ред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрда рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдмрд╛рдз рд╕рдВрдЪрд╛рд▓рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред

{% hint style="success" %} рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ (рдЬрдм рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ) рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдПрдХреАрдХреГрдд рдФрд░ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╕реЗрдЯрдЕрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред {% endhint %}

Example background script:

chrome.runtime.onMessage.addListener((request, sender, sendResponse) =>
{
if (request == "explain")
{
chrome.tabs.create({ url: "https://example.net/explanation" });
}
})

рдпрд╣ runtime.onMessage API рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред рдЬрдм рдПрдХ "explain" рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ tabs API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдП рдЯреИрдм рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рдЦреЛрд▓рддрд╛ рд╣реИред

рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рд╡рд░рдг рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓реНрд╕ рдЦреЛрд▓реЗрдЧрд╛:

рд╡рд┐рдХрд▓реНрдк рдкреГрд╖реНрда рдФрд░ рдЕрдиреНрдп

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреГрд╖реНрда рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдПрдХреНрд╢рди рдкреГрд╖реНрда рддрдм рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдкреГрд╖реНрда рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рдирдП рдЯреИрдм рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдЧрд╛ред
  • рд╡рд┐рдХрд▓реНрдк рдкреГрд╖реНрда: рдпрд╣ рдкреГрд╖реНрда рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдкреГрд╖реНрда рддрдХ chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca рдореЗрдВ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдпрд╛ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ:

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рдкреГрд╖реНрда рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреГрд╖реНрдареЛрдВ рдХреА рддрд░рд╣ рд╕реНрдерд╛рдпреА рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡реЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХреНрд╖рдорддрд╛рдПрдБ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ:

  • рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░: рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреГрд╖реНрда рдХреЗ рд╕рдорд╛рди, рдпреЗ рдкреГрд╖реНрда рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рднреАрддрд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред
  • рдПрдХреНрд╕рдЯреЗрдВрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ APIs рддрдХ рдкрд╣реБрдБрдЪ: рдЗрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ APIs рддрдХ рд╡реНрдпрд╛рдкрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдЕрдзреАрди рд╣реЛрддреА рд╣реИред

permissions & host_permissions

permissions рдФрд░ host_permissions manifest.json рд╕реЗ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдпрд╣ рд╕рдВрдХреЗрдд рдХрд░реЗрдВрдЧреА рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдкрд╛рд╕ рдХреМрди рд╕реА рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╣реИрдВ (рд╕реНрдЯреЛрд░реЗрдЬ, рд╕реНрдерд╛рди...) рдФрд░ рдХреМрди рд╕реЗ рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдкрд░ред

рдЪреВрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрддрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдпрд╛ рдПрдХ рдЬреЛ рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдЪреБрд░рд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рдЬрд╛рд╕реВрд╕реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдзрдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ рдФрд░ рдХреИрд╕реЗ рдЗрдирдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

{% content-ref url="browext-permissions-and-host_permissions.md" %} browext-permissions-and-host_permissions.md {% endcontent-ref %}

content_security_policy

рдПрдХ рд╕рд╛рдордЧреНрд░реА рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рдХреЛ manifest.json рдХреЗ рдЕрдВрджрд░ рднреА рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдХрдордЬреЛрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛рдлреА рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рд╣реИ:

script-src 'self'; object-src 'self';

CSP рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдмрд╛рдпрдкрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ:

{% content-ref url="../content-security-policy-csp-bypass/" %} content-security-policy-csp-bypass {% endcontent-ref %}

web_accessible_resources

рдХрд┐рд╕реА рд╡реЗрдмрдкреЗрдЬ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдПрдХ рдкреГрд╖реНрда, рдЬреИрд╕реЗ рдХрд┐ .html рдкреГрд╖реНрда, рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреГрд╖реНрда рдХреЛ manifest.json рдХреЗ web_accessible_resources рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

{
...
"web_accessible_resources": [
{
"resources": [ "images/*.png" ],
"matches": [ "https://example.com/*" ]
},
{
"resources": [ "fonts/*.woff" ],
"matches": [ "https://example.com/*" ]
}
],
...
}

рдпреЗ рдкреГрд╖реНрда URL рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реИрдВ:

chrome-extension://<extension-id>/message.html

In рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреЛрдВ рдореЗрдВ extension-id рдЙрдкрд▓рдмреНрдз рд╣реИ:

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ manifest.json рдкреИрд░рд╛рдореАрдЯрд░ use_dynamic_url рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ id рдЧрддрд┐рд╢реАрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

{% hint style="success" %} рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдкреГрд╖реНрда рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реЛрдиреЗ рдкрд░ рднреА, рдпрд╣ ClickJacking рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдзрдиреНрдпрд╡рд╛рдж Content Security Policy рдХреЗред рдЗрд╕рд▓рд┐рдП, ClickJacking рд╣рдорд▓реЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЗрд╕реЗ рднреА рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ (frame-ancestors рдЕрдиреБрднрд╛рдЧ)ред {% endhint %}

рдЗрди рдкреГрд╖реНрдареЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдиреЗ рд╕реЗ рдпреЗ рдкреГрд╖реНрда рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрдордЬреЛрд░ ClickJacking рдмрди рдЬрд╛рддреЗ рд╣реИрдВ:

{% content-ref url="browext-clickjacking.md" %} browext-clickjacking.md {% endcontent-ref %}

{% hint style="success" %} рдЗрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ URLs рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, ClickJacking рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред {% endhint %}

{% hint style="danger" %} рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ web_accessible_resources рд╕реЗ рдкреГрд╖реНрда рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрдиреНрдп рдкреГрд╖реНрда рднреА рдкреГрд╖реНрдарднреВрдорд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдкреГрд╖реНрда XSS рдХреЗ рд▓рд┐рдП рдХрдордЬреЛрд░ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдмрдбрд╝реА рдХрдордЬреЛрд░реА рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ web_accessible_resources рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреГрд╖реНрдареЛрдВ рдХреЛ iframes рдХреЗ рдЕрдВрджрд░ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдирдП рдЯреИрдм рд╕реЗ рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди ID рдЬрд╛рдирдХрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдПрдХ XSS рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рднрд▓реЗ рд╣реА рдкреГрд╖реНрда web_accessible_resources рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред {% endhint %}

externally_connectable

docs рдХреЗ рдЕрдиреБрд╕рд╛рд░, "externally_connectable" рдореИрдирд┐рдлреЗрд╕реНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд╡реЗрдм рдкреГрд╖реНрда рдЖрдкрдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ runtime.connect рдФрд░ runtime.sendMessage рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  • рдпрджрд┐ externally_connectable рдХреБрдВрдЬреА рдЖрдкрдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ рдпрд╛ рдЗрд╕реЗ "ids": ["*"] рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡реЗрдм рдкреГрд╖реНрда рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
  • рдпрджрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ IDs рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЧрдИ рд╣реИрдВ, рдЬреИрд╕реЗ "ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"], рддреЛ рдХреЗрд╡рд▓ рд╡рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рдпрджрд┐ matches рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рд╡реЗ рд╡реЗрдм рдРрдкреНрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ:
"matches": [
"https://*.google.com/*",
"*://*.chromium.org/*",
  • рдпрджрд┐ рдЗрд╕реЗ рдЦрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: "externally_connectable": {}, рддреЛ рдХреЛрдИ рдРрдк рдпрд╛ рд╡реЗрдм рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХреЗрдЧрд╛ред

рдпрд╣рд╛рдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ URL рдХреЗ рд╕рд╛рде, рд╣рдорд▓рд╛ рд╕рддрд╣ рдЫреЛрдЯреА рд╣реЛрдЧреАред

{% hint style="danger" %} рдпрджрд┐ рдПрдХ рд╡реЗрдм рдкреГрд╖реНрда XSS рдпрд╛ рдЯреЗрдХрдУрд╡рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ рдФрд░ рдЗрд╕реЗ externally_connectable рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдкреГрд╖реНрдарднреВрдорд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реАрдзреЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЗрд╕рдХреЗ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдПред

рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрд╛рдпрдкрд╛рд╕ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рд░реЙрдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рднрд▓реЗ рд╣реА рдЗрд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рди рд╣реЛ, рдпрд╣ рдПрдХ рдЕрдиреБрдордд рд╡реЗрдм рдкреГрд╖реНрда рдореЗрдВ XSS рдбреЗрдЯрд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ WebRequest рдпрд╛ DeclarativeNetRequest APIs рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд▓рдХреНрд╖рд┐рдд рдбреЛрдореЗрди рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдПрдХ рдкреГрд╖реНрда рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ JavaScript рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рд╕рдХреЗред (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓рдХреНрд╖рд┐рдд рдкреГрд╖реНрда рдкрд░ CSP рдЗрди рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ)ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдЖрдпрд╛ рд╣реИред {% endhint %}

рд╕рдВрдЪрд╛рд░ рд╕рд╛рд░рд╛рдВрд╢

рдПрдХреНрд╕рдЯреЗрдВрд╢рди <--> рд╡реЗрдм рдРрдк

рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╡реЗрдм рдкреГрд╖реНрда рдХреЗ рдмреАрдЪ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдкреЛрд╕реНрдЯ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ window.postMessage рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдорд┐рд▓реЗрдВрдЧреЗ рдФрд░ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ window.addEventListener рдЬреИрд╕реЗ рд╢реНрд░реЛрддрд╛ рдорд┐рд▓реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдкреЛрд╕реНрдЯ рд╕рдВрджреЗрд╢ рднреЗрдЬрдХрд░ рднреА рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдЗрд╕рд▓рд┐рдП рд╡реЗрдм рдХреЛ рдЗрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП) рдпрд╛ рдмрд╕ рд╡реЗрдм рдХреЛ рдПрдХ рдирдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрдВрджрд░

рдЖрдорддреМрд░ рдкрд░ chrome.runtime.sendMessage рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░ background рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реНрд░реЛрддрд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ chrome.runtime.onMessage.addListener рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ chrome.runtime.connect() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрдерд╛рдпреА рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХрд▓ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ, рдЗрд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ:

chrome.runtime.connect() рдЙрджрд╛рд╣рд░рдг ```javascript var port = chrome.runtime.connect();

// Listen for messages from the web page window.addEventListener("message", (event) => { // Only accept messages from the same window if (event.source !== window) { return; }

// Check if the message type is "FROM_PAGE" if (event.data.type && (event.data.type === "FROM_PAGE")) { console.log("Content script received: " + event.data.text); // Forward the message to the background script port.postMessage({ type: 'FROM_PAGE', text: event.data.text }); } }, false);

// Listen for messages from the background script port.onMessage.addListener(function(msg) { console.log("Content script received message from background script:", msg); // Handle the response message from the background script });

</details>

рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдПрдХ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рдП рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯреИрдм рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, **`chrome.tabs.sendMessage`** рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ, рдЬрд╣рд╛рдБ рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП **рдЯреИрдм рдХрд╛ ID** рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

### рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд `externally_connectable` рд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рддрдХ

`externally_connectable` рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд **рд╡реЗрдм рдРрдкреНрд╕ рдФрд░ рдмрд╛рд╣рд░реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди** рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:
```javascript
chrome.runtime.sendMessage(extensionId, ...

рдЬрд╣рд╛рдВ extension ID рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

Web тЖФя╕О Content Script Communication

рдЬрд╣рд╛рдВ content scripts рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╣рд╛рдВ рд╣реЛрд╕реНрдЯ рдкреГрд╖реНрда рдореМрдЬреВрдж рд╣реИрдВ, рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ, рдЬреЛ рдЕрд▓рдЧрд╛рд╡ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рджреЛрдиреЛрдВ рдХреЗ рдкрд╛рд╕ рдкреГрд╖реНрда рдХреЗ Document Object Model (DOM) рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рд╣реИред рд╣реЛрд╕реНрдЯ рдкреГрд╖реНрда рдХреЛ content script рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ content script рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ extension рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реБрд▓рдн DOM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рд╕рдВрд╡рд╛рдж рдЪреИрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

Post Messages

{% code title="content-script.js" %}

// This is like "chrome.runtime.sendMessage" but to maintain the connection
var port = chrome.runtime.connect();

window.addEventListener("message", (event) => {
// We only accept messages from ourselves
if (event.source !== window) {
return;
}

if (event.data.type && (event.data.type === "FROM_PAGE")) {
console.log("Content script received: " + event.data.text);
// Forward the message to the background script
port.postMessage(event.data.text);
}
}, false);

{% endcode %}

{% code title="example.js" %}

document.getElementById("theButton").addEventListener("click", () => {
window.postMessage(
{type : "FROM_PAGE", text : "Hello from the webpage!"}, "*");
}, false);

{% endcode %}

рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреЛрд╕реНрдЯ рд╕рдВрджреЗрд╢ рд╕рдВрдЪрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • event.isTrusted: рдпрд╣ рдХреЗрд╡рд▓ рддрдм рд╕рддреНрдп рд╣реИ рдЬрдм рдШрдЯрдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреА рдЧрдИ рд╣реЛ
  • рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд╡рд▓ рддрднреА рд╕рдВрджреЗрд╢ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ
  • рдЙрддреНрдкрддреНрддрд┐ рдбреЛрдореЗрди: рдХреЗрд╡рд▓ рдбреЛрдореЗрди рдХреА рдЕрдиреБрдорддрд┐ рд╕реВрдЪреА рд╕реЗ рд╕рдВрджреЗрд╢ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреА рд╣реИред
  • рдпрджрд┐ рдПрдХ regex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ
  • рд╕реНрд░реЛрдд: received_message.source !== window рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдЙрд╕реА рд╡рд┐рдВрдбреЛ рд╕реЗ рдерд╛ рдЬрд╣рд╛рдВ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрди рд░рд╣реА рд╣реИред

рдкрд┐рдЫрд▓реА рдЬрд╛рдВрдЪреЗрдВ, рднрд▓реЗ рд╣реА рдХреА рдЧрдИ рд╣реЛрдВ, рдХрдордЬреЛрд░ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреГрд╖реНрда рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреЛрд╕реНрдЯ рд╕рдВрджреЗрд╢ рдмрд╛рдпрдкрд╛рд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ:

{% content-ref url="../postmessage-vulnerabilities/" %} postmessage-vulnerabilities {% endcontent-ref %}

Iframe

рд╕рдВрдЪрд╛рд░ рдХрд╛ рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХрд╛ Iframe URLs рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

{% content-ref url="browext-xss-example.md" %} browext-xss-example.md {% endcontent-ref %}

DOM

рдпрд╣ "рд╕рдЯреАрдХ" рд╕рдВрдЪрд╛рд░ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗрдм рдФрд░ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╡реЗрдм DOM рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝ рд░рд╣реА рд╣реИ, рд╡реЗрдм DOM рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП, рддреЛ рд╡реЗрдм рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдм рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдм XSS рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ) рдФрд░ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдПрдХ DOM рдЖрдзрд╛рд░рд┐рдд XSS рд╕реЗ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рднреА рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

{% content-ref url="browext-xss-example.md" %} browext-xss-example.md {% endcontent-ref %}

рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ тЖФя╕О рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдЪрд╛рд░

рдПрдХ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ runtime.sendMessage() рдпрд╛ tabs.sendMessage() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдПрдХ рдмрд╛рд░ JSON-рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрдмрд▓ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддреА рд╣реИред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реМрдЯрд╛рдП рдЧрдП Promise рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрднреА рднреА рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХреЙрд▓рдмреИрдХ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

(async () => {
const response = await chrome.runtime.sendMessage({greeting: "hello"});
// do something with response here, not outside the function
console.log(response);
})();

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ (рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ)ред рдЪрдпрдирд┐рдд рдЯреИрдм рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
(async () => {
const [tab] = await chrome.tabs.query({active: true, lastFocusedWindow: true});
const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"});
// do something with response here, not outside the function
console.log(response);
})();

On the receiving end, you need to set up an runtime.onMessage рдЗрд╡реЗрдВрдЯ рд▓рд┐рд╕рдирд░ to handle the message. This looks the same from a content script or extension page.

// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.greeting === "hello")
sendResponse({farewell: "goodbye"});
}
);

In the example highlighted, sendResponse() рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред sendResponse() рдХреЗ рдЕрд╕рдордХрд╛рд▓рд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП onMessage рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, return true; рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИред

рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдХрдИ рдкреГрд╖реНрда onMessage рдЗрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП sendResponse() рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдкреГрд╖реНрда рд╣реА рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдЙрд╕реА рдЗрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдмрд╛рдж рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдирдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рддреЗ рд╕рдордп, рд╡рд╛рджреЛрдВ рдХреА рдУрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рди рдХрд┐ рдХреЙрд▓рдмреИрдХ рдХреАред рдХреЙрд▓рдмреИрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, sendResponse() рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рддрднреА рдорд╛рдиреНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рд╕реАрдзреЗ рд╕рдордХрд╛рд▓рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╛ рдпрджрд┐ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЕрд╕рдордХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЛ true рд▓реМрдЯрд╛рдХрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рднреА рд╣реИрдВрдбрд▓рд░ true рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ sendResponse() рдлрд╝рдВрдХреНрд╢рди рдореЗрдореЛрд░реА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЧрд╛рд░рдмреЗрдЬ-рдХрд▓реЗрдХреНрдЯреЗрдб), рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ sendMessage() рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓рдмреИрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореЗрдореЛрд░реА/рдХреЛрдб/рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА

рдпрджрд┐ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдкрдиреА рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдбрдВрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдорд╢реАрдиреЛрдВ рдореЗрдВ) рдФрд░ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдореЗрдореЛрд░реА рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдорд╛рдиреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдЬреИрд╕реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдпрд╛ рдореНрдиреЗрдореЛрдирд┐рдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред

рдмреЗрд╢рдХ, рдХреЛрдб рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рди рдбрд╛рд▓реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрдЧреАред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдореЗрдореЛрд░реА рдбрдВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдореЛрд░реА рдХреЛ рдбрдВрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЬрд╛рдХрд░ Inspect pop-up рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ -> Memory рд╕реЗрдХреНрд╢рди рдореЗрдВ -> Take a snapshot рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЗ рдЕрдВрджрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП CTRL+F рджрдмрд╛рдПрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдЬреИрд╕реЗ рдореНрдиреЗрдореЛрдирд┐рдХ рдХреА рдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ) рдХреНрдпреЛрдВрдХрд┐ рддрдм рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВрдЧреАред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓реЛрдб рдХрд░рдирд╛

  1. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВ
  2. chrome://extensions/ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ Developer Mode рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ
  3. Load unpacked рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рдлрд╛рдпрд░рдлреЙрдХреНрд╕ рдореЗрдВ рдЖрдк about:debugging#/runtime/this-firefox рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ Load Temporary Add-on рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВред

рд╕реНрдЯреЛрд░ рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рдПрдХ Chrome рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдФрд░ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдП рдЧрдП рд╣реИрдВред

рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ZIP рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

Chrome рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ZIP рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ URL рд╕реЗ ZIP рдлрд╝рд╛рдЗрд▓ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП curl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ ZIP рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рдХрд╛рд▓рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣рд╛рдБ рдХрджрдо рд╣реИрдВ:

  1. "extension_id" рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ ID рд╕реЗ рдмрджрд▓реЗрдВред
  2. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
extension_id=your_extension_id   # Replace with the actual extension ID
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
unzip -d "$extension_id-source" "$extension_id.zip"

CRX Viewer рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

https://robwu.nl/crxviewer/

CRX Viewer рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдПрдХ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдзрд┐ Chrome Extension Source Viewer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИред рдЗрд╕реЗ Chrome Web Store рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпреВрдЕрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЗрд╕рдХреЗ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред

рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╕реНрд░реЛрдд рджреЗрдЦреЗрдВ

рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд Chrome рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рднреА рдирд┐рд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ:

  1. chrome://version/ рдкрд░ рдЬрд╛рдХрд░ рдЕрдкрдиреЗ Chrome рд╕реНрдерд╛рдиреАрдп рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддрдХ рдкрд╣реБрдБрдЪреЗрдВ рдФрд░ "Profile Path" рдлрд╝реАрд▓реНрдб рдХреЛ рдЦреЛрдЬреЗрдВред
  2. рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рднреАрддрд░ Extensions/ рдЙрдкрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдБред
  3. рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рд╕реНрдерд╛рдкрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрддреЗ рд╣реИрдВ, рдЖрдорддреМрд░ рдкрд░ рдЙрдирдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВред

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдирдХреЗ IDs рдХреЛ рдирд╛рдореЛрдВ рд╕реЗ рдореИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • about:extensions рдкреГрд╖реНрда рдкрд░ рдбреЗрд╡рд▓рдкрд░ рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ IDs рджреЗрдЦ рд╕рдХреЗрдВред
  • рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рднреАрддрд░, manifest.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдкрдардиреАрдп name рдлрд╝реАрд▓реНрдб рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИред

рдлрд╝рд╛рдЗрд▓ рдЖрд░реНрдХрд╛рдЗрд╡рд░ рдпрд╛ рдЕрдирдкреИрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

Chrome Web Store рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдлрд╝рд╛рдЗрд▓ рдХрд╛ .crx рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрдЧрд╛ред рдлрд╝рд╛рдЗрд▓ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ .crx рд╕реЗ .zip рдореЗрдВ рдмрджрд▓реЗрдВред ZIP рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдЖрд░реНрдХрд╛рдЗрд╡рд░ (рдЬреИрд╕реЗ WinRAR, 7-Zip, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

Chrome рдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

Chrome рдЦреЛрд▓реЗрдВ рдФрд░ chrome://extensions/ рдкрд░ рдЬрд╛рдПрдБред рд╢реАрд░реНрд╖ рджрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ "рдбреЗрд╡рд▓рдкрд░ рдореЛрдб" рд╕рдХреНрд╖рдо рдХрд░реЗрдВред "рд▓реЛрдб рдЕрдирдкреИрдХреНрдб рдПрдХреНрд╕рдЯреЗрдВрд╢рди..." рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЕрдкрдиреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛рдПрдБред рдпрд╣ рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдпрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

рд╕реБрд░рдХреНрд╖рд╛ рдСрдбрд┐рдЯ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╕реАрдорд┐рдд рд╣рдорд▓реЗ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпрд╛рдБ рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ:

  • permissions рдХреЗ рд▓рд┐рдП рдпрдерд╛рд╕рдВрднрд╡ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ
  • host_permissions рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕реАрдорд┐рдд рдХрд░реЗрдВ
  • рдПрдХ рдордЬрдмреВрдд content_security_policy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • externally_connectable рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕реАрдорд┐рдд рдХрд░реЗрдВ, рдпрджрд┐ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдВрднрд╡ рд╣реИ, рддреЛ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рди рдЫреЛрдбрд╝реЗрдВ, {} рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
  • рдпрджрд┐ рдпрд╣рд╛рдБ XSS рдпрд╛ рдЯреЗрдХрдУрд╡рд░ рдХреЗ рд▓рд┐рдП рдХрдордЬреЛрд░ URL рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдкреГрд╖реНрдарднреВрдорд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реАрдзреЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрд╛рдпрдкрд╛рд╕ред
  • web_accessible_resources рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕реАрдорд┐рдд рдХрд░реЗрдВ, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЦрд╛рд▓реА рднреАред
  • рдпрджрд┐ web_accessible_resources рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, рддреЛ ClickJacking рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
  • рдпрджрд┐ рдХреЛрдИ рд╕рдВрд╡рд╛рдж рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рд╡реЗрдм рдкреГрд╖реНрда рдХреА рдУрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ XSS рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдЬреЛ рд╕рдВрд╡рд╛рдж рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред
  • рдпрджрд┐ рдкреЛрд╕реНрдЯ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреЛрд╕реНрдЯ рд╕рдВрджреЗрд╢ рдХрдордЬреЛрд░рд┐рдпреЛрдВ** рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВред**
  • рдпрджрд┐ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ DOM рд╡рд┐рд╡рд░рдгреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрддреА рд╣реИ, рддреЛ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ XSS рдХреЛ рдкрд░рд┐рдЪрдпрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИрдВ рдпрджрд┐ рд╡реЗ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ
  • рдпрджрд┐ рдпрд╣ рд╕рдВрд╡рд╛рдж рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ -> рдкреГрд╖реНрдарднреВрдорд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╡рд╛рдж рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рд╡рд┐рд╢реЗрд╖ рдЬреЛрд░ рджреЗрдВ
  • рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  • рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдореЗрдореЛрд░реА рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЙрдкрдХрд░рдг

Tarnish

  • рдХрд┐рд╕реА рднреА Chrome рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП Chrome рд╡реЗрдмрд╕реНрдЯреЛрд░ рд▓рд┐рдВрдХ рд╕реЗ рдЦреАрдВрдЪрддрд╛ рд╣реИред
  • manifest.json рд╡реНрдпреВрдЕрд░: рдмрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдХрд╛ JSON-рдкреНрд░реЗрдЯрд┐рдлрд╛рдЗрдб рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг: web_accessible_resources рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдФрд░ Chrome рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдорд╛рдгред
  • рд╕рдВрднрд╛рд╡рд┐рдд Clickjacking рд╡рд┐рд╢реНрд▓реЗрд╖рдг: рдПрдХреНрд╕рдЯреЗрдВрд╢рди HTML рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЬрд┐рдирдореЗрдВ web_accessible_resources рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рд╣реИред рдпреЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Clickjacking рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрдордЬреЛрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдЕрдиреБрдорддрд┐ рдЪреЗрддрд╛рд╡рдиреА(реЛрдВ) рдХрд╛ рд╡реНрдпреВрдЕрд░: рдЬреЛ рд╕рднреА Chrome рдЕрдиреБрдорддрд┐ рдкреНрд░реЙрдореНрдкреНрдЯ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреАред
  • рдЦрддрд░рдирд╛рдХ рдлрд╝рдВрдХреНрд╢рди(реЛрдВ): рдЦрддрд░рдирд╛рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕реНрдерд╛рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╢реЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ innerHTML, chrome.tabs.executeScript рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди)ред
  • рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ(реЛрдВ): рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛/рдмрд╛рд╣рд░реА рдЗрдирдкреБрдЯ рдХреЛ рдХрд╣рд╛рдБ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рддрд╣ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
  • рдЦрддрд░рдирд╛рдХ рдлрд╝рдВрдХреНрд╢рди(реЛрдВ) рдФрд░ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ(реЛрдВ) рд╕реНрдХреИрдирд░ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдЙрддреНрдкрдиреНрди рдЕрд▓рд░реНрдЯ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
  • рдЕрд▓рд░реНрдЯ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдФрд░ рдкрдВрдХреНрддрд┐ред
  • рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдгред
  • рдХреЛрдб рд╡рд╛рд▓реА рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП "View File" рдмрдЯрдиред
  • рдЕрд▓рд░реНрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрдеред
  • рдЕрд▓рд░реНрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреВрд░реНрдг Chrome рдПрдХреНрд╕рдЯреЗрдВрд╢рди URIред
  • рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреИрд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдкреГрд╖реНрда рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд░рд┐рдпрд╛, рдЖрджрд┐ред
  • рдпрджрд┐ рдХрдордЬреЛрд░ рдкрдВрдХреНрддрд┐ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ, рддреЛ рдпрд╣ рдЙрди рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рдкрде рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрди рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ web_accessible_resource рд╕реНрдерд┐рддрд┐ред
  • рдХрдВрдЯреЗрдВрдЯ рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ (CSP) рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдФрд░ рдмрд╛рдпрдкрд╛рд╕ рдЪреЗрдХ: рдпрд╣ рдЖрдкрдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ CSP рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЗ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рднреА рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ред
  • рдЬреНрдЮрд╛рдд рдХрдордЬреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп: рдпрд╣ рдЬреНрдЮрд╛рдд-рдХрдордЬреЛрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Retire.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд╕реНрд╡рд░реВрдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
  • рдореВрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
  • рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдПрдХ рд╕реБрдВрджрд░ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░реЗрдЯрд┐рдлрд╛рдЗрдб HTML рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ)ред
  • рд╕реНрдХреИрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреИрд╢рд┐рдВрдЧ, рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдХреИрди рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдкрд╣рд▓реЗ рдмрд╛рд░ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рджреВрд╕рд░реА рдмрд╛рд░, рдпрджрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдХреИрд╢ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд▓рдЧрднрдЧ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╣реЛрдЧрд╛ред
  • рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд░рд┐рдкреЛрд░реНрдЯ URLs, рдХрд┐рд╕реА рдФрд░ рдХреЛ tarnish рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред

Neto

рдкреНрд░реЛрдЬреЗрдХреНрдЯ Neto рдПрдХ Python 3 рдкреИрдХреЗрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреЛрдВ рдХреА рдЫрд┐рдкреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдЕрдирд░рд╡реЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ Firefox рдФрд░ Chromeред рдпрд╣ рдкреИрдХреЗрдЬ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ manifest.json, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдлрд╝реЛрд▓реНрдбрд░ рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ HTML рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХреЗред

рд╕рдВрджрд░реНрдн

{% hint style="success" %} AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
{% endhint %}