Browser Extension Pentesting Methodology
Basic Information
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ DOM рд╣реЛрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ DOM рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдЧреЛрдкрдиреАрдпрддрд╛, рдЕрдЦрдВрдбрддрд╛ рдФрд░ рдЙрдкрд▓рдмреНрдзрддрд╛ (CIA) рдХреЛ рдЦрддрд░реЗ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред
Main Components
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓реЗрдЖрдЙрдЯ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВ рдЬрдм рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рддреАрди рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦреЗрдВред
Content Scripts
рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд╛рд╕ рдПрдХрд▓ рд╡реЗрдм рдкреГрд╖реНрда рдХреЗ DOM рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЙрдЬрд╛рдЧрд░ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
Extension Core
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░/рдкрд╣реБрдБрдЪ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░ рдХреЗрд╡рд▓ XMLHttpRequest рдФрд░ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗрдм рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░ рдХреЗ рдкрд╛рд╕ рд╣реЛрд╕реНрдЯ рдорд╢реАрди рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
Native Binary
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рдиреИрдЯрд┐рд╡ рдмрд╛рдЗрдирд░реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реЛрд╕реНрдЯ рдорд╢реАрди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред рдиреИрдЯрд┐рд╡ рдмрд╛рдЗрдирд░реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░ рдХреЗ рд╕рд╛рде рдорд╛рдирдХ рдиреЗрдЯрд╕реНрдХреЗрдк рдкреНрд▓рдЧрдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ (NPAPI) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреНрд▓реИрд╢ рдФрд░ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд▓рдЧ-рдЗрдиреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Boundaries
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдпрд╣ рдордирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рд╡рд╣ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЗрдирдкреБрдЯ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдХреЛрд░ рдореЗрдВ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдХреЛрд░ рд╕реЗ рдиреИрдЯрд┐рд╡ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗред
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдордЬрдмреВрдд рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ рд╕реАрдорд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдЕрд▓рдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдиреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рд╕реЗ рдЕрд▓рдЧ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реАрдк рдореЗрдВ рдЪрд▓рддреА рд╣реИред рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╡реЗрдм рдкреГрд╖реНрда рдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд DOM рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдХрднреА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ, рдЬрд┐рд╕рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд▓реАрдХ рд╣реЛрдирд╛ рд░реЛрдХрддрд╛ рд╣реИред
manifest.json
manifest.json
рдПрдХ рдХреНрд░реЛрдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрд╕ рдПрдХ рдЬрд╝рд┐рдк рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ .crx рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрддрд╛ рд╣реИред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдХреЛрд░ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд░реВрдЯ рдкрд░ manifest.json
рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ рд▓реЗрдЖрдЙрдЯ, рдЕрдиреБрдорддрд┐рдпреЛрдВ рдФрд░ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
Example:
content_scripts
content_scripts
рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд▓реЛрдб рд╣реЛрддреА рд╣реИрдВ рдЬрдм рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд┐рд▓рддреЗ-рдЬреБрд▓рддреЗ рдкреГрд╖реНрда рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рднреА рдкреГрд╖реНрда рдЬреЛ https://example.com/*
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ *://*/*/business*
regex рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ред рдпреЗ рдкреГрд╖реНрда рдХреЗ рдЕрдкрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреА рддрд░рд╣ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдкреГрд╖реНрда рдХреЗ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ (DOM) рддрдХ рдордирдорд╛рдирд╛ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИред
URLs рдХреЛ рд╢рд╛рдорд┐рд▓ рдпрд╛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП include_globs
рдФрд░ exclude_globs
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред
рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдмрдЯрди рдЬреЛрдбрд╝реЗрдЧреА рдЬрдм рд╕реНрдЯреЛрд░реЗрдЬ API рд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ message
рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЬрдм рдЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, runtime.sendMessage() API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдпрд╣ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА APIs рддрдХ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪ рдХреА рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЬрд┐рд╕рдореЗрдВ storage
рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрди рдЕрдкрд╡рд╛рджреЛрдВ рд╕реЗ рдкрд░реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╢ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреГрд╖реНрдареЛрдВ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддреА рд╣реИрдВред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдХреНрд╖рдорддрд╛рдПрдБ рдереЛрдбрд╝реА рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдХреНрд░реЛрдорд┐рдпрдо-рдЖрдзрд╛рд░рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рд╕реВрдЪреА Chrome Developers documentation рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП, MDN рдореБрдЦреНрдп рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд╛рд╕ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
Chrome рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Chrome рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдореЗрдиреВ рдХреЛ Options > More tools > Developer tools рд╕реЗ рдпрд╛ Ctrl + Shift + I рджрдмрд╛рдХрд░ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдкрд░, Source tab рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд╕рдХреЗ рдмрд╛рдж Content Scripts рдЯреИрдмред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреЛрдВ рд╕реЗ рдЪрд▓ рд░рд╣реА рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
Injected content scripts
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Content Scripts рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд╛рдпрдирд╛рдорд┐рдХрд▓реА inject рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдФрд░ tabs.executeScript
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХрд▓реА рдЙрдиреНрд╣реЗрдВ inject рдХрд░рдиреЗ рдХреА рднреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ granular controls рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЙрд╕ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП host permissions рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдпреЗ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдпрд╛ рддреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рдЙрдирдХреА рдорд╛рдВрдЧ рдХрд░рдХреЗ рдпрд╛ activeTab рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрд╕реНрдерд╛рдпреА рдЖрдзрд╛рд░ рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
Example activeTab-based extension
рдХреНрд▓рд┐рдХ рдкрд░ рдПрдХ JS рдлрд╝рд╛рдЗрд▓ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ:
рдХреНрд▓рд┐рдХ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ:
рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг
URLs рдХреЛ рд╢рд╛рдорд┐рд▓ рдпрд╛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП include_globs
рдФрд░ exclude_globs
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред
рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ run_at
run_at
run_at
рдлрд╝реАрд▓реНрдб рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ JavaScript рдлрд╝рд╛рдЗрд▓реЗрдВ рд╡реЗрдм рдкреГрд╖реНрда рдореЗрдВ рдХрдм рдЗрдВрдЬреЗрдХреНрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдкрд╕рдВрджреАрджрд╛ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди "document_idle"
рд╣реИред
рд╕рдВрднрд╡ рдорд╛рди рд╣реИрдВ:
document_idle
: рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛdocument_start
:css
рд╕реЗ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рдж, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдЕрдиреНрдп DOM рдХреЗ рдирд┐рд░реНрдорд╛рдг рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЪрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗредdocument_end
: DOM рдХреЗ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд▓реЗрдХрд┐рди рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рдлрд╝реНрд░реЗрдо рдЬреИрд╕реЗ рдЙрдк-рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓реЛрдб рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред
manifest.json
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
manifest.json
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗservice-worker.js
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
background
background
рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рдордиреНрд╡рдп рдореЗрдВ рдПрдХ рдХреЗрдВрджреНрд░реАрдп рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рджреМрд░рд╛рди рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ, рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ (DOM) рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЬрдЯрд┐рд▓ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдФрд░ рд╕реНрдерд┐рддрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред
рдореБрдЦреНрдп рдмрд┐рдВрджреБ:
рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдХреА рднреВрдорд┐рдХрд╛: рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдирд░реНрд╡ рд╕реЗрдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдФрд░ рд╕рдордиреНрд╡рдп рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╕реНрдерд┐рд░рддрд╛: рдпрд╣ рдПрдХ рд╣рдореЗрд╢рд╛ рдЙрдкрд╕реНрдерд┐рдд рдЗрдХрд╛рдИ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрджреГрд╢реНрдп рд▓реЗрдХрд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИред
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдорд╛рдг: рдпрджрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдмрдирд╛рдПрдЧрд╛ред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрда рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдмрд╛рдз рд╕рдВрдЪрд╛рд▓рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ (рдЬрдм рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ) рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХреАрдХреГрдд рдФрд░ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╕реЗрдЯрдЕрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
Example background script:
рдпрд╣ runtime.onMessage API рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред рдЬрдм рдПрдХ "explain"
рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ tabs API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдП рдЯреИрдм рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рдЦреЛрд▓рддрд╛ рд╣реИред
рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рд╡рд░рдг рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓реНрд╕ рдЦреБрд▓реЗрдВрдЧреЗ:
рд╡рд┐рдХрд▓реНрдк рдкреГрд╖реНрда рдФрд░ рдЕрдиреНрдп
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреГрд╖реНрда рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
рдПрдХреНрд╢рди рдкреГрд╖реНрда рддрдм рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреГрд╖реНрда рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рдирдП рдЯреИрдм рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдЧрд╛ред
рд╡рд┐рдХрд▓реНрдк рдкреГрд╖реНрда: рдпрд╣ рдкреГрд╖реНрда рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛
chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca
рдпрд╛ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ:
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рдкреГрд╖реНрда рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреГрд╖реНрдареЛрдВ рдХреА рддрд░рд╣ рд╕реНрдерд╛рдпреА рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡реЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХреНрд╖рдорддрд╛рдПрдБ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ:
рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░: рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреГрд╖реНрда рдХреЗ рд╕рдорд╛рди, рдпреЗ рдкреГрд╖реНрда рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рднреАрддрд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред
рдПрдХреНрд╕рдЯреЗрдВрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ APIs рддрдХ рдкрд╣реБрдБрдЪ: рдЗрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ APIs рддрдХ рд╡реНрдпрд╛рдкрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдЕрдзреАрди рд╣реЛрддреА рд╣реИред
permissions
& host_permissions
permissions
& host_permissions
permissions
рдФрд░ host_permissions
manifest.json
рд╕реЗ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдпрд╣ рд╕рдВрдХреЗрдд рдХрд░реЗрдВрдЧреА рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдкрд╛рд╕ рдХреМрди рд╕реА рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╣реИрдВ (рд╕реНрдЯреЛрд░реЗрдЬ, рд╕реНрдерд╛рди...) рдФрд░ рдХреМрди рд╕реЗ рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдореЗрдВред
рдЪреВрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрддрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдпрд╛ рдПрдХ рдЬреЛ рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдЪреБрд░рд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рдЬрд╛рд╕реВрд╕реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдзрдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред
рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ рдФрд░ рдХреИрд╕реЗ рдЗрдирдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
BrowExt - permissions & host_permissionscontent_security_policy
content_security_policy
рдПрдХ рд╕рд╛рдордЧреНрд░реА рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рдХреЛ manifest.json
рдХреЗ рдЕрдВрджрд░ рднреА рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдХрдордЬреЛрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛рдлреА рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рд╣реИ:
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП CSP рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдмрд╛рдпрдкрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦреЗрдВ:
Content Security Policy (CSP) Bypassweb_accessible_resources
web_accessible_resources
рдХрд┐рд╕реА рд╡реЗрдмрдкреЗрдЬ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдПрдХ рдкреГрд╖реНрда, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ .html
рдкреГрд╖реНрда, рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреГрд╖реНрда рдХреЛ manifest.json
рдХреЗ web_accessible_resources
рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдпреЗ рдкреГрд╖реНрда URL рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реИрдВ:
In рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреЛрдВ рдореЗрдВ extension-id рдЙрдкрд▓рдмреНрдз рд╣реИ:
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ manifest.json
рдкреИрд░рд╛рдореАрдЯрд░ use_dynamic_url
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ id рдЧрддрд┐рд╢реАрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдкреГрд╖реНрда рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реЛрдиреЗ рдкрд░ рднреА, рдпрд╣ ClickJacking рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдзрдиреНрдпрд╡рд╛рдж Content Security Policy рдХреЗред рдЗрд╕рд▓рд┐рдП ClickJacking рд╣рдорд▓реЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЗрд╕реЗ рднреА рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ (frame-ancestors рдЕрдиреБрднрд╛рдЧ)ред
рдЗрди рдкреГрд╖реНрдареЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдиреЗ рд╕реЗ рдпреЗ рдкреГрд╖реНрда рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрдордЬреЛрд░ ClickJacking рдмрди рдЬрд╛рддреЗ рд╣реИрдВ:
BrowExt - ClickJackingрдЗрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ URLs рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, ClickJacking рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ web_accessible_resources
рд╕реЗ рдкреГрд╖реНрда рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрдиреНрдп рдкреГрд╖реНрда рднреА рдкреГрд╖реНрдарднреВрдорд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдкреГрд╖реНрда XSS рдХреЗ рд▓рд┐рдП рдХрдордЬреЛрд░ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдмрдбрд╝реА рдХрдордЬреЛрд░реА рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ web_accessible_resources
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреГрд╖реНрдареЛрдВ рдХреЛ iframes рдХреЗ рдЕрдВрджрд░ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдирдП рдЯреИрдм рд╕реЗ рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди ID рдЬрд╛рдирдХрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдПрдХ XSS рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рднрд▓реЗ рд╣реА рдкреГрд╖реНрда web_accessible_resources
рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред
externally_connectable
externally_connectable
docs рдХреЗ рдЕрдиреБрд╕рд╛рд░, "externally_connectable"
рдореИрдирд┐рдлреЗрд╕реНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд╡реЗрдм рдкреГрд╖реНрда рдЖрдкрдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ runtime.connect рдФрд░ runtime.sendMessage рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐
externally_connectable
рдХреБрдВрдЬреА рдЖрдкрдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ рдпрд╛ рдЗрд╕реЗ"ids": ["*"]
рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡реЗрдм рдкреГрд╖реНрда рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛редрдпрджрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ IDs рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЧрдИ рд╣реИрдВ, рдЬреИрд╕реЗ
"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
, рддреЛ рдХреЗрд╡рд▓ рд╡рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдпрджрд┐ matches рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рд╡реЗ рд╡реЗрдм рдРрдкреНрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ:
рдпрджрд┐ рдЗрд╕реЗ рдЦрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
"externally_connectable": {}
, рддреЛ рдХреЛрдИ рдРрдк рдпрд╛ рд╡реЗрдм рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХреЗрдЧрд╛ред
рдпрд╣рд╛рдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ URL рдХреЗ рд╕рд╛рде, рд╣рдорд▓рд╛ рд╕рддрд╣ рдЫреЛрдЯреА рд╣реЛрдЧреАред
рдпрджрд┐ рдПрдХ рд╡реЗрдм рдкреГрд╖реНрда XSS рдпрд╛ рдЯреЗрдХрдУрд╡рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ рдФрд░ рдЗрд╕реЗ externally_connectable
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдкреГрд╖реНрдарднреВрдорд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реАрдзреЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЗрд╕рдХреЗ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдПред
рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрд╛рдпрдкрд╛рд╕ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рд░реЙрдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рди рд╣реЛ, рдпрд╣ рдПрдХ рдЕрдиреБрдордд рд╡реЗрдм рдкреГрд╖реНрда рдореЗрдВ XSS рдбреЗрдЯрд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ WebRequest
рдпрд╛ DeclarativeNetRequest
APIs рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд▓рдХреНрд╖рд┐рдд рдбреЛрдореЗрди рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдПрдХ рдкреГрд╖реНрда рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ JavaScript рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдмрджрд▓рддреЗ рд╣реБрдПред (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓рдХреНрд╖рд┐рдд рдкреГрд╖реНрда рдкрд░ CSP рдЗрди рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ)ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдЖрдпрд╛ рд╣реИред
рд╕рдВрдЪрд╛рд░ рд╕рд╛рд░рд╛рдВрд╢
рдПрдХреНрд╕рдЯреЗрдВрд╢рди <--> рд╡реЗрдм рдРрдк
рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╡реЗрдм рдкреГрд╖реНрда рдХреЗ рдмреАрдЪ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдкреЛрд╕реНрдЯ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ window.postMessage
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдорд┐рд▓реЗрдВрдЧреЗ рдФрд░ рдХрдВрдЯреЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ window.addEventListener
рдЬреИрд╕реЗ рд╢реНрд░реЛрддрд╛ рдорд┐рд▓реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рднреА рдПрдХ рдкреЛрд╕реНрдЯ рд╕рдВрджреЗрд╢ рднреЗрдЬрдХрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдЗрд╕рд▓рд┐рдП рд╡реЗрдм рдХреЛ рдЗрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП) рдпрд╛ рдмрд╕ рд╡реЗрдм рдХреЛ рдПрдХ рдирдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрдВрджрд░
рдЖрдо рддреМрд░ рдкрд░ chrome.runtime.sendMessage
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░ background
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реНрд░реЛрддрд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ chrome.runtime.onMessage.addListener
рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ chrome.runtime.connect()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрдерд╛рдпреА рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХрд▓ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ, рдЗрд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ: