XSS с JavaScript: оповещение () - PullRequest
2 голосов
/ 21 мая 2019

Я работаю над некоторыми Reflected Cross-site scripting (XSS) уязвимостями на нашем сайте (php, html, ...) AppSpider сообщает об одной, которую я не могу устранить.

Location: javascript:alert(10829224)

Обычно AppSpiderсписок URL с JS в нем.На этот раз это не так.Он просто перечисляет строку запроса: url=javascript:alert(12345)

Когда я пытаюсь проверить, добавив это к URL-адресу указанной страницы, я ничего не получаю: /path/to/page.html?url=javascript:alert(12345) Если я добавлю теги сценария: /path/to/page.html?url=<script>javascript:alert(12345)</script> Я получувсплывающее окно оповещения.

Вопрос 1 - работает ли javascript:alert() без тегов сценария?viable js?

Вопрос 2 - Как я могу избежать или предотвратить этот тип атаки?

У нас есть код для фильтрации плохих символов Юникода (спасибо: /3477559/kak-propustit-nedopustimye-simvoly-v-faile-xml-s-pomoschy-php). Он отлично работает при обнулении тегов <script></script>, но, очевидно, в этом случае это не помогает.

Спасибо за любые советы или хитрости

Ответы [ 3 ]

2 голосов
/ 24 мая 2019

Оказывается, что страница, на которой я работаю, ожидает относительный путь к файлу в $_REQUEST['url'] var. Итак, я смог выбрать другой подход, чем попытаться разобрать или заменить javascript. Я использовал функцию php parse_url(). Дешевый взлом, но он работает для этой одноразовой страницы / случая.

if (isset($_REQUEST['url']) && valid_script_name_passed_in($_REQUEST['url']) ) {
 ...
}else{
 ...
}

function valid_script_name_passed_in($request_value){
    $parts = parse_url($request_value);
    if( is_array($parts) ){
        if( isset($parts['scheme']) || isset($parts['host'] ){
            return false;
        }
    }
    return true;
}
0 голосов
/ 22 мая 2019

Вопрос 1 - работает ли javascript: alert () без тегов скрипта?

На вашем сайте строка запроса иногда отображается на странице.Если он отображается в html - тогда нужны теги.Если он отображается внутри кода javascript - тогда он может работать без тегов.

Вопрос 2 - Как я могу избежать или предотвратить этот тип атаки?

Общее решение состоит в том, чтобы escape пользовательский ввод при печати на странице.В PHP лучшая функция для этого - htmlspecialchars .Он заменит все специальные символы на HTML-сущности.Например, он заменит & на &. Таким образом, текст будет выглядеть без изменений, но внедрение XSS будет предотвращено.

В вашем случае, я полагаю, вы ожидаете действительный URL-адрес в параметре запроса? Url = xxx.Тогда экранирование не будет работать, поскольку экранирование уничтожит URL.В этом случае вы можете проверить, является ли указанная строка действительным URL-адресом. Здесь обсуждено несколько вариантов проверки URL.

0 голосов
/ 21 мая 2019

при использовании «javascript:» в теге URL будет выполнен javascript после двоеточия при нажатии на ссылку.

Не могу с уверенностью сказать вам без подробностей, но похоже, что предупреждение заключается в том, что «URL =» уязвим для модификации пользователя, что позволит пользователю изменить url = "javascript: [вредоносный код идет здесь] "для внедрения вредоносного кода.

Раньше вы часто сталкивались с этой проблемой на сайтах, где кто-то мог разместить URL на своей домашней странице и без проверки мог просто включить вместо этого javascript.

Вы не можете избежать этого, его нужно дезинфицировать на стороне сервера, чтобы запретить пользователю вставлять код JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...