Безопасность/Защита кода в JavaScript

Со всей недавней рекламой JavaScript и HTML5, заменяющей Flash, я хотел знать - как можно защитить код js на стороне клиента? Конечно, его можно запутать, но это только сделало бы его немного сложнее. Кроме того, для игр, которые подают высокие баллы на сервер, разве было бы невероятно легко изменить эти оценки до их отправки на сервер? Я знаю, что даже файлы Flash могут быть декомпилированы, но они могут быть запутаны, а декомпиляция флэш-памяти не так проста, как изменение данных в JS - может быть легко выполнена с помощью плагина, такого как Firebug. Я хотел бы узнать все мнения об этом.

Ответ 1

Javascript, анализируемый на клиенте, никогда не на 100% безопасен. всегда будет способ узнать, что он делает. Несколько дней назад я даже видел инструмент, который распаковывает упакованный javascript, поэтому единственное, что вы действительно можете сделать, это использовать "уродливые" имена переменных (или, фактически, сделать упаковщик javascript, преобразовать ваши "хорошие" имена переменных в короткие/уродливые/нонсенс)

Чтобы защитить результаты игры, вам нужно переместить часть логики игры на сервер, чтобы клиент не мог отправлять произвольные результаты.

Подводя итог: не ставьте секреты в код javascript и не доверяйте чему-либо, поступающему от клиента - независимо от формы или сгенерированной/представленной через javascript.

Ответ 2

Вы говорите, что для игры, которая посылает высокие баллы на сервер, было бы слишком легко изменить запрос javascript и forge?

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