본 저장소의 코드는 어떻게 하면 PHP 코드가 취약하고 열악해지는지 연구하는 저장소입니다. 본 저장소는 추후 제 개인 기술 블로그에 연구 게시물을 작성할 때 활용할 예정입니다. 간단한 회원가입 및 로그인을 예시로 들어 사용합니다.
register_global
등의 PHP의 나쁘고 오래된 기능을 최대한 활용한 코드를 작성합니다.
이렇게 작성된 코드는 최악이라고 부를 만 할 것입니다.
하지만 현실에는 이런 느낌의 나쁜 코드가 많이 퍼져있겠죠.
그리고 그 코드들을 이슈별로 공략합니다.
가령 register_global
의 경우는 해당 기능을 사용하지 않는 방법을 점진적으로 소개합니다.
최종적으로 수선이 완료된 코드는 PHP의 나쁘고 오래된 기능들이 제외되어 있을 것입니다.
아니오
본 저장소에 예시로 나온 나쁜 코드는 누구나, 어떤 언어를 쓰건 재현할 수 있는 코드입니다.
이유는 두 가지 있습니다.
worst branch의 코드는 작성만 하고 실행해보지 않았습니다. 따라서 동작이 보장되지 않습니다. 애초에 목적이 최악의 소스의 구성을 보여드리는 것이기에 동작할 필요가 없다고 생각합니다.
clean branch의 코드는 완성 후 동작검증을 해볼 예정입니다.
이 저장소의 목적은 몇몇 코드의 위험성을 보여주는 것이지 엉망진창 정리되지 않은 상태의 코드로 독자를 괴롭히는 것이 아닙니다.
무엇보다, 두 개 이상의 컨벤션을 혼용해가면서 개발할 정도로 큰 코드도 아니고, 그렇게 할 수 있을 정도로 저는 컨벤션 파괴자가 아닙니다.
따라서 가급적 PSR-2를 지키는 코드를 사용하도록 했습니다.
다만 PHP 개발에 있어서 <?
와 <?php
중 어느쪽을 사용하는가 여부와 ?>
의 사용 여부는 끼치는 영향이 크다고 생각하여 고의적으로 PSR-2를 위반하고 <?
와 ?>
를 사용하기로 했습니다.
좀 더 현실적으로 만드려면 파일 인코딩을 EUC-KR등을 써야했겠지만 그러면 GitHub에서 보기 껄끄러워집니다.
이 저장소의 목적은 보안 취약점 만드는 방법의 나열이 아닙니다. 제가 여태껏 많이 봐왔던 나쁜 코드 중 취약점을 소개하는 정도만 할 예정입니다.
싫어요
저는 이 소스가 실제로 사용되는걸 바라지 않습니다. 그냥 예시로만 참고해주세요.
저도 가능하다면 Laravel로 개선을 하면 좋을 것 같다고 생각하지만 그게 불가능한 환경의 독자도 많을 것이라고 생각하기에 Framework은 일체 사용하지 않습니다.
교수님이 퍼와도 된다고 하셨다면 상관 없습니다만 저작권 명시를 제거하지 마십시오. (제 정신이라면 worst 코드만 퍼 가진 않으시겠죠)
역시 상관 없습니다만 저작권 명시를 제거하지 마십시오. (제 정신이라면 worst 코드만 퍼 가진 않으시겠죠)
AGPL 3 or later