@KaminskyIlya

Почему сторонний скрипт получает доступ к cookie?

Сторонний скрипт 3dparty.js с домена www.test2.ru пытается получить доступ к cookie домена ww.test1.ru. Этот скрипт, выполняется в контексте страницы www.test1.ru.

Есть тестовая страница с домена www.test1.ru:
<html>
<head>
	<script>
		var h = window.location.host;
		document.cookie = 'Victim=Vulnerable; domain='+h+'; path=/; max-age=3600; samesite=strict';		
	</script>
</head>
<body>
	Hello world!
	<script src="http://www.test2.ru/3dparty.js" defer></script>
</body>
</html>


Есть скрипт 3dparty.js, загружаемый со стороннего домена www.test2.ru:
console.log( 'Cookie from foreign domain: ' + document.cookie );

var script = document.createElement('script');
script.innerHTML = 'console.log( "Cookie from victim domain: " + document.cookie )';
document.body.appendChild( script );


При выполнении в консоль выводится:
Cookie from foreign domain: Victim=Vulnerable
Cookie from victim domain: Victim=Vulnerable

Я ожидал, что, как минимум, вывод первой строки будет: Cookie from foreign domain: undefined.
Как вообще здесь закрыть доступ скрипта 3dparty.js для cookie с домена www.test1.ru?
  • Вопрос задан
  • 381 просмотр
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Запустить на другом домене в iframe. Тогда это будет окно на другую страницу. Как бы браузер в браузере. И ваша страница не будет знать, что внтури iframe, что бы он ни показывал, будет знать только размеры и адрес. А сам iframe, соответственно, не будет знать, что там во внешней странице.

А просто при подключении скрипта, он имеет полный доступ ко всему, как родной. И здесь нет смысла ставить палки в колеса. Если запретить куки, то в теории скрипт всё равно сможет их прочитать, если они как-то отражаются на странице. Например, на странице есть тест "Здравствуй, %username%", а скрипт имеет доступ к DOM, так что сможет спарсить имя и прочие переменные. Более логично разделять по принципу "всё или ничего" или по жестко определенному API.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы