Решения для безопасности инъекций Javascript - PullRequest
0 голосов
/ 14 декабря 2018

Короче говоря, мой вопрос: «Как мне проверить, какие клиентские сообщения приходят из моего кода, а какие - от хакера?»

Я прочитал много статей о внедрении Javascriptи прочитайте много ответов здесь, на StackOverflow.К сожалению, всегда дается ответ: «Никогда не доверяй клиенту, всегда проверяй подлинность запросов».Звучит как хороший совет, но я не могу понять, как применить его в моей ситуации.Я пытался закрыть все клиентские точки доступа к своему серверному коду, но у меня все еще есть одна, и мне нужна помощь для ее защиты.Вот моя ситуация:

  • У меня есть два веб-сайта: www.main_site.com и www.storage.com
  • По причинам, на которые у меня нет времени, www.storage.com имеет контроль над базами данных и другими различными устройствами хранения данных, которые я не хочу, чтобы кто-то получил в свои руки.
  • www.main_site.com имеет общий доступ к одной из этих баз данных, где у меня есть рабочий циклкодов ключей, которые отправляются с каждым запросом с www.main_site.com на www.storage.com.Если в запросе отсутствует код ключа, он отображает страницу 404
  • . В JS на стороне клиента www.main_site.com я отправляю AJAX-запрос к www.storage.com с просьбой сгенерировать код ключа,поместите код ключа в общую базу данных, затем скажите мне его местонахождение в базе данных.
  • Затем клиентская JS отправляет запрос WebSocket на сервер main_site.com, и сервер выполняет поиск в базе данных.и находит код ключа, возвращает его клиенту.
  • Затем клиент отправляет запрос GET на www.storage.com с запросом и кодом ключа.Мой код в клиенте main_site.com выглядит следующим образом:

    $.get("http://www.storage.com/make_code", function (location) {
        socket.emit("get_code", location, function (code) {
            $.get("http://www.storage.com/do_stuff?input="+input+"&code="+code, function (response) {
                //here I do whatever with the response
            }
        }
    }
    

Я знаю, что в этом коде много ошибок, но я исправил множество дыр.Я заставил www.storage.com принимать только запросы от www.main_site.com, используя политику CORS среди других исправлений.В основном, последняя большая уязвимость, которую я вижу, и которую я хочу сейчас устранить, - это кто-то, использующий Dev Tools в Chrome или Firefox для вставки JS, который будет вызывать все это и имитировать реальный вызов.Как я могу реализовать аутентификацию на стороне сервера здесь?Я не особенно против того, чтобы кто-то вызывал первый $ .get, потому что он только создает код и возвращает свое местоположение в базе данных.Я использую дополнительные для тестирования.Но как только они вызывают этот socket.emit, они получают доступ к тому, что хотят.Какие варианты у меня есть, и, возможно, приведите пример того, как я мог бы реализовать ваши предложения в JavaScript или в Python (www.storage.com на Python).Спасибо!

- РЕДАКТИРОВАТЬ - я могу взломать свой собственный сайт прямо сейчас, зайдя в консоль инструментов Chrome dev и введя точно такой код, как указано выше.Я не могу помешать кому-либо сделать это, так какие методы проверки обычно используются?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

- РЕДАКТИРОВАТЬ - я могу взломать свой собственный сайт прямо сейчас, зайдя в консоль инструментов Chrome dev и введя точно такой код, как указано выше.

Так вот жестокая правда ... Вы можете усложнить взлом, но не можете сделать невозможное !!!

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

Я не могу помешать кому-то другому сделать это, так какие методы проверки обычно используются?

Вы можете прочитать этой серии статей о технологиях безопасности Mobile Api, чтобы понять, как они реализованы и обойдены.Эта статья больше относится к API для мобильного приложения, но большинство упомянутых там методов также можно применять в веб-приложении.

0 голосов
/ 14 декабря 2018

Существует 2 сценария:

Вы хотите, чтобы какой-то пользователь имел некоторые данные с storage.com

Вы должны убедиться, что ресурсы, которыми вы делитесь со случайным пользователем main_site.comне чувствительны.Если вы хотите ограничить доступ к некоторым данным X на storage.com только некоторым пользователям, они должны будут предоставить некоторые учетные данные Y. Затем вы сопоставите Y с X и проверите, все ли в порядке для каждого вызова.

Вы не можете иметь только один js, предоставляющий эти учетные данные, пользователь должен подразумеваться.

Вы хотите выполнить автоматизированное задание, опираясь на данные с storage.com

Jsзвонит на бэкэнд main_site.comОн извлекает данные из storage.com по защищенному каналу (вы можете использовать длинный общий токен и https).

main_site.com затем предоставляет только полезные | не важные | предварительно обработанные данные для внешнего интерфейса

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