Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

game.* в скором времени будет не доступен #91

Open
Fenex opened this issue Nov 13, 2016 · 17 comments
Open

Comments

@Fenex
Copy link
Collaborator

Fenex commented Nov 13, 2016

Практически всё в game.* более не будет доступно. Также будет недоступен класс Game и другие данные. Так что многие скрипты поломаются. Сейчас можно посмотреть на тестовом сервере что именно поменяется, но скоро я закрою туда доступ.

@voidmain02
Copy link
Owner

Я, к сожалению, в ближайшее время не смогу заняться адаптацией скриптов под новые клавогонки. Слишком мало свободного времени :(

@P-h-e-m-m-e-r
Copy link
Contributor

Fenex, а не подскажешь, какой теперь самый простой способ получить игроков заезда и их результаты?

@Fenex
Copy link
Collaborator Author

Fenex commented Nov 17, 2016

@P-h-e-m-m-e-r , через обращение к DOM: document.querySelectorAll('#players .player')

@ocrest
Copy link
Contributor

ocrest commented Nov 20, 2016

Исправил KG_YandexTranslator и KG_ComplexityPanel. На остальные пока нет свободного времени :(

@P-h-e-m-m-e-r
Copy link
Contributor

KG_ChatHotkey тоже легко исправляется. "Game." поменять на другой объект. Знающие, исправьте на что-нибудь приемлемое, а то не уверен на что можно.

@ocrest
Copy link
Contributor

ocrest commented Nov 21, 2016

@P-h-e-m-m-e-r, там будет лучше использовать просто локальную переменную, чем делать «monkey patch» существующих глобальных объектов. Не знаю, о чем я вообще думал два года назад :(

@P-h-e-m-m-e-r
Copy link
Contributor

KG_ComplexityPanel - в одиночном режиме пока все так же не работает, в дружеских, открытых - работает

@ocrest
Copy link
Contributor

ocrest commented Nov 21, 2016

Мда, действительно. Спасибо, исправлю как только появится время (KG_YandexTranslator это тоже касается, к слову).

@ocrest
Copy link
Contributor

ocrest commented Nov 29, 2016

Пока хватило времени лишь на анализ масштаба проблемы. Ситуация хуже, чем я думал.

Скрипт Использование объектов game и Game Возможное решение
control_error_mode Параметры заезда и статистика ошибок во время набора Работа с DOM
DailyScores Параметры заезда и количество полученных очков при его завершении Работа с DOM
DelGameButton Параметры заезда, статус его завершения, метод game.delresult Параметры и статус — из DOM, POST-запрос на /g/{game_id}.delresult
KG_AccurateSpeedo Текст заезда, время его начала и окончания Переписать полностью. POST-запрос на /g/{game_id}.info с параметром need_text: 1
KG_CancelRaceShortcut Метод game.delresult, статус завершения заезда Мониторинг DOM, POST-запрос на /g/{game_id}.delresult
KG_ChatHotkey monkey-patch объекта Game Убрать monkey-patch
KG_ComplexityPanel Текст заезда (до старта) POST-запрос на /g/{game_id}.info с параметром need_text: 1
KG_ErrorWork Методы Game.prototype.finish и Game.prototype.doErrorWork, поле game.isReadyForErrorWork Переписать полностью или удалить
KG_ExactSpeed Длина текста заезда, время начала и окончания заезда, статус окончания заезда Переписать полностью. POST-запрос на /g/{game_id}.info с параметром need_text: 1
KG_GameLog Все данные объекта game Переписать полностью или удалить
KG_SaveGameResult Все данные объекта game Переписать полностью или удалить
KG_SeparateGameLink monkey-patch объекта game, параметры заезда Параметры заезда — из DOM, убрать monkey-patch
KG_TimeoutAlert monkey-patch объекта game, параметры заезда Параметры заезда — из DOM, убрать monkey-patch
KG_YandexTranslator Текст заезда (до старта) POST-запрос на /g/{game_id}.info с параметром need_text: 1
NoErrorCounter Параметры заезда, статистика ошибок во время набора Работа с DOM
RecentGames Параметры заезда Работа с DOM
hide_cars Проверка на существование game Убрать или заменить проверку
save_race_in_blog Параметры заезда, статистика его завершения Работа с DOM, monkey-patch XMLHttpRequest, POST-запрос на /api/profile/add-journal-post с объектом {userId: %USER_ID%, text: %TEXT%, hidden: false}

@Fenex
Copy link
Collaborator Author

Fenex commented Nov 29, 2016

Метод game.delresult я скоро сделаю доступным, поэтому DelGameButton и KG_CancelRaceShortcut переделывать не нужно.

Уточнение: вызов game.delresult можно не переделывать, но помимо этого в скриптах используется обращение к другим частям game: это уже придётся переделать :(.

@Disassem
Copy link

Disassem commented Dec 1, 2016

@Fenex, а зачем вообще нужно было делать их недоступными?

@ocrest
Copy link
Contributor

ocrest commented Dec 2, 2016

Метод game.delresult я скоро сделаю доступным, поэтому DelGameButton и KG_CancelRaceShortcut переделывать не нужно.

Метод game.delresult как раз было повторить проще всего. А вот публичные данные заезда (тип, допускаемые ранги, таймаут и т.д.), которые нужны многим скриптам, сейчас получить в разы сложнее.

@Fenex, правильно ли я понимаю, что старый код был вынесен в отдельный scope с целью создания некой защиты от читеров школьников, использовавших game.text ?

@Fenex
Copy link
Collaborator Author

Fenex commented Dec 2, 2016

Да, одна из основных целей скрытия переменной - это чтобы нельзя было так легко просматривать текст перед заездом. Мне понравилось как подытожил унч эти изменения:

Это отвадит пионеров, которые научились, как макаки, тыкать в game.text

Убрать в замыкание переменную совсем не сложно и к тому же это не усложняет код, зато большинству теперь подглядеть текст будет негде.

От читов эти изменения естественно не спасут. Весь код работает на клиенте, поэтому чит написать можно в любом случае и при этом довольно легко. По умолчанию нельзя доверять результатам без капчи (квалификация) или TS.

@ocrest
Copy link
Contributor

ocrest commented Dec 2, 2016

Убрать в замыкание переменную совсем не сложно и к тому же это не усложняет код, зато большинству теперь подглядеть текст будет негде.

Здесь я согласен — даже такую элементарную защиту обойти будет многим не под силу.

Меня только несколько пугает объем изменений, которые необходимо будет внести в существующие скрипты (которые, в общем-то, game.text и не использовали, за редкими исключениями).

И как бы потом все эти новые костыли в виде MutationObserver-ов и monkey патчинга XMLHttpRequest не вышли боком (как в плане производительности, так и в плане «читаемости» кода).

@Disassem
Copy link

Disassem commented Dec 2, 2016

Может тогда стоит выставить в открытый доступ копию переменной game без поля text?

@dotru
Copy link

dotru commented Dec 16, 2016

Ну что ж вполне "рациональный" подход, навтыкать палок в колеса, чтобы передвигаться потом пешком.) От читеров это все равно не спасет, зато наживаете себе и другим кучу геммороя) Я так понимаю, вариант открыть тексты перед заездом не рассматривался вообще? Или поиск какой-то разумной альтернативы.

P.s. По хорошему, вам стоило бы давно взять под крыло все эти скрипты и реализовать в основном интерфейсе. Или самим пораскинуть мозгами над юзабильностью сайта. Люди вам медвежью услугу оказали оптимизировав сайт и сделав его более удобным, а вы так наплевательски отнеслись.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants