차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
guide:android_개발_보안_가이드 [2013/11/22 05:55] 121.140.124.172guide:android_개발_보안_가이드 [2024/04/04 05:12] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +===== Android 보안 개발 가이드 =====
 +
 ===== 1절. 입력 데이터 검증 및 표현 ===== ===== 1절. 입력 데이터 검증 및 표현 =====
 사용자의 입력을 검증없이 그대로 받아들여 사용하면 많은 보안위협에 노출되게 된다. 해당 보안취약점을 예방하기 위해서는 유효한 입력데이터만 허용할 수 있도록 코딩하는 것이 좋으며, 부득이한 경우 입력값을 검증하여 검증된 데이터만 허용하도록 코딩하여 취약점을 제거해야 한다 사용자의 입력을 검증없이 그대로 받아들여 사용하면 많은 보안위협에 노출되게 된다. 해당 보안취약점을 예방하기 위해서는 유효한 입력데이터만 허용할 수 있도록 코딩하는 것이 좋으며, 부득이한 경우 입력값을 검증하여 검증된 데이터만 허용하도록 코딩하여 취약점을 제거해야 한다
줄 210: 줄 212:
 6: InputStream in = socket.getInputStream(); 6: InputStream in = socket.getInputStream();
 7: OutputStream out = socket.getOutputStream(); 7: OutputStream out = socket.getOutputStream();
-8: 주석문구 : Read from in and write to out...+8: // Read from in and write to out...
 9: in.close(); 9: in.close();
 10: out.close(); 10: out.close();
줄 226: 줄 228:
 7: InputStream in = socket.getInputStream(); 7: InputStream in = socket.getInputStream();
 8: OutputStream out = socket.getOutputStream(); 8: OutputStream out = socket.getOutputStream();
-9: 주석문구 : Read from in and write to out...+9: // Read from in and write to out...
 10: in.close(); 10: in.close();
 11: out.close(); 11: out.close();
줄 545: 줄 547:
 1: …… 1: ……
 2: public int factorial(int n) { 2: public int factorial(int n) {
-3: 주석문구 재귀 호출이 조건문/반복문 블럭 외부에서 일어나면 대부분 무한 재귀를 유발한다.+3: // 재귀 호출이 조건문/반복문 블럭 외부에서 일어나면 대부분 무한 재귀를 유발한다.
 4: return n * factorial(n - 1); 4: return n * factorial(n - 1);
 5: } 5: }
줄 618: 줄 620:
 9: conn = datasource.getConnection(); 9: conn = datasource.getConnection();
 10: } catch (SQLException e) { 10: } catch (SQLException e) {
-11: 주석문구 : catch 블록이 비어있음+11: // catch 블록이 비어있음
 12: } catch (NamingException e) { 12: } catch (NamingException e) {
-13: 주석문구 : catch 블록이 비어있음+13: // catch 블록이 비어있음
 14: } 14: }
 15: return conn; 15: return conn;
줄 638: 줄 640:
 9: conn = datasource.getConnection(); 9: conn = datasource.getConnection();
 10: } catch (SQLException e) { 10: } catch (SQLException e) {
-11: 주석문구 : Exception catch이후 Exception에 대한 적절한 처리를 해야 한다.+11: // Exception catch이후 Exception에 대한 적절한 처리를 해야 한다.
 12: if ( conn != null ) { 12: if ( conn != null ) {
 13: try { 13: try {
줄 647: 줄 649:
 18: } 18: }
 19: } catch (NamingException e) { 19: } catch (NamingException e) {
-20: 주석문구 : Exception catch이후 Exception에 대한 적절한 처리를 해야 한다.+20: // Exception catch이후 Exception에 대한 적절한 처리를 해야 한다.
 21: if ( conn != null ) { 21: if ( conn != null ) {
 22: try { 22: try {
줄 677: 줄 679:
 2: public void f(boolean b) { 2: public void f(boolean b) {
 3: String cmd = System.getProperty("cmd"); 3: String cmd = System.getProperty("cmd");
-4: 주석문구 :  cmd가 null인지 체크하지 않았다.+4: //  cmd가 null인지 체크하지 않았다.
 5: cmd = cmd.trim(); 5: cmd = cmd.trim();
 6: System.out.println(cmd); 6: System.out.println(cmd);
줄 688: 줄 690:
 2: public void f(boolean b) { 2: public void f(boolean b) {
 3: String cmd = System.getProperty("cmd"); 3: String cmd = System.getProperty("cmd");
-4: 주석문구 : cmd가 null인지 체크하여야 한다.+4: // cmd가 null인지 체크하여야 한다.
 5: if (cmd != null) { md = cmd.trim(); 5: if (cmd != null) { md = cmd.trim();
 6: System.out.println(cmd); 6: System.out.println(cmd);
줄 708: 줄 710:
 === 다. 예제 === === 다. 예제 ===
 <code Java |안전하지 않은 코드 예제 - Java> <code Java |안전하지 않은 코드 예제 - Java>
-1: 주석문구 : private 인 배열을 public인 메소드가 return한다+1: // private 인 배열을 public인 메소드가 return한다
 2: private String[] colors; 2: private String[] colors;
 3: public String[] getColors() { return colors; } 3: public String[] getColors() { return colors; }
줄 716: 줄 718:
 <code Java|안전한 코드 예제 - Java> <code Java|안전한 코드 예제 - Java>
 1: private String[] colors; 1: private String[] colors;
-2: 주석문구 : 메소드를 private으로 하거나, 복제본 반환, 수정하는 public 메소드를 별도로 만든다.+2: // 메소드를 private으로 하거나, 복제본 반환, 수정하는 public 메소드를 별도로 만든다.
 3: public void onCreate(Bundle savedInstanceState) { 3: public void onCreate(Bundle savedInstanceState) {
 4: super.onCreate(savedInstanceState); 4: super.onCreate(savedInstanceState);
줄 744: 줄 746:
 <code Java |안전하지 않은 코드 예제 - Java> <code Java |안전하지 않은 코드 예제 - Java>
 1: …… 1: ……
-2: 주석문구 : userRoles 필드는 private이지만, public인 setUserRoles()를 통해 외부의 배열이 할당되면, 사실상 public 필드가 된다.+2: // userRoles 필드는 private이지만, public인 setUserRoles()를 통해 외부의 배열이 할당되면, 사실상 public 필드가 된다.
 3: private String[] userRoles; 3: private String[] userRoles;
 4: 4:
줄 756: 줄 758:
 <code Java|안전한 코드 예제 - Java> <code Java|안전한 코드 예제 - Java>
 1: …… 1: ……
-2: 주석문구 : 객체가 클래스의 private member를 수정하지 않도록 한다.+2: // 객체가 클래스의 private member를 수정하지 않도록 한다.
 3: private String[] userRoles; 3: private String[] userRoles;
 4: 4:
줄 782: 줄 784:
 3: try { g(); } 3: try { g(); }
 4: catch (IOException e) { 4: catch (IOException e) {
-5: 주석문구 : 예외 발생시 printf(e.getMessage())를 통해 오류 메시지 정보가 유출된다.+5: // 예외 발생시 printf(e.getMessage())를 통해 오류 메시지 정보가 유출된다.
 6: System.err.printf(e.getMessage()); 6: System.err.printf(e.getMessage());
 7: } 7: }
줄 796: 줄 798:
 3: try { g(); } 3: try { g(); }
 4: catch (IOException e) { 4: catch (IOException e) {
-5: 주석문구 : end user가 볼 수 있는 오류 메시지 정보를 생성하지 않아야 한다.+5: // end user가 볼 수 있는 오류 메시지 정보를 생성하지 않아야 한다.
 6: System.err.println(" IOException Occured" ); 6: System.err.println(" IOException Occured" );
 7: } 7: }
줄 806: 줄 808:
 === 라. 참고 문헌 === === 라. 참고 문헌 ===
 가급적이면 공격의 빌미가 될 수 있는 오류와 관련된 상세한 정보는 최종 사용자에게 노출하지 않는다. 가급적이면 공격의 빌미가 될 수 있는 오류와 관련된 상세한 정보는 최종 사용자에게 노출하지 않는다.
-