diff --git a/app/src/main/java/com/erikraft/drop/FtpSecurityDefaults.java b/app/src/main/java/com/erikraft/drop/FtpSecurityDefaults.java
new file mode 100644
index 000000000..96a00af46
--- /dev/null
+++ b/app/src/main/java/com/erikraft/drop/FtpSecurityDefaults.java
@@ -0,0 +1,88 @@
+package com.erikraft.drop;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.util.Base64;
+
+import androidx.preference.PreferenceManager;
+
+import java.security.SecureRandom;
+import java.util.Locale;
+
+/** Secure one-time migration and credential checks for the local FTP/FTPS/SFTP servers. */
+public final class FtpSecurityDefaults {
+ private static final String MIGRATION_KEY = "security_ftp_sftp_defaults_v1";
+ private static final SecureRandom RANDOM = new SecureRandom();
+
+ private FtpSecurityDefaults() { }
+
+ public static synchronized void ensureSecureDefaults(Context context) {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ if (prefs.getBoolean(MIGRATION_KEY, false)) return;
+
+ String ftpUserKey = context.getString(R.string.pref_ftp_username);
+ String ftpPasswordKey = context.getString(R.string.pref_ftp_password);
+ String sftpUserKey = context.getString(R.string.pref_sftp_username);
+ String sftpPasswordKey = context.getString(R.string.pref_sftp_password);
+
+ String ftpUser = prefs.getString(ftpUserKey, "android");
+ String ftpPassword = prefs.getString(ftpPasswordKey, "");
+ String sftpUser = prefs.getString(sftpUserKey, "android");
+ String sftpPassword = prefs.getString(sftpPasswordKey, "");
+
+ SharedPreferences.Editor editor = prefs.edit();
+ if (ftpUser == null || ftpUser.trim().isEmpty()) editor.putString(ftpUserKey, "android");
+ if (!hasStrongCredentials(ftpUser, ftpPassword)) {
+ editor.putString(ftpPasswordKey, generatePassword());
+ }
+ if (sftpUser == null || sftpUser.trim().isEmpty()) editor.putString(sftpUserKey, "android");
+ if (!hasStrongCredentials(sftpUser, sftpPassword)) {
+ editor.putString(sftpPasswordKey, generatePassword());
+ }
+
+ // These settings were previously persisted with insecure defaults. Migrate once;
+ // users can still deliberately change them again from the settings screen.
+ editor.putBoolean(context.getString(R.string.pref_ftp_anonymous), false);
+ editor.putBoolean(context.getString(R.string.pref_ftp_ftps), true);
+ editor.putBoolean(MIGRATION_KEY, true);
+ editor.apply();
+ }
+
+ public static boolean hasStrongCredentials(String username, String password) {
+ if (username == null || username.trim().isEmpty() || password == null || password.trim().length() < 12) {
+ return false;
+ }
+ String trimmedPassword = password.trim();
+ if (trimmedPassword.equalsIgnoreCase(username.trim())) return false;
+ String normalized = trimmedPassword.toLowerCase(Locale.ROOT);
+ if (normalized.equals("android")
+ || normalized.equals("admin")
+ || normalized.equals("erikraft")
+ || normalized.equals("password")
+ || normalized.equals("123456789012")
+ || normalized.equals("abcdefghijkl")
+ || normalized.equals("qwertyuiopas")) return false;
+
+ boolean lower = false, upper = false, digit = false, symbol = false;
+ char previous = 0;
+ boolean allSame = true;
+ for (int i = 0; i < trimmedPassword.length(); i++) {
+ char c = trimmedPassword.charAt(i);
+ lower |= Character.isLowerCase(c);
+ upper |= Character.isUpperCase(c);
+ digit |= Character.isDigit(c);
+ symbol |= !Character.isLetterOrDigit(c);
+ if (i > 0 && c != previous) allSame = false;
+ previous = c;
+ }
+ int characterClasses = (lower ? 1 : 0) + (upper ? 1 : 0)
+ + (digit ? 1 : 0) + (symbol ? 1 : 0);
+ return !allSame && characterClasses >= 3;
+ }
+
+ private static String generatePassword() {
+ byte[] bytes = new byte[24];
+ RANDOM.nextBytes(bytes);
+ return Base64.encodeToString(bytes, Base64.URL_SAFE | Base64.NO_WRAP | Base64.NO_PADDING);
+ }
+}
diff --git a/app/src/main/java/com/erikraft/drop/FtpServerService.java b/app/src/main/java/com/erikraft/drop/FtpServerService.java
index 707e37685..5284ffd8f 100644
--- a/app/src/main/java/com/erikraft/drop/FtpServerService.java
+++ b/app/src/main/java/com/erikraft/drop/FtpServerService.java
@@ -97,13 +97,17 @@ public int onStartCommand(Intent intent, int flags, int startId) {
private void startServer(long generation) {
try {
+ FtpSecurityDefaults.ensureSecureDefaults(this);
android.content.SharedPreferences prefs = androidx.preference.PreferenceManager.getDefaultSharedPreferences(this);
int port = parsePort(prefs.getString(getString(R.string.pref_ftp_port), "" + DEFAULT_PORT));
String username = valueOrDefault(prefs.getString(getString(R.string.pref_ftp_username), ""), "android");
String password = valueOrDefault(prefs.getString(getString(R.string.pref_ftp_password), ""), "android");
- boolean anonymous = prefs.getBoolean(getString(R.string.pref_ftp_anonymous), true);
- boolean ftps = prefs.getBoolean(getString(R.string.pref_ftp_ftps), false);
+ boolean anonymous = prefs.getBoolean(getString(R.string.pref_ftp_anonymous), false);
+ boolean ftps = prefs.getBoolean(getString(R.string.pref_ftp_ftps), true);
boolean implicitFtps = prefs.getBoolean(getString(R.string.pref_ftp_ftps_implicit), false);
+ if (!FtpSecurityDefaults.hasStrongCredentials(username, password)) {
+ throw new IllegalStateException(getString(R.string.ftp_sftp_weak_credentials_error));
+ }
boolean readOnly = prefs.getBoolean(getString(R.string.pref_ftp_read_only), false);
File home = resolveHome(prefs.getString(getString(R.string.pref_save_location), ""));
if (!home.exists() && !home.mkdirs()) throw new IllegalStateException("Não foi possível criar a pasta base: " + home);
diff --git a/app/src/main/java/com/erikraft/drop/FtpSettingsActivity.java b/app/src/main/java/com/erikraft/drop/FtpSettingsActivity.java
index 3e54c7a29..4688e8720 100644
--- a/app/src/main/java/com/erikraft/drop/FtpSettingsActivity.java
+++ b/app/src/main/java/com/erikraft/drop/FtpSettingsActivity.java
@@ -78,6 +78,7 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SnapdropApplication.setAppTheme(this);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ FtpSecurityDefaults.ensureSecureDefaults(this);
notificationPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), granted -> {
if (stopNotificationSwitch != null) stopNotificationSwitch.setChecked(granted);
prefs.edit().putBoolean(getString(R.string.pref_ftp_stop_notification), granted).apply();
@@ -157,11 +158,11 @@ private void buildUi() {
content.addView((TextInputLayout) passwordInput.getTag(), lpTop(dp(8)));
anonymousSwitch = new SwitchCompat(this);
anonymousSwitch.setText(R.string.ftp_anonymous_title);
- anonymousSwitch.setChecked(prefs.getBoolean(getString(R.string.pref_ftp_anonymous), true));
+ anonymousSwitch.setChecked(prefs.getBoolean(getString(R.string.pref_ftp_anonymous), false));
content.addView(anonymousSwitch, lpTop(dp(8)));
ftpsSwitch = new SwitchCompat(this);
ftpsSwitch.setText(R.string.ftp_ftps_title);
- ftpsSwitch.setChecked(prefs.getBoolean(getString(R.string.pref_ftp_ftps), false));
+ ftpsSwitch.setChecked(prefs.getBoolean(getString(R.string.pref_ftp_ftps), true));
content.addView(ftpsSwitch, lpTop(dp(4)));
ftpsModeButton = new MaterialButton(this);
content.addView(ftpsModeButton, lpTop(dp(4)));
@@ -289,7 +290,7 @@ private void updateAddress() {
private String buildAddress() {
String port = prefs.getString(getString(R.string.pref_ftp_port), "2221");
- String scheme = prefs.getBoolean(getString(R.string.pref_ftp_ftps), false) ? "ftps" : "ftp";
+ String scheme = prefs.getBoolean(getString(R.string.pref_ftp_ftps), true) ? "ftps" : "ftp";
return scheme + "://" + getWifiAddress() + ":" + port;
}
diff --git a/app/src/main/java/com/erikraft/drop/SftpServerService.java b/app/src/main/java/com/erikraft/drop/SftpServerService.java
index 075a001c6..f78399c18 100644
--- a/app/src/main/java/com/erikraft/drop/SftpServerService.java
+++ b/app/src/main/java/com/erikraft/drop/SftpServerService.java
@@ -99,6 +99,7 @@ private void startServer() {
// Android provides its own crypto primitives; avoid SSHD's optional BC registrar.
System.setProperty("org.apache.sshd.security.provider.BC.enabled", "false");
+ FtpSecurityDefaults.ensureSecureDefaults(this);
android.content.SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(this);
int port = parsePort(prefs.getString(getString(R.string.pref_sftp_port), "" + DEFAULT_PORT));
@@ -106,6 +107,9 @@ private void startServer() {
prefs.getString(getString(R.string.pref_sftp_username), ""), "android");
String password = valueOrDefault(
prefs.getString(getString(R.string.pref_sftp_password), ""), "android");
+ if (!FtpSecurityDefaults.hasStrongCredentials(username, password)) {
+ throw new IllegalStateException(getString(R.string.ftp_sftp_weak_credentials_error));
+ }
String configuredHome = prefs.getString(getString(R.string.pref_sftp_save_location), "");
boolean readOnly = prefs.getBoolean(getString(R.string.pref_sftp_read_only), false);
File home = new File(configuredHome);
diff --git a/app/src/main/java/com/erikraft/drop/SftpSettingsActivity.java b/app/src/main/java/com/erikraft/drop/SftpSettingsActivity.java
index 80ade0433..e1aaf782b 100644
--- a/app/src/main/java/com/erikraft/drop/SftpSettingsActivity.java
+++ b/app/src/main/java/com/erikraft/drop/SftpSettingsActivity.java
@@ -46,6 +46,7 @@ public class SftpSettingsActivity extends DropPipActivity {
@Override protected void onCreate(Bundle state) {
super.onCreate(state);
+ FtpSecurityDefaults.ensureSecureDefaults(this);
notificationPermissionLauncher = registerForActivityResult(
new ActivityResultContracts.RequestPermission(), granted -> {
if (stopNotificationSwitch != null) stopNotificationSwitch.setChecked(granted);
diff --git a/app/src/main/res/values-af-rZA/ftp_security.xml b/app/src/main/res/values-af-rZA/ftp_security.xml
new file mode 100644
index 000000000..4158cd0ca
--- /dev/null
+++ b/app/src/main/res/values-af-rZA/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Gebruik vir sekuriteit ’n unieke wagwoord van minstens 12 karakters in die FTP/FTPS/SFTP-instellings.
+
diff --git a/app/src/main/res/values-ar-rSA/ftp_security.xml b/app/src/main/res/values-ar-rSA/ftp_security.xml
new file mode 100644
index 000000000..28b79b31c
--- /dev/null
+++ b/app/src/main/res/values-ar-rSA/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ لأسباب أمنية، استخدم كلمة مرور فريدة من 12 حرفًا على الأقل في إعدادات FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-bg-rBG/ftp_security.xml b/app/src/main/res/values-bg-rBG/ftp_security.xml
new file mode 100644
index 000000000..60c0722e3
--- /dev/null
+++ b/app/src/main/res/values-bg-rBG/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ За сигурност използвайте уникална парола с поне 12 знака в настройките за FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-ca-rES/ftp_security.xml b/app/src/main/res/values-ca-rES/ftp_security.xml
new file mode 100644
index 000000000..2742f0e78
--- /dev/null
+++ b/app/src/main/res/values-ca-rES/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Per seguretat, fes servir una contrasenya única d’almenys 12 caràcters a la configuració FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-cs-rCZ/ftp_security.xml b/app/src/main/res/values-cs-rCZ/ftp_security.xml
new file mode 100644
index 000000000..daac63ba1
--- /dev/null
+++ b/app/src/main/res/values-cs-rCZ/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Z bezpečnostních důvodů použijte v nastavení FTP/FTPS/SFTP jedinečné heslo o délce alespoň 12 znaků.
+
diff --git a/app/src/main/res/values-da-rDK/ftp_security.xml b/app/src/main/res/values-da-rDK/ftp_security.xml
new file mode 100644
index 000000000..2cf8cb027
--- /dev/null
+++ b/app/src/main/res/values-da-rDK/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Af sikkerhedshensyn skal du bruge en unik adgangskode på mindst 12 tegn i FTP/FTPS/SFTP-indstillingerne.
+
diff --git a/app/src/main/res/values-de-rDE/ftp_security.xml b/app/src/main/res/values-de-rDE/ftp_security.xml
new file mode 100644
index 000000000..f5a9060e6
--- /dev/null
+++ b/app/src/main/res/values-de-rDE/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Verwende aus Sicherheitsgründen in den FTP/FTPS/SFTP-Einstellungen ein einzigartiges Passwort mit mindestens 12 Zeichen.
+
diff --git a/app/src/main/res/values-el-rGR/ftp_security.xml b/app/src/main/res/values-el-rGR/ftp_security.xml
new file mode 100644
index 000000000..490476391
--- /dev/null
+++ b/app/src/main/res/values-el-rGR/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Για λόγους ασφαλείας, χρησιμοποιήστε μοναδικό κωδικό πρόσβασης τουλάχιστον 12 χαρακτήρων στις ρυθμίσεις FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-es-rES/ftp_security.xml b/app/src/main/res/values-es-rES/ftp_security.xml
new file mode 100644
index 000000000..7eb33e0f4
--- /dev/null
+++ b/app/src/main/res/values-es-rES/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Por seguridad, utiliza una contraseña única de al menos 12 caracteres en los ajustes de FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-fi-rFI/ftp_security.xml b/app/src/main/res/values-fi-rFI/ftp_security.xml
new file mode 100644
index 000000000..0a8475ac2
--- /dev/null
+++ b/app/src/main/res/values-fi-rFI/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Käytä turvallisuussyistä FTP/FTPS/SFTP-asetuksissa yksilöllistä salasanaa, jossa on vähintään 12 merkkiä.
+
diff --git a/app/src/main/res/values-fr-rFR/ftp_security.xml b/app/src/main/res/values-fr-rFR/ftp_security.xml
new file mode 100644
index 000000000..1cd2fe4cf
--- /dev/null
+++ b/app/src/main/res/values-fr-rFR/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Pour votre sécurité, utilisez un mot de passe unique d’au moins 12 caractères dans les paramètres FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-hi-rIN/ftp_security.xml b/app/src/main/res/values-hi-rIN/ftp_security.xml
new file mode 100644
index 000000000..45254935e
--- /dev/null
+++ b/app/src/main/res/values-hi-rIN/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ सुरक्षा के लिए, FTP/FTPS/SFTP सेटिंग में कम से कम 12 अक्षरों वाला विशिष्ट पासवर्ड इस्तेमाल करें।
+
diff --git a/app/src/main/res/values-hr-rHR/ftp_security.xml b/app/src/main/res/values-hr-rHR/ftp_security.xml
new file mode 100644
index 000000000..5b3a7a9a9
--- /dev/null
+++ b/app/src/main/res/values-hr-rHR/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Radi sigurnosti koristite jedinstvenu lozinku od najmanje 12 znakova u postavkama FTP/FTPS/SFTP-a.
+
diff --git a/app/src/main/res/values-hu-rHU/ftp_security.xml b/app/src/main/res/values-hu-rHU/ftp_security.xml
new file mode 100644
index 000000000..341e270b0
--- /dev/null
+++ b/app/src/main/res/values-hu-rHU/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Biztonsági okokból használjon legalább 12 karakteres, egyedi jelszót az FTP/FTPS/SFTP beállításaiban.
+
diff --git a/app/src/main/res/values-in-rID/ftp_security.xml b/app/src/main/res/values-in-rID/ftp_security.xml
new file mode 100644
index 000000000..6ad2676ae
--- /dev/null
+++ b/app/src/main/res/values-in-rID/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Demi keamanan, gunakan kata sandi unik minimal 12 karakter di pengaturan FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-it-rIT/ftp_security.xml b/app/src/main/res/values-it-rIT/ftp_security.xml
new file mode 100644
index 000000000..c3129b7af
--- /dev/null
+++ b/app/src/main/res/values-it-rIT/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Per sicurezza, usa una password univoca di almeno 12 caratteri nelle impostazioni FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-iw-rIL/ftp_security.xml b/app/src/main/res/values-iw-rIL/ftp_security.xml
new file mode 100644
index 000000000..dd3f1a7b8
--- /dev/null
+++ b/app/src/main/res/values-iw-rIL/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ למען האבטחה, יש להשתמש בהגדרות FTP/FTPS/SFTP בסיסמה ייחודית בת 12 תווים לפחות.
+
diff --git a/app/src/main/res/values-ja-rJP/ftp_security.xml b/app/src/main/res/values-ja-rJP/ftp_security.xml
new file mode 100644
index 000000000..ba83528dd
--- /dev/null
+++ b/app/src/main/res/values-ja-rJP/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ セキュリティのため、FTP/FTPS/SFTP の設定では 12 文字以上の固有のパスワードを使用してください。
+
diff --git a/app/src/main/res/values-ko-rKR/ftp_security.xml b/app/src/main/res/values-ko-rKR/ftp_security.xml
new file mode 100644
index 000000000..c9f121b26
--- /dev/null
+++ b/app/src/main/res/values-ko-rKR/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ 보안을 위해 FTP/FTPS/SFTP 설정에서 12자 이상의 고유한 비밀번호를 사용하세요.
+
diff --git a/app/src/main/res/values-mk-rMK/ftp_security.xml b/app/src/main/res/values-mk-rMK/ftp_security.xml
new file mode 100644
index 000000000..b0380e195
--- /dev/null
+++ b/app/src/main/res/values-mk-rMK/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ За безбедност, користете единствена лозинка со најмалку 12 знаци во поставките за FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-ne-rNP/ftp_security.xml b/app/src/main/res/values-ne-rNP/ftp_security.xml
new file mode 100644
index 000000000..049f343e1
--- /dev/null
+++ b/app/src/main/res/values-ne-rNP/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ सुरक्षाका लागि FTP/FTPS/SFTP सेटिङमा कम्तीमा १२ वर्णको अद्वितीय पासवर्ड प्रयोग गर्नुहोस्।
+
diff --git a/app/src/main/res/values-nl-rNL/ftp_security.xml b/app/src/main/res/values-nl-rNL/ftp_security.xml
new file mode 100644
index 000000000..63823dcf0
--- /dev/null
+++ b/app/src/main/res/values-nl-rNL/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Gebruik voor de veiligheid een uniek wachtwoord van minimaal 12 tekens in de FTP/FTPS/SFTP-instellingen.
+
diff --git a/app/src/main/res/values-no-rNO/ftp_security.xml b/app/src/main/res/values-no-rNO/ftp_security.xml
new file mode 100644
index 000000000..e6c0cf252
--- /dev/null
+++ b/app/src/main/res/values-no-rNO/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Av sikkerhetshensyn må du bruke et unikt passord på minst 12 tegn i FTP/FTPS/SFTP-innstillingene.
+
diff --git a/app/src/main/res/values-pl-rPL/ftp_security.xml b/app/src/main/res/values-pl-rPL/ftp_security.xml
new file mode 100644
index 000000000..c8e2f1319
--- /dev/null
+++ b/app/src/main/res/values-pl-rPL/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Ze względów bezpieczeństwa użyj unikalnego hasła o długości co najmniej 12 znaków w ustawieniach FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-pt-rBR/ftp_security.xml b/app/src/main/res/values-pt-rBR/ftp_security.xml
new file mode 100644
index 000000000..62836bdd5
--- /dev/null
+++ b/app/src/main/res/values-pt-rBR/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Por segurança, use uma senha exclusiva com pelo menos 12 caracteres nas configurações de FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-pt-rPT/ftp_security.xml b/app/src/main/res/values-pt-rPT/ftp_security.xml
new file mode 100644
index 000000000..697199bac
--- /dev/null
+++ b/app/src/main/res/values-pt-rPT/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Por segurança, utilize uma palavra-passe exclusiva com pelo menos 12 caracteres nas definições de FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-ro-rRO/ftp_security.xml b/app/src/main/res/values-ro-rRO/ftp_security.xml
new file mode 100644
index 000000000..9c7453756
--- /dev/null
+++ b/app/src/main/res/values-ro-rRO/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Pentru securitate, folosiți o parolă unică de cel puțin 12 caractere în setările FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-ru-rRU/ftp_security.xml b/app/src/main/res/values-ru-rRU/ftp_security.xml
new file mode 100644
index 000000000..29ebacbdf
--- /dev/null
+++ b/app/src/main/res/values-ru-rRU/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ В целях безопасности используйте в настройках FTP/FTPS/SFTP уникальный пароль длиной не менее 12 символов.
+
diff --git a/app/src/main/res/values-sk-rSK/ftp_security.xml b/app/src/main/res/values-sk-rSK/ftp_security.xml
new file mode 100644
index 000000000..0b552094f
--- /dev/null
+++ b/app/src/main/res/values-sk-rSK/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Z bezpečnostných dôvodov použite v nastaveniach FTP/FTPS/SFTP jedinečné heslo s dĺžkou aspoň 12 znakov.
+
diff --git a/app/src/main/res/values-sl-rSI/ftp_security.xml b/app/src/main/res/values-sl-rSI/ftp_security.xml
new file mode 100644
index 000000000..6ed101253
--- /dev/null
+++ b/app/src/main/res/values-sl-rSI/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Zaradi varnosti v nastavitvah FTP/FTPS/SFTP uporabite edinstveno geslo z najmanj 12 znaki.
+
diff --git a/app/src/main/res/values-sr-rRS/ftp_security.xml b/app/src/main/res/values-sr-rRS/ftp_security.xml
new file mode 100644
index 000000000..3344dd326
--- /dev/null
+++ b/app/src/main/res/values-sr-rRS/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Ради безбедности користите јединствену лозинку од најмање 12 знакова у FTP/FTPS/SFTP подешавањима.
+
diff --git a/app/src/main/res/values-sr-rSP/ftp_security.xml b/app/src/main/res/values-sr-rSP/ftp_security.xml
new file mode 100644
index 000000000..5ec12ac1c
--- /dev/null
+++ b/app/src/main/res/values-sr-rSP/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Radi bezbednosti koristite jedinstvenu lozinku od najmanje 12 znakova u FTP/FTPS/SFTP podešavanjima.
+
diff --git a/app/src/main/res/values-sr/ftp_security.xml b/app/src/main/res/values-sr/ftp_security.xml
new file mode 100644
index 000000000..3344dd326
--- /dev/null
+++ b/app/src/main/res/values-sr/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Ради безбедности користите јединствену лозинку од најмање 12 знакова у FTP/FTPS/SFTP подешавањима.
+
diff --git a/app/src/main/res/values-sv-rSE/ftp_security.xml b/app/src/main/res/values-sv-rSE/ftp_security.xml
new file mode 100644
index 000000000..0de62dad6
--- /dev/null
+++ b/app/src/main/res/values-sv-rSE/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Använd av säkerhetsskäl ett unikt lösenord på minst 12 tecken i FTP/FTPS/SFTP-inställningarna.
+
diff --git a/app/src/main/res/values-tr-rTR/ftp_security.xml b/app/src/main/res/values-tr-rTR/ftp_security.xml
new file mode 100644
index 000000000..fc3f13e3b
--- /dev/null
+++ b/app/src/main/res/values-tr-rTR/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Güvenlik için FTP/FTPS/SFTP ayarlarında en az 12 karakterli benzersiz bir parola kullanın.
+
diff --git a/app/src/main/res/values-uk-rUA/ftp_security.xml b/app/src/main/res/values-uk-rUA/ftp_security.xml
new file mode 100644
index 000000000..e9b01fd24
--- /dev/null
+++ b/app/src/main/res/values-uk-rUA/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Для безпеки використовуйте в налаштуваннях FTP/FTPS/SFTP унікальний пароль довжиною щонайменше 12 символів.
+
diff --git a/app/src/main/res/values-vi-rVN/ftp_security.xml b/app/src/main/res/values-vi-rVN/ftp_security.xml
new file mode 100644
index 000000000..071d26542
--- /dev/null
+++ b/app/src/main/res/values-vi-rVN/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ Để bảo mật, hãy dùng mật khẩu riêng biệt dài ít nhất 12 ký tự trong cài đặt FTP/FTPS/SFTP.
+
diff --git a/app/src/main/res/values-zh-rCN/ftp_security.xml b/app/src/main/res/values-zh-rCN/ftp_security.xml
new file mode 100644
index 000000000..873108618
--- /dev/null
+++ b/app/src/main/res/values-zh-rCN/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ 为确保安全,请在 FTP/FTPS/SFTP 设置中使用至少 12 个字符的唯一密码。
+
diff --git a/app/src/main/res/values-zh-rTW/ftp_security.xml b/app/src/main/res/values-zh-rTW/ftp_security.xml
new file mode 100644
index 000000000..de98d8f34
--- /dev/null
+++ b/app/src/main/res/values-zh-rTW/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ 為確保安全,請在 FTP/FTPS/SFTP 設定中使用至少 12 個字元的專用密碼。
+
diff --git a/app/src/main/res/values/ftp_security.xml b/app/src/main/res/values/ftp_security.xml
new file mode 100644
index 000000000..0ea6f3dbc
--- /dev/null
+++ b/app/src/main/res/values/ftp_security.xml
@@ -0,0 +1,4 @@
+
+
+ For security, use a unique password with at least 12 characters in FTP/FTPS/SFTP settings.
+