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