Файл 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. Оригинальное решение работает намного быстрее и не требует знания других языков.
как насчет простой обработки ошибок на стороне клиента и правильной проверки на стороне сервера? На самом деле вам даже не нужна проверка, но если набранный / отправленный пароль отправляется на оценку на стороне сервера, когда клиентская сторона недоступна, это может охватывать все необходимые вам базы.
И если вам нужна валидация, ну, в любом случае она должна быть и на стороне сервера, верно?