В девелопменте всегда есть соблазн временно отключить проверку паролей. Типичный вариант:
function authorizeUser(username, password) {
if (isDevelopment) {
return true;
}
// ...
}
Очевидно же, что в продакшне isDevelopment
никогда не станет истиной, потому что не так написано в конфиге.
И тем более обидно, когда это неизбежно происходит. Стоит один только раз этому коду сломаться — и ты будешь готов на что угодно, чтобы только вернуть время вспять.
Поэтому никаких if (isDevelopment)
. Постели себе дополнительную соломку:
function authorizeUser(username, password) {
if (
isDevelopment
&&
md5(today + db.host) == env.PASSWORD_SKIP
) {
return true;
}
}
Можешь с утра выставить переменную окружения PASSWORD_SKIP
в нужное значение и приступить к работе.
echo -n "2019-01-21""localhost""sirko" | md5sum -
В продакшн такая переменная никогда не попадет, а если и попадет, то никогда не примет нужное значение.
Важный момент #0: нельзя просто проверять if (env.PASSWORD_SKIP)
, потому что так ты проверяешь просто наличие переменной окружения. Вероятность того, что она появится в продакшне — мизерная, но не нулевая. Вероятность, что она совпадет с контрольной суммой от дня и имени базы — ноль.
Важный момент #1: вычислять ее значение нужно обязательно вручную. Как только ты засунул это в скрипт - он рано или поздно запустится в продакшне.
Важный момент #2: обязательно нужна дата, чтобы правильное значение не было вечным. Так ты сокращаешь себе во времени площадь уязвимостей.
Важный момент #3: нельзя делать if (password == 'секретное слово')
. Это потенциально эксплуатируемо в продакшне и следовательно это дыра. Слили твой код — получили доступ ко всем аккаунтам, а ты в это время ночью спал.