2013-12-12 9 views
5

Я пишу веб-приложение, которое делает некоторое шифрование данных на стороне клиента, чтобы гарантировать, что я никогда не увижу, что клиент отправляет на мой сервер. Я действительно беспокоюсь о том, что третья сторона получает доступ к моему JavaScript-коду, а затем добавляет в свой файл JavaScript черный или другой вредоносный код.Обеспечение JavaScript не было изменено

Поскольку JavaScript часто размещается на сторонних CDN, как можно гарантировать, что файл JavaScript не был изменен или изменен до того, как браузер загрузит его? Я бы предпочел получить большое уведомление о безопасности на моей странице, чем загрузить некоторые измененные JavaScript в моем браузере клиентов.

В обычной программе я бы подписал цифровой файл, чтобы убедиться, что он не был подделан, но я не думаю, что браузеры поддерживают проверку заданной сигнатуры перед загрузкой и/или загрузкой файла JavaScript. Должно быть какое-то решение для этого в противном случае размещение любых файлов на CDN будет огромным риском для безопасности. SSL защищает только файл на транспорте, а не когда он сидит на сервере CDN.

+1

Как если бы ваш CDN был взломан? – Mathletics

+0

@Mathletics Yep. Или избивший сотрудник провайдера CDN решил немного «повеселиться». – Cromulent

+0

В любом случае вам нужно найти новый CDN. – Mathletics

ответ

1

Если сценарии не являются динамическими, вы можете хранить их хэши в базе данных и сравнивать клиентскую сторону. См. http://pajhome.org.uk/crypt/md5/

+0

Что происходит, если JavaScript, используемый для проверки хэшей MD5, был изменен? Не верьте ничего. – Cromulent

+0

@Cromulent, если они подделали вашу защиту от несанкционированного доступа, вас превзошли. Служите ваши файлы напрямую. Получите свои собственные СОЗ, потяните за них волокно. ТРАСТ НИЧЕГО. – Mathletics

+2

Служите библиотеку проверки непосредственно (как в встроенной JS). – rishta

3

Если вы хотите, чтобы они достигли клиентской стороны без изменений и не доверяли стороннему CDN, вам необходимо будет обслуживать содержимое JavaScript непосредственно с вашего исходного сервера через HTTPS.

Сравнение хэшей (в соответствии с ответом @rishta's) означало бы, что для этого необходимо разместить JavaScript (либо на вашей странице, либо в отдельном файле , который будет использоваться с вашего сервера), чтобы вы могли просто просто обслуживать шифрование на стороне клиента кода с вашего сервера, а это, вероятно, будет означать меньше накладных расходов в целом.

Смежные вопросы