275
19
장
보안 코드 리뷰
없을 때 발생한다. 이 안티패턴은 오래된 웹 애플리케이션에서 주로 나타나지만 오늘날 모놀리
식 애플리케이션에서 여전히 찾아볼 수 있다.
안전한 애플리케이션은 클라이언트와 서버가 독립적으로 개발되어야 하며 그 둘은 미리 정의
된 데이터 포맷과 네트워크 프로토콜을 통해 네트워크상에서 통신한다.
클라이언트와 서버 코드가 깊이 결합된 애플리케이션의 예로 인증 로직을 포함하는
PHP
템플
릿 코드가 분리되지 않아서 익스플로잇하기 쉬운 것을 들 수 있다. 모듈이 네트워크 요청의 결
과를 읽는 대신
HTML
코드를 회송하며, 여기에는 폼 데이터가 포함된다 (예를 들어 인증을 다
룰 때 ). 그러면 서버는
HTML
코드를 파싱하여
HTML
코드와 인증 로직에 스크립트 실행이
나 매개변수 변조가 없음을 확인해야 한다.
클라이언트/서버 애플리케이션이 완전히 분리된 경우 서버는
HTML
데이터의 구조와 내용에
대해 아무런 책임이 없다. 서버는
HTML
을 거부하고 미리 정의된 데이터 전송 포맷을 사용한
인증 페이로드만 수용한다.
분산 애플리케이션에서 각 모듈은 고유한 보안 메커니즘에 대한 책임을 더 적게 진다. 한편 클
라이언트와 서버 코드가 결합된 모놀리식 애플리케이션은 여러 언어에 대해 보안 메커니즘을
고려해야 하며 수신한 데이터가 미리 정의된 한 가지 방식으로 포맷된 것이 아니라 여러 가지
방식으로 포맷되어 있을 수 있음을 고려해야 한다.
결론적으로 관심사 분리
separation
of
concerns
는 공학적 관점에서뿐만 아니라 ...