Защитите встроенный пароль

Я получил очень умное обходное решение André , работающее в Objective-C с использованием SDK Firebase iOS:

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
FIROptions *secondaryAppOptions = [[FIROptions alloc] initWithContentsOfFile:plistPath];
[FIRApp configureWithName:@"Secondary" options:secondaryAppOptions];
FIRApp *secondaryApp = [FIRApp appNamed:@"Secondary"];
FIRAuth *secondaryAppAuth = [FIRAuth authWithApp:secondaryApp];

[secondaryAppAuth createUserWithEmail:user.email
                             password:user.password
                           completion:^(FIRUser * _Nullable user, NSError * _Nullable error) {
                                [secondaryAppAuth signOut:nil];
                          }];

7
задан Artjom B. 18 August 2015 в 11:43
поделиться

6 ответов

Существует несколько способов управлять этим. Если можно выяснить способ сделать, чтобы пользователь обеспечил пароль для keystore, когда приложение запускает самый соответствующий путь, должен был бы зашифровать все значения с помощью ключа и сохранить этот ключ в keystore. Интерфейс командной строки к keystore при помощи keytool. Однако JSE имеет API, чтобы программно получить доступ к keystore также.

Если у Вас нет способности иметь пользователя, вручную обеспечивают, пароль к keystore на запуске (скажите для веб-приложения), один способ сделать это состоит в том, чтобы записать исключительно сложную стандартную программу путаницы, которая может запутать ключ и сохранить его в файле свойств также. Важные вещи помнить состоят в том, что путаница и deobfuscation логика должны быть много разделенный на уровни (мог включить скремблирование, кодирование, введение побочных символов и т.д. и т.д.), и должен самостоятельно иметь по крайней мере один ключ, который мог быть скрыт в других классах в использовании приложения не интуитивные имена. Это не полностью безопасный механизм, так как кто-то с декомпилятором и изрядным количеством времени и аналитики может все еще работать вокруг этого, но является единственным, которого я знаю, которых не требует, чтобы Вы ворвались в собственный компонент (т.е. не легко decompilable) код.

3
ответ дан 7 December 2019 в 10:10
поделиться

Вы храните хеш SHA1 пароля в Вашем файле свойств. Затем при проверке пользовательского пароля Вы хешируете их попытку входа в систему и удостоверяетесь, что два хеша соответствуют.

Это - код, который хеширует некоторые байты для Вас. Вы можете легко немецкие байты от Строки с помощью getBytes() метод.

/**
     * Returns the hash value of the given chars
     * 
     * Uses the default hash algorithm described above
     * 
     * @param in
     *            the byte[] to hash
     * @return a byte[] of hashed values
     */
    public static byte[] getHashedBytes(byte[] in)
    {
        MessageDigest msg;
        try
        {
            msg = MessageDigest.getInstance(hashingAlgorithmUsed);
        }
        catch (NoSuchAlgorithmException e)
        {
            throw new AssertionError("Someone chose to use a hashing algorithm that doesn't exist.  Epic fail, go change it in the Util file.  SHA(1) or MD5");
        }
        msg.update(in);
        return msg.digest();
    }
2
ответ дан 7 December 2019 в 10:10
поделиться

Нет нет. Даже если Вы зашифруете его, то кто-то будет декомпилировать код, который дешифрует его.

1
ответ дан 7 December 2019 в 10:10
поделиться

Вы могли сделать файл раздельного имущества (вне банки) для паролей (или прямой пароль DB или или ключевой пароль) и не включать тот файл свойств с распределением. Или Вы смогли заставлять сервер только признать, что вход в систему от определенной машины так, чтобы спуфинг требовался бы.

0
ответ дан 7 December 2019 в 10:10
поделиться

Разве Вы не могли иметь контакта приложения сервер по https и загрузить пароль после аутентификации в некотором роде, конечно?

0
ответ дан 7 December 2019 в 10:10
поделиться

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

Например, если Ваш Сервер приложений работает на Linux/Unix как root затем сделайте файл свойств пароля принадлежавшим root с 400/-r-------- полномочия.

0
ответ дан 7 December 2019 в 10:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: