오늘 소개할 빌런은 extract 되시겠다
이게 뭐냐면 1995년에 라스무스가 php 만들었을때 이야기.
라스무스는 걍 url 에서 입력값 들어오는거 체크가 무지 귀찮았음
그래서 하나 생각한것이. global register 라는걸 생각하게됨
그냥 board.php/free?num=1 이라는 주소가 있으면
php 에 요청하면 php 는 num 이라는 변수를 만들어주는거임
코딩할때 신나게 막코딩함
그리고 PHP 에는 7.0 까지 변수를 초기화하지 않아도 되는 특징이 있었고
그시절에는 로그에 경고 한줄 찍 싸고 땡이였음.
로그 찍: undefined variable $num ( $num 변수는 초기화 되지 않았습니다.)
근데 뭐가문제냐? 이 두가지가 환장의 콜라보를 하면??
만약에... .... 초기화를 하지 않고 그냥 쓰는 변수가 있다???
근데 그게 중요한체크포인트다???
바로 사고 발생 당첨 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
여튼 워드프레스에는 많은 사고가있었음
그누보드도 마찬가지였음
PHP 가 라스무스의 손을 떠난지 10년뒤의 PHP 5.4 에는 이 무지막지한 기능을 없애기로함
php 의 설정 ini 에서 더이상 register_global 옵션이 사라지게됨
워드프레스는 그걸 받아들이고 서드파티 제작자들에게 공지를 때림 우리앞으로 그런거 지원안해줌~~
근데 애들이 잔머리 굴림 ext//ract() 함수를 이용해서 사라진기능이랑 똑같은 것을 재현해버림
ext//ract() 는 전달한것을 변수로 만들어주는 함수임
이걸 써서 get, post , 서버정보를 모두 풀어버리는 꼼수를 각각 박아두었고
// 아 디씨가 이 함수들 취약점알고 글에도 못쓰게 막아놨네
웃긴건 이 함수의 경고문은 사람들이 남용하기 시작한뒤에 생김

Import variables into the current symbol table from an array
www.php.net
그누보드는 이걸 코어에 그대로 박음 common.php 에 있음.
그래서 어디서 왔는지 전혀 알수없는 전역변수 난립이 지속됨
끔찍.
아 디시에서 php 취약점있을까봐 함수이름도 제대로 못적게 하네
나한테 슬쩍알려줘봐
저거만 없어도 스트레스받을거 10%는 줄어든다고봄
파라미터 체크는 넣어야겠노 이기 난 순수황흐프파다 이기