보안/시큐어코딩

[시큐어코딩-15] 보안기능(1) 적절한 인증없는 중요기능 허용

오픈이지 2012. 10. 28. 15:03


발생원인


인증과정없이 주요 정보를 열람 또는 변경시 발생한다.


영향


권한 도용, 주요 정보 변조 가능



코드예



 안전하기 않은 코드의 예 - JAVA

public void sendBankAccount(String accountNumber,double balance) {

  BankAccount a ccount = new BankAccount();

  account.setAccountNumber(accountNumber);

  account.setToPerson(toPerson);

  account.setBalance(balance);

  AccountManager.send(account);

  ...

}


 이 예제 코드는 문맥상의 의미로 은행계좌에 대한 처리를 하면서 재인증을 거치지 않고 계좌이체를 하고 있다.



 안전한 코드의 예 - JAVA

// 재인증을 위한 팝업 화면을 통해 사용자의 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) )

{

    // 이체와 같은 중요한 작업을 수행한다.


 인증이 수행된 사용자만이 재인증을 거쳐 계좌이체가 가능하도록 작성한다.