2015-01-22 7 views
0

При разработке веб-сайта вы обычно проверяете как на стороне клиента, так и на стороне сервера (поскольку пользователь может просто просмотреть страницу и изменить ее вокруг html/javascript).Где должна выполняться проверка правильности ввода для приложения для Android?

Но при разработке приложения для Android, возможно ли, чтобы пользователь мог манипулировать интерфейсным кодом?

Я чувствую, что ответ на это не так, поскольку Java не является интерпретируемым языком, например javascript (это означает, что пользователь не может видеть исходный код, чтобы манипулировать им). Но в то же время Java можно декомпилировать.

Я хочу быть на 100% уверенным, что я могу выполнить всю проверку на стороне клиента, вместо того, чтобы иметь дубликаты на стороне сервера.

+3

a/yes, вы можете доверять тому, что вы правильно проведете проверку на лицевой стороне * в приложении Android, но b/no, вы не можете выполнить проверку только на стороне клиента, потому что 1/вы можете когда-нибудь напишите другому клиенту, который не выполняет ту же проверку, и 2/вы можете столкнуться с запросами, не входящими в ваше приложение, но напрямую подделанными. – njzk2

+2

Кроме того, вы должны разработать приложение и сервер отдельно и протестировать их самостоятельно (что также означает проверку сервера на разные типы неправильных входов) – njzk2

+0

@njzk Я полностью не рассматривал возможность получения запросов извне приложения. Вау, это глазник. Похоже, мне нужно несколько повторных проверок с обеих сторон. Спасибо! – Kacy

ответ

0

Я бы рекомендовал валидацию при обработке ввода в приложении Android, как правило, в функции onClick кнопки формы.

emailEditText = (EditText) findViewById(R.id.editText_email); 
    passEditText = (EditText) findViewById(R.id.editText_password); 

    findViewById(R.id.btn_signup).setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      final String email = emailEditText.getText().toString(); 
      if (!isValidEmail(email)) { 
       emailEditText.setError("Invalid Email"); 
      } 

      final String pass = passEditText.getText().toString(); 
      if (!isValidPassword(pass)) { 
       passEditText.setError("Invalid Password"); 
      } 

     } 
    }); 
} 

// validating email id 
private boolean isValidEmail(String email) { 
    String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" 
      + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; 

    Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
    Matcher matcher = pattern.matcher(email); 
    return matcher.matches(); 
} 

// validating password with retype password 
private boolean isValidPassword(String pass) { 
    if (pass != null && pass.length() > 6) { 
     return true; 
    } 
    return false; 
} 

Я нашел регулярные выражения, чтобы быть лучшим способом сделать это.

Код на лицевой стороне нельзя использовать в андроиде, так как каждое приложение скомпилировано в apk (с устройства), а затем установлено на устройство и запускается. Однако может быть возможно изменить веб-трафик, поступающий и выходящий из устройства, но для этого требуется внедренное устройство, но простые стратегии безопасности, такие как использование https: и хорошо сделанный json, - это способ предотвратить это.

+0

Так что пользователь не может декомпилировать приложение и переустановить его на своем устройстве? Кроме того, я должен был быть более конкретным. Я просто хочу знать, следует ли проверять правильность на стороне клиента и на стороне сервера. Я не просил указать специальный код, где это сделать на стороне клиента. Я отредактирую свой вопрос, чтобы быть более ясным. – Kacy

+1

Когда я создаю Eclipse, он использует ProGuard для обфускации кода. Я полагаю, что на корневом устройстве пользователь может посмотреть на ваш apk и каким-то образом декомпилировать файлы .class в Java-код, но благодаря запутыванию байтового кода ProGuard код будет бессмысленным. НТН. –

+0

Конечно, проверка должна выполняться как на стороне клиента, так и на стороне сервера ... Это все, что вы просили? –

Смежные вопросы