Чому iframe вважаються небезпечними та загрожують безпеці? Чи може хтось описати приклад випадку, коли його можна зловмисно використовувати?
Чому iframe вважаються небезпечними та загрожують безпеці? Чи може хтось описати приклад випадку, коли його можна зловмисно використовувати?
Відповіді:
Як тільки ви показуєте вміст з іншого домену, ви, як правило, довіряєте цьому домену не подавати зловмисне програмне забезпечення.
Немає нічого поганого в iframes per se. Якщо ви контролюєте вміст iframe, вони абсолютно безпечні.
<iframe>
елемент) має відповідний стиль та натякає, що iframe містить недовірений вміст, проблем немає. Модульна реальна вразливість у браузері, звичайно. Коротше кажучи, an <iframe>
настільки ж безпечний, як <a href>
.
<iframe>
з того ж домену може спричинити загрозу безпеці, якщо зловмисник змінить вміст всередині прихованого iframe. Це дозволить зловмиснику поширити атаку XSS всередині прихованої <iframe>
на будь-яку сторінку на вашому сайті, яка посилається на вказаний <iframe>
вміст d. Докладніше див. У розділі stackoverflow.com/a/9428051/334451 .
Цей IFRAME
елемент може становити загрозу безпеці, якщо ваш сайт вбудований у IFRAME
ворожий сайт . Google "clickjacking" для отримання детальної інформації. Зверніть увагу, що це не має значення, використовуєте ви це<iframe>
чи ні. Єдиний реальний захист від цієї атаки - додавання заголовка HTTP X-Frame-Options: DENY
та сподівання, що браузер знає свою роботу.
Крім того, елемент IFRAME може становити загрозу безпеці, якщо будь-яка сторінка на вашому сайті містить вразливість XSS, яку можна використовувати . У такому випадку зловмисник може розширити атаку XSS на будь-яку сторінку в межах одного домену, яку можна переконати завантажити в межах <iframe>
сторінки зі вразливістю XSS. Це тому, що вмісту з того самого походження (того самого домену) дозволено отримувати доступ до батьківського вмісту DOM (практично виконувати JavaScript у документі "хост"). Єдині реальні способи захисту від цієї атаки - додавати HTTP-заголовок X-Frame-Options: DENY
та / або завжди правильно кодувати всі представлені користувачем дані (тобто ніколи не мати вразливість XSS на своєму сайті - простіше сказати, ніж зробити).
Це технічна сторона питання. Крім того, існує проблема користувальницького інтерфейсу. Якщо ви навчите своїх користувачів довіряти, що рядок URL-адреси не повинен змінюватися, коли вони клацають на посилання (наприклад, ваш сайт використовує великий iframe з усім фактичним вмістом), то в майбутньому користувачі нічого не помітять, ні в разі фактичної безпеки вразливість. Наприклад, у вас може бути вразливість XSS на вашому веб-сайті, яка дозволяє зловмиснику завантажувати вміст з ворожих джерел у вашому iframe. Ніхто не міг визначити різницю, тому що URL-адреса все ще виглядає ідентичною попередній поведінці (ніколи не змінюється), а вміст "виглядає" дійсним, навіть незважаючи на те, що це з ворожого домену, який вимагає облікових даних користувачів.
Якщо хтось стверджує, що використання <iframe>
елемента на вашому веб-сайті небезпечно і створює ризик для безпеки, він не розуміє, що <iframe>
робить елемент, або він говорить про можливість <iframe>
пов'язаних з цим вразливих місць у браузерах. Захищеність <iframe src="...">
тегу дорівнює <img src="..."
або <a href="...">
доки в браузері немає вразливостей. І якщо є відповідна вразливість, це може бути можливим , щоб викликати його , навіть без використання <iframe>
, <img>
або <a>
елемента, так що не варто розглядати цю проблему.
Однак слід попередити, що вміст із сайту <iframe>
може запускати навігацію верхнього рівня за замовчуванням . Тобто вмісту в межах <iframe>
дозволено автоматично відкривати посилання над поточним розташуванням сторінки (нове розташування буде видно в адресному рядку). Єдиний спосіб уникнути цього - додати sandbox
атрибут без значення allow-top-navigation
. Наприклад, <iframe sandbox="allow-forms allow-scripts" ...>
. На жаль, пісочниця також завжди відключає всі плагіни. Наприклад, вміст Youtube не може бути пісочницею, оскільки для перегляду всього вмісту Youtube все ще потрібен Flash Player. Жоден браузер не підтримує використання плагінів та забороняє навігацію верхнього рівня одночасно.
Зверніть увагу, що X-Frame-Options: DENY
також захищає від атаки бічних каналів продуктивності, яка може читати вміст перехресного походження (також відомий як " Pixel perfect Timing Attacks ").
"This is because content from the same origin (same domain) is allowed to access the parent content DOM (practically execute JavaScript in the "host" document)."
слід перефразовувати у бік (батьківського) документа, що містить вразливість XSS до (дочірнього) документа в iframe?
<iframe>
на сторінці, це дозволяє розширити вразливість із вмісту в iframe для розміщення документа. Питання полягало в тому, щоб <iframe>
бути небезпечним, і якщо хост-документ має вразливість XSS, <iframe>
елемент вам дійсно не потрібен .
Я припускаю, що міждоменний iFrame, оскільки, імовірно, ризик буде меншим, якщо ви керували ним самостійно.
iframe також вразливий до хрестоматійного сценарію: