Файл Javascript заблокирован корпоративным брандмауэром

У нас есть сайт, на котором мы используем от Dropbox для информирования пользователей о zxcvbnнадежности их паролей, однако время от времени мы получаем сообщения о том, что это не работает.

Оказывается, что эти пользователи (достаточно редко) получают доступ к нашему веб-сайту со своего рабочего места, где действует строгая корпоративная политика брандмауэра, поскольку файл js содержит ругательства и слова NSFW (чтобы пометить пароль как небезопасный, если он содержит эти часто используемые слова), блокируется загрузка всего JS-файла.

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

Как мы могли зашифровать или минимизировать этот js-файл до такой степени, чтобы он не блокировался из-за «плохих» слов в запросе, но был успешно расшифрован на стороне клиента, чтобы действительно выполнять свою работу и обнаруживать небезопасные пароли?

Этот JS Fiddle (вроде как) продемонстрирует проблему: https://jsfiddle.net/0cgap96m/3/

      <script src="https://cdnjs.cloudflare.com/ajax/libs/zxcvbn/4.4.2/zxcvbn.js" integrity="sha512-TZlMGFY9xKj38t/5m2FzJ+RM/aD5alMHDe26p0mYUMoCF5G7ibfHUQILq0qQPV3wlsnCwL+TPRNK4vIWGLOkUQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

<div id="test">

</div>
      window.onload = function(){
    var name = prompt("Put in a fake password to test?");
        var passwordStrength = zxcvbn(name);

    document.getElementById('test').innerHTML = JSON.stringify(passwordStrength);
};

Это должно нормально работать - теперь попробуйте заблокировать https://cdnjs.cloudflare.com/ajax/libs/zxcvbn/4.4.2/zxcvbn.js с помощью блокировщика рекламы или чего-то еще, и он, очевидно, начнет терпеть неудачу. По сути, это то, что происходит с пользователями, но это блокируется их корпоративным брандмауэром, а не локальным блокировщиком рекламы.

3 ответа

Чтобы запутать фильтр, вы можете попробовать заменить буквальные символы синтаксисом JavaScript для представления этих символов в Юникоде.

Это работает даже с идентификаторами!

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

В zxcvbn.js небезопасные слова определены следующим образом (здесь сокращено для этого примера)

      var frequency_lists;frequency_lists=
{passwords:"123456,password,eatshit,goodluck,starcraft"}

Итак, сделав это:

      var frequency_lists;frequency_lists=
{passwords:"123456,password,eatsh" + "it,goodluck,starcraft"}

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

РЕДАКТИРОВАТЬ: Я мог бы предложить PR для их репозитория, чтобы их код был построен в этом формате, что может быть лучшим решением с дополнительным преимуществом решения проблемы для всех, кто использует эту библиотеку, а также позволяет вам обновляться до более новых версий. Но быстро взглянув на github, я понял, что вам нужно быть знакомым с coffeescript + python. Оригинальное решение работает намного быстрее и не требует знания других языков.

как насчет простой обработки ошибок на стороне клиента и правильной проверки на стороне сервера? На самом деле вам даже не нужна проверка, но если набранный / отправленный пароль отправляется на оценку на стороне сервера, когда клиентская сторона недоступна, это может охватывать все необходимые вам базы.

И если вам нужна валидация, ну, в любом случае она должна быть и на стороне сервера, верно?

Другие вопросы по тегам