Короче говоря, мой вопрос: «Как мне проверить, какие клиентские сообщения приходят из моего кода, а какие - от хакера?»
Я прочитал много статей о внедрении 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 и введя точно такой код, как указано выше.Я не могу помешать кому-либо сделать это, так какие методы проверки обычно используются?