본문 바로가기
04. 시큐어코딩

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

by 김덕환 2017. 12. 1.
반응형

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);

}

}


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



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

반응형