@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?
  • Вопрос задан
  • 377 просмотров
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Запустить на другом домене в iframe. Тогда это будет окно на другую страницу. Как бы браузер в браузере. И ваша страница не будет знать, что внтури iframe, что бы он ни показывал, будет знать только размеры и адрес. А сам iframe, соответственно, не будет знать, что там во внешней странице.

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

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

Войти через центр авторизации
Похожие вопросы