рд░рд┐рдПрдХреНрдЯ рддрддреНрд╡реЛрдВ рдХреА $ $ рдЯрд╛рдЗрдкреЛ рд╕рдВрдкрддреНрддрд┐ рдХреНрдпреЛрдВ рд╣реИ?

XSS рдХреЗ рд▓рд┐рдП JSON рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрдВрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред


рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк JSX рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ:


<marquee bgcolor="#ffa7c4">hi</marquee> 

рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдмреБрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ:


 React.createElement( /* type */ 'marquee', /* props */ { bgcolor: '#ffa7c4' }, /* children */ 'hi' ) 

рдФрд░ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрддреНрд╡ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╕рднреА рдШрдЯрдХреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдкреЗрдбрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 { type: 'marquee', props: { bgcolor: '#ffa7c4', children: 'hi', }, key: null, ref: null, $$typeof: Symbol.for('react.element'), } 

рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ React рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдлрд╝реАрд▓реНрдбреНрд╕, рдкреНрд░реЙрдкреНрд╕, рдХреА рдФрд░ рдЯрд╛рдЗрдк рд░рд┐рдл рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди $$typeof рд╕рдВрдкрддреНрддрд┐ рдХреНрдпрд╛ рд╣реИ? рдФрд░ рдЗрд╕рдХрд╛ рдкреНрд░рддреАрдХ Symbol() рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреЛрдВ рд╣реИ?




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


 const messageEl = document.getElementById('message'); messageEl.innerHTML = '<p>' + message.text + '</p>'; 

рдпрд╣ рддрдВрддреНрд░ рддрдм рддрдХ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ message.text <img src onerror="stealYourPassword()"> ред рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ HTML рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрдирдкреБрдЯ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣рдорд▓реЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рдПрдкреАрдЖрдИ рдЬреИрд╕реЗ document.createTextNode() textContent document.createTextNode() рдпрд╛ textContent рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рдВрднрд╛рд╡рд┐рдд рдЦрддрд░рдирд╛рдХ рдЕрдХреНрд╖рд░реЛрдВ рдЬреИрд╕реЗ < , > рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред


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


 <p> {message.text} </p> 

рдпрджрд┐ message.text рдПрдХ <img> рд╕рд╛рде рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ <img> рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╛рда рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдмрдЪ рдЬрд╛рддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ DOM рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, <img> рджреЗрдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдмрд╕ рдЗрд╕рдХреЗ рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред


рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ HTML рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: dangerouslySetInnerHTML={{ __html: message.text }} ред рдбрд┐рдЬрд╛рдЗрди рдЬрд╛рдирдмреВрдЭрдХрд░ рдЕрд╕рд╣рдЬ рд╣реИред рдЗрд╕рдХреА рдмреЗрд░реБрдЦреА рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред




рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ? рдирд╣реАрдВред HTML рдФрд░ DOM рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рдЬреНрдЮрд╛рдд рд╣рдорд▓реЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рдЯреИрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк <a href={user.website}> , рддреЛ рдЖрдк рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдХреЛ рдкрд╛рда рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: 'javascript: stealYourPassword()' ред


рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд╕реНрдЯрдо рдкрд╛рда рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░рджрд░реНрд╢рди рд░рдХреНрд╖рд╛ рдХреА рдПрдХ рдЙрдЪрд┐рдд рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╣реИ рдЬреЛ рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рд╣рдорд▓реЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред


рдкрд┐рдЫрд▓реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:


 //   <p> {message.text} </p> 

рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рд░рд┐рдПрдХреНрдЯ рддрддреНрд╡ рдореЗрдВ $$typeof рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВред




рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдмрддрд╛рдпрд╛, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрддреНрд╡ рд╕рд░рд▓ рд╡рд╕реНрддреБ рд╣реИрдВ:


 { type: 'marquee', props: { bgcolor: '#ffa7c4', children: 'hi', }, key: null, ref: null, $$typeof: Symbol.for('react.element'), } 

рдЖрдорддреМрд░ рдкрд░, рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрддреНрд╡ рдХреЛ React.createElement() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рддреБрд░рдВрдд рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рдКрдкрд░ рдХрд┐рдпрд╛ рдерд╛ред


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


 let expectedTextButGotJSON = { type: 'div', props: { dangerouslySetInnerHTML: { __html: '/*     */' }, }, // ... }; let message = { text: expectedTextButGotJSON }; //    React 0.13 <p> {message.text} </p> 

рдпрд╛рдиреА, рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп, рдЕрдЪрд╛рдирдХ, рдЕрдкреЗрдХреНрд╖рд┐рдд TextButGotJSON рдЪрд░ рдХрд╛ рдорд╛рди JSON рдирд┐рдХрд▓рд╛ред рдЬрд┐рд╕реЗ рд░рд┐рдПрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЬрд┐рд╕рд╕реЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 0.13 XSS рдЬреИрд╕реЗ рд╣рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрд╕реНрдХрд░рдг 0.14 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдПрдХ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ:


 { type: 'marquee', props: { bgcolor: '#ffa7c4', children: 'hi', }, key: null, ref: null, $$typeof: Symbol.for('react.element'), } 

рдРрд╕реЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрдг рдорд╛рдиреНрдп JSON рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рднрд▓реЗ рд╣реА рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рднреЗрджреНрдпрддрд╛ рд╣реЛ рдФрд░ рдкрд╛рда рдХреЗ рдмрдЬрд╛рдп JSON рд▓реМрдЯрд╛рддрд╛ рд╣реЛ, JSON рдореЗрдВ Symbol.for('response.element') рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП element.$$typeof рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ element.$$typeof рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдпрд╛ рдЕрдорд╛рдиреНрдп рд╣реЛрдиреЗ рдкрд░ рддрддреНрд╡ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред


Symbol.for() рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреАрдХ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдмреАрдЪ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ iframe рдореЗрдВ рднреА рд╕рдорд╛рди рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдкреГрд╖реНрда рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдХрдИ рдкреНрд░рддрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рд╡реЗ рдЕрднреА рднреА $$typeof рдПрдХ рдореВрд▓реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рдореИрдЪ рдЕрдк" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред




рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рд╡рд░реНрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ?


рдХрд╛рд╢, рд╡реЗ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрддреНрд╡реЛрдВ рдореЗрдВ рдЕрднреА рднреА рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП $$typeof рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреА - 0xeac7 ред


рдареАрдХ 0xeac7 рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi432350/


All Articles