웹기반 애플리케이션을 개발할 때 사용자들에게 포함 (include) 프로그램과 설정 파일과 같은 파일들을 접근 또는 읽기를 허용하지 마라. 이 데이타는 시스템에 침입하는데 충분한 정보 (예, 패스워드) 를 제공할 수도 있다. 이 지침은 때때로 다른 유형의 애플리케이션에도 또한 적용됨을 주목해라. 이를 위해 취할 수 있는 몇몇 행동들이 있다:
포함/설정 파일들을 웹 문서 루트의 외부에 두어라 (웹 서버가 이러한 파일들을 절대로 제공할 수 없도록)
포함 파일들을 텍스트로 제공하지 않도록 웹 서버를 설정해라. 예를 들어 아파치를 사용한다면 .inc 파일들에 핸들러 또는 액션을 추가할 수 있다.
포함 파일들을 .htaccess 를 사용해 보호된 디렉토리에 두고 이들을 제공하지 않을 파일들로 지정해라.
파일들에 대한 접근을 거절하기 위해 필터를 사용해라. 아파치 경우 다음과 같다:
<Files ~ "\.phpincludes"> Order allow,deny Deny from all </Files> |
파일 이름과 일치시키기 위해 완전한 정규 표현이 필요하다면 아파치에서는 FilesMatch 지시를 사용해라.
포함 파일이 서버가 분석할 확실한 스크립트 파일이라면 반드시 이 파일이 사용자가 제공한 매개변수에 따라 행동하지 않으며 안전하게 설계되었는지 확인해라.
이러한 접근 방법들은 파일들이 world-readable 이라면 이들이 있는 디렉토리에 접근할 수 있는 사용자들로부터는 보호하지 않을 것이다. 단지 웹 서버의 uid/gid 만 이러한 파일들을 읽을 수 있도록 허가권을 변경할 수는 있다. 그러나 이 접근 방법은 사용자가 웹 서버에게 자신의 스크립트를 실행시키도록 할 수 있다면 효과가 없을 것이다 (사용자가 단지 파일에 접근하는 스크립트를 작성할 수 있다). 기본적으로 사이트가 신뢰되지 않은 사람들과 공유되는 서버에서 호스팅되고 있다면 시스템을 안전하게 하는 것은 어렵다. 한가지 접근 방법은 각자가 다른 허가권을 갖는 다중 웹 서버 프로그램을 실행시키는 것인데 이는 더욱 향상된 보안을 제공하지만 실제로 매우 힘들다. 다른 접근 방법은 이러한 파일들을 각자의 uid/gid 에 의해서만 읽을 수 있도록 설정하여 서버가 ``각자"의 허가권으로 스크립트를 실행시키게 하는 것이다. 이 두번째 방법은 자체적으로 문제를 갖고 있는데 서버의 어떤 부분들이 루트 권한을 가져야 하며 스크립트가 필요 이상의 권한을 가질 수도 있다는 것이다.