item4 / worst-php-code

DO NOT WRITE PHP CODE LIKE THIS
Other
14 stars 0 forks source link

Worst PHP Code

본 저장소의 코드는 어떻게 하면 PHP 코드가 취약하고 열악해지는지 연구하는 저장소입니다. 본 저장소는 추후 제 개인 기술 블로그에 연구 게시물을 작성할 때 활용할 예정입니다. 간단한 회원가입 및 로그인을 예시로 들어 사용합니다.

How?

register_global 등의 PHP의 나쁘고 오래된 기능을 최대한 활용한 코드를 작성합니다. 이렇게 작성된 코드는 최악이라고 부를 만 할 것입니다. 하지만 현실에는 이런 느낌의 나쁜 코드가 많이 퍼져있겠죠.

그리고 그 코드들을 이슈별로 공략합니다. 가령 register_global의 경우는 해당 기능을 사용하지 않는 방법을 점진적으로 소개합니다. 최종적으로 수선이 완료된 코드는 PHP의 나쁘고 오래된 기능들이 제외되어 있을 것입니다.

Branches

FAQ

본 저장소는 PHP를 폄하하는 것이 목적입니까?

아니오

본 저장소에 예시로 나온 나쁜 코드는 누구나, 어떤 언어를 쓰건 재현할 수 있는 코드입니다.

그럼 왜 PHP입니까?

이유는 두 가지 있습니다.

  1. 안타깝게도 이런 형식의 나쁜 코드가 PHP에 가장 많이 보급되어 있습니다.
  2. 언어에 대한 지식 없이 보기에 가장 무난한 언어입니다.

이 소스는 실제로 동작합니까?

worst branch의 코드는 작성만 하고 실행해보지 않았습니다. 따라서 동작이 보장되지 않습니다. 애초에 목적이 최악의 소스의 구성을 보여드리는 것이기에 동작할 필요가 없다고 생각합니다.

clean branch의 코드는 완성 후 동작검증을 해볼 예정입니다.

최악의 코드를 만든다면서 왜 하나의 컨벤션을 따르듯 보이나요?

이 저장소의 목적은 몇몇 코드의 위험성을 보여주는 것이지 엉망진창 정리되지 않은 상태의 코드로 독자를 괴롭히는 것이 아닙니다. 무엇보다, 두 개 이상의 컨벤션을 혼용해가면서 개발할 정도로 큰 코드도 아니고, 그렇게 할 수 있을 정도로 저는 컨벤션 파괴자가 아닙니다. 따라서 가급적 PSR-2를 지키는 코드를 사용하도록 했습니다. 다만 PHP 개발에 있어서 <?<?php 중 어느쪽을 사용하는가 여부와 ?>의 사용 여부는 끼치는 영향이 크다고 생각하여 고의적으로 PSR-2를 위반하고 <??>를 사용하기로 했습니다.

최악의 코드를 만든다면서 왜 인코딩이 UTF-8인가요?

좀 더 현실적으로 만드려면 파일 인코딩을 EUC-KR등을 써야했겠지만 그러면 GitHub에서 보기 껄끄러워집니다.

왜 더 많은 보안 취약점을 만들지 않나요?

이 저장소의 목적은 보안 취약점 만드는 방법의 나열이 아닙니다. 제가 여태껏 많이 봐왔던 나쁜 코드 중 취약점을 소개하는 정도만 할 예정입니다.

DB 테이블 소스도 알려주세요

싫어요

저는 이 소스가 실제로 사용되는걸 바라지 않습니다. 그냥 예시로만 참고해주세요.

왜 개선을 위해 Framework을 사용하지 않나요?

저도 가능하다면 Laravel로 개선을 하면 좋을 것 같다고 생각하지만 그게 불가능한 환경의 독자도 많을 것이라고 생각하기에 Framework은 일체 사용하지 않습니다.

이 코드를 학교 과제로 제출해도 됩니까?

교수님이 퍼와도 된다고 하셨다면 상관 없습니다만 저작권 명시를 제거하지 마십시오. (제 정신이라면 worst 코드만 퍼 가진 않으시겠죠)

이 코드를 상업적으로 사용해도 됩니까?

역시 상관 없습니다만 저작권 명시를 제거하지 마십시오. (제 정신이라면 worst 코드만 퍼 가진 않으시겠죠)

AGPL이 뭡니까?

이 문서를 참고하세요.

License

AGPL 3 or later