Как ждать значения с помощью Await

  1. Строки неизменяемы в Java, если вы храните пароль в виде обычного текста, он будет доступен в памяти до тех пор, пока сборщик мусора не очистит его, и поскольку строки используются в пуле строк для повторного использования, существует довольно высокая вероятность того, что он будет остаются в памяти в течение длительного времени, что создает угрозу безопасности. Поскольку любой, у кого есть доступ к дампу памяти, может найти пароль в тексте clear
  2. Java с использованием метода getPassword() JPasswordField, который возвращает метод char [] и устаревший метод getText(), который возвращает пароль в текстовом выражении причина безопасности.
  3. toString () всегда существует риск печати обычного текста в файле журнала или консоли, но если вы используете Array, вы не будете печатать содержимое массива, а его память будет распечатана.
    String strPwd = "passwd";
    char[] charPwd = new char[]{'p','a','s','s','w','d'};
    System.out.println("String password: " + strPwd );
    System.out.println("Character password: " + charPwd );
    
    String password: passwd Пароль персонажа: [C @ 110b2345

Заключительные мысли: хотя использование char [] не только достаточно, вам нужно стереть контент, чтобы быть более безопасным. Я также предлагаю работать с хешированным или зашифрованным паролем вместо обычного текста и освобождать его из памяти, как только будет завершена аутентификация.

0
задан PJQuakJag 27 March 2019 в 02:43
поделиться

1 ответ

Вы также можете изменить свой метод uploadFile на await для загрузки.

Вы используете await, чтобы сделать асинхронный вызов синхронным. Однако, если вы смешаете это с .then() методами, вы, вероятно, сделаете его части непреднамеренно асинхронными.

  Future<String> uploadFile() async {
    final String rand1 = "${new Random().nextInt(10000)}";
    final String rand2 = "${new Random().nextInt(10000)}";
    final String rand3 = "${new Random().nextInt(10000)}";

    // you don't need {} if it's a simple statement, use $stringvar and ${value.toString}
    final StorageReference ref = FirebaseStorage.instance.ref().child('$rand1_$rand2_$rand3.jpg');

    StorageUploadTask task = ref.putFile(imageFile);
    var downloadUrl = await (await task.onComplete).ref.getDownloadURL();
    debugPrint("downloadUrl=$downloadUrl");
    return downloadUrl.toString();
  }

просто предложение, не связанное с вашим первоначальным вопросом.

Используя 3 случайных числа, вы, вероятно, столкнетесь со временем. Рассмотрим использование пакета UUID , вероятность столкновения значительно меньше. :)

  Future<String> uploadFile() async {
    final String uuid = uuid.v4(); // v4 is random, v1 is time-based

    final StorageReference ref = FirebaseStorage.instance.ref().child('$uuid.jpg');

    StorageUploadTask task = ref.putFile(imageFile);
    var downloadUrl = await (await task.onComplete).ref.getDownloadURL();

    return downloadUrl.toString();
  }
0
ответ дан Feu 27 March 2019 в 02:43
поделиться
Другие вопросы по тегам:

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