Squeak.ru - шаблоны программирования

Можно ли взломать через AJAX?

Итак, сегодня у меня был очень хороший опыт работы со своими встроенными системами. Какой-то парень «взломал» все и сказал, что это проблема с ajax. Вот что он сказал мне:

вы полагаетесь на AJAX
когда у меня есть доступ к браузеру пользователя, у меня есть доступ ко всем функциям AJAX, которые вы написали для него, поэтому я могу делать все, что написано в вашем javascript, притворяясь этим пользователем

и это абсолютно хилларно - как кто-то мог получить доступ к пользовательским скриптам через ajax? Также я использую узел на сервере, но не могу понять, в чем проблема... пример ajax:

var transfer_data = {
                id: jQuery(this).data('spin-id')
            };

jQuery.ajax({
            url: init_s.forms.provably.callback,
            type: 'POST',
            dataType: 'JSON',
            data: transfer_data,
            success: function (data) {
                console.log(data);
                if (data.type == 'failed') {
                    jQuery('#check_modal').modal('toggle');
                } else {
                   // add data
                }
            }, error: function (e) {
                console.log(e.message);
            }
        });

и пример запуска скрипта узла:

socket.on('new_spin_entry', function (data) { ... });
socket.emit('new_spin_entry', {
                            entry_id: data.user_spin_data.id
                        });

так что это за хрень? как это вообще возможно?

P.S. Я забыл упомянуть, что он вставил предупреждение в мой скрипт, который был загружен на странице. Не серверные скрипты, а скрипты, загруженные пользователю

PPS: это то, что я вижу в консольной системе банкомата, которая не работает: введите здесь описание изображения

06.11.2015

  • И какова ваша архитектура для аутентификации запроса к серверу узла? 07.11.2015
  • Если он может добавить предупреждение пользователю, это означает, что есть уязвимость XSS, что плохо. 07.11.2015
  • он вставил предупреждение в файл javascript, который был загружен с помощью DOM. 07.11.2015
  • Я не вижу проблемы. Если кто-то контролирует браузер пользователя, он может делать все, что может делать пользователь. Проблема безопасности заключается в том, что какой бы эксплойт он ни использовал, чтобы получить контроль над браузером, это не проблема вашего кода. 07.11.2015
  • @Barmar, можешь расширить свой ответ? как избежать таких проблем? 07.11.2015
  • Какую проблему вы пытаетесь избежать? Если хакер имеет контроль над компьютером пользователя, то, насколько вам известно, он ЯВЛЯЕТСЯ этим пользователем. 07.11.2015
  • я пытаюсь избежать атаки через ajax, который содержит контроль над компьютером пользователя. Я не совсем уверен, что вы хотите сказать, но я на 100% уверен, что он не смог контролировать мой браузер. Я думаю, что некоторые скрипты были отправлены после ответа узла или что-то в этом роде. 07.11.2015

Ответы:


1

Если кто-то имеет полный доступ к браузеру, то он может запускать в нем любой код, который ему нравится, включая изменение или добавление JavaScript на ваши страницы. Это не имеет абсолютно никакого отношения к сайту, использующему Ajax — любая точка, где клиент взаимодействует с сервером, может быть уязвима.

Если они могут изменить страницу только для используемого ими браузера, то это нормальное поведение и не о чем беспокоиться.

Если они могут вводить данные по ссылке или отправлять форму с другого сайта, то вы уязвимы для отраженных XSS-атак.

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

Если они могут сделать это только в том случае, если они являются авторизованными пользователями, вам необходимо ограничить/правильно закодировать отправленные данные (поскольку вашим авторизованным пользователям нельзя доверять).

Если они могут сделать это, попросив авторизованного пользователя посетить страницу, размещенную в другом месте, то вы уязвимы для CSRF-атак и вам необходимо реализовать защиту от них (обычным решением являются одноразовые номера).

Смотрите также:

06.11.2015

2

Любые переменные, отправляемые на стороне клиента, могут быть изменены хакером до того, как они будут отправлены на ваш сервер, который обрабатывает запрос. Чтобы предотвратить это, вы должны использовать проверку кода на стороне сервера, обрабатывающего полученные данные. Никогда не доверяйте любой форме пользовательского ввода или переменным, полученным непосредственно от клиента, которыми можно манипулировать. Так, например, в этом случае вы можете использовать переменные сеанса для проверки того, что детали передачи действительно относятся к вошедшему в систему пользователю, а также проверить, что они не содержат какого-либо вредоносного кода, такого как запросы sql, предназначенные для использования недостатков безопасности в вашем коде.

Надеюсь это поможет!

06.11.2015
  • Если хакер имеет контроль над браузером пользователя, то у него есть файл cookie сеанса пользователя. 07.11.2015
  • Однако переменные состояния сеанса могут храниться на стороне сервера, и в этом случае они не могут быть изменены через клиент, например: stackoverflow.com/questions/13451543/ 07.11.2015
  • о фильтрации входных данных - они фильтруются по коду при получении, потому что я также использую laravel. О переменных сеанса - вы говорите о подделке межсайтовых запросов? 07.11.2015
  • @numX Я понимаю это. Но как это подтвердит, что данные о передаче относятся к вошедшему в систему пользователю? Поскольку данные будут поступать из браузера вошедшего в систему пользователя, они будут правильно проверены. 07.11.2015
  • Например, при входе в систему вы можете установить переменную состояния сеанса на стороне сервера для хранения текущего пользователя - это не будет доступно через клиент. Как только запрос AJAX получен сервером, переменная сеанса «пользователь» может использоваться для определения того, являются ли полученные детали передачи законным запросом, сделанным пользователем, или, возможно, злонамеренной атакой, если данные относятся к другим пользователям. 07.11.2015
  • Но, конечно же, если браузер был взломан, любые данные сеанса, которые у вас есть для законного пользователя, не имеют значения, потому что они будут точно такими же, как у хакера. Это будет тот же пользовательский агент, тот же IP, тот же сеанс — все то же самое. Все, что может делать законный пользователь во время входа в систему, хакер может делать то же самое. 07.11.2015
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...