Ваш комиссар лиги FF - разработчик? ОСТОРОЖНО.

TL; DR: ошибка проверки на стороне клиента ESPN

(ну ... технически победа ... по крайней мере, для моей фантастической лиги)

Как комиссар моей лиги сегодня передо мной стояла интересная задача.

Лига FF, которую я создал на работе, имела неравные дивизионы (3 на запад и 7 на восток).
Это делает шансы западных игроков на выход в плей-офф гораздо более благоприятными. (Вероятность 66,6%, чтобы быть точным). Пытаясь исправить эту проблему, я увидел это сообщение.

Попытка отправить настройки команды / подразделения привела к следующему.

ESPN делает невозможным выбор раскрывающегося списка выше.

Если только вы не разработчик, как я, и любите ковыряться в инструментах разработчика.

Итак, я нашел это

<select name="teamDivision1" class="divisionSelect" disabled="disabled"><option value="0" selected="selected">East</option><option value="1">West</option></select>

Disabled = disabled - это то место, где начинается веселье.

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

Я запустил приведенный ниже код в консоли, чтобы изменить все значения за один раз.

var nonEditableDivisions = document.querySelectorAll('select[disabled="disabled"]');
for (var i = 0; i < nonEditableDivisions.length; i ++){
nonEditableDivisions[i].removeAttribute("disabled");
}

Поэтому я меняю значение, чтобы сделать их равными (5: 5), и получаю это…

(Почему ESPN сначала пропустил это ?!)

Так что я продолжаю копаться, чтобы посмотреть, смогу ли я что-нибудь найти ... что-нибудь ...

потом я нашел это…

checkDivisionStatus: function() {
  var valid = true, divisions = $('table.teamInfoTable'), divisionCount = divisions.length, totalTeams = $('table.teamInfoTable tr.teamRow').length;
  var divisionTable = $('table.divisionTable'), addDivisionRow = divisionTable.find('tr.addDivisionRow'), maxDivisions = parseInt(addDivisionRow.attr('max'));
  divisions.each(function() {
   var table = $(this), divisionId = table.attr('divisionid'), divisionRow = divisionTable.find('tr.divisionRow[divisionid="'+divisionId+'"]');
   var teamCount = table.find('tr.teamRow').length;
   if (teamCount == 1 || Math.abs(teamCount-(totalTeams/divisionCount)) >= 1) valid = false;
   divisionRow.find('.deleteDivisionButton').toggleClass('disabled', teamCount != 0);
  });
  addDivisionRow.toggle(divisionCount < maxDivisions);
  return valid;

Если вы заметили в приведенном выше коде, значение, которое нам нужно изменить, - это окончательное значение действительной переменной. Что возвращает истину или ложь в зависимости от количества элементов в таблице.

… Итак, что произойдет, если вы измените значения на стороне клиента… перетаскивая команды из одной таблицы в другую?…
Итак, я выбираю двух членов наугад и перетаскиваю их во вторую таблицу в DOM, все с помощью Dev Инструменты. Делаем команды равными

а также…..

Разместил без проблем.

Так что это определенно не конец света, так как смена дивизиона не делает ЭТО сильно на лигу FF, однако возникает вопрос, какие еще валидацию мы можем обойти :)

Так как же EPSN исправить это?
Проверка на стороне сервера на основе отметки времени, которая в первую очередь предотвратит отправку.