04. 시큐어코딩

시큐어코딩(28) - Missing Authentication for Critical Function

김덕환 2017. 12. 1. 13:59
반응형

1. 정의


적절한 인증 없는 중요기능 허용 (Missing Authentication for Critical Function)


적절한 인증과정이 없이 중요정보(계좌이체 정보, 개인정보 등)를 열람(또는 변경)할 때 발생하는 보안약점이다. 



2. 해결방법


- 클라이언트의 보안검사를 우회하여 서버에 접근하지 못하도록 한다. 

- 중요한 정보가 있는 페이지는 재인증이 적용되도록 설계하여야 한다.(은행 계좌이체 등)

- 안전하다고 확인된 라이브러리나 프레임워크를 사용한다. 즉 OpenSSL 이나 ESAPI 의 보안 기능을 사용한다. 



3. 예제


========================== 안전하지 않은 코드의 예 ==========================


public void sendBankAccount(String accountNumber,double balance)

{

BankAccount account = new BankAccount();

account.setAccountNumber(accountNumber);

account.setToPerson(toPerson);

account.setBalance(balance);

AccountManager.send(account);

}


============================================================================


위의 예제는 재인증을 거치지 않고 계좌 이체를 하고 있다. 



============================== 안전한 코드의 예 =============================


public void sendBankAccount(HttpServletRequest request, HttpSession session, String accountNumber,double balance)

{

// 재인증을 위한 팝업 화면을 통해 사용자의 credential을 받는다.

String newUserName = request.getParameter("username");

String newPassword = request.getParameter("password");

if ( newUserName == null || newPassword == null )

{

throw new MyEception("데이터오류");

}


// 세션으로부터 로긴한 사용자의 credential을 읽는다. 

String password = session.getValue("password");

String userName = session.getValue("username");


// 재인증을 통해서 이체여부를 판단한다.

if ( isAuthenticatedUser() && newUserName.equal(userName) && newPassword.equal(password) )

{

BankAccount account = new BankAccount();

account.setAccountNumber(accountNumber);

account.setToPerson(toPerson);

account.setBalance(balance);

AccountManager.send(account);

}

}


============================================================================



위의 코드처럼 인증을 받은 사용자만이 다시 재인증을 거쳐 계좌 이체가 가능하도록 한다. 

반응형