728x90
PHPSchool을 검색해보았더니 제 책에 대한 질문이 하나 올라와 있더군요.
http://phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=279398

<?php

    $array = file('http://www.yahoo.com/');

    foreach($array as $line_num => $line){
        echo htmlspecialchars($line) . "<br>\n";
    }

?>

이 코드가 동작하지 않는 다는 것이었습니다. 제가 이미 설명을 했다고 생각하고 해당 부분에는 언급을 해두지 않았는데 다시 살펴보니 이에 대한 약간의 언급을 해 두는 것이 좋았을것 같네요. 116쪽 하단과 웹해킹 부분에 이와 관련된 말이 나와있습니다.

include를 통해서 외부 서버의 파일을 가져올 수 있습니다. 예를 들어 include 'http://naver.com'; 이라고 한다면 네이버의 메인 화면을 볼 수 있습니다. 간혹 이 방법을 통해 다른 서버의 PHP 문서 코드를 훔칠 수 있지 않을까 생각할 수 있습니다. 그러나 외부의 파일의 경우에는 PHP 문서일지라도 HTML 문서로 인식하여 가져옵니다. 외부 서버 내에 있는 PHP 문서의 소스 코드는 접근할 수 없기 때문에 외부의 PHP 문서를 include 하면 외부 서버의 웹 서버로부터 처리한 결과인 HTML 소스를 돌려받습니다. 그러나 원격 파일을 include 하는 경우 웹 해킹의 가능성이 있기 때문에 보안을 위해서 php.ini 파일의 allow_url_fopen 옵션을 비활성화 시키는 것이 좋습니다.

이 부분은 URL로 파일을 여는 모든 함수에 적용되는 말인데 마치 include에만 적용되는 것처럼 언급을 해둔것이 문제가 아니었나 싶습니다. 위의 문단에서 말하듯이 allow_url_fopen 옵션이 비활성화 되어 있으면 URL을 통해서 파일을 읽어올 수 없습니다. 그래서 위의 코드가 실행되지 않은 것이구요. 위에도 언급했지만 최근 보안의 이유로 URL을 통한 파일 읽기는 비활성화 하는 추세입니다.

그리고 해당 글의 답변에 매우 재치있는 덧글이 있어서 소개해 드립니다.



저도 입코딩님의 말씀을 보고 정말 "빵"터졌는데 잠시후 남의 일이 아니란 생각이 드니까 "씁쓸하구만~"하더이다.
728x90
복사했습니다!