나는 모든 요청을 방문자가 요청한 URL을보고 일치시킬 템플릿 파일이 있는지 확인하는 index.php 파일을 통해 리디렉션하고 있습니다.PHP pathinfo에 기반한 파일 - 보안 문제가 있습니까?
예를 들어, http://www.website.com/contact은 실제로 index.php 스크립트로 라우팅되며 /var/html/template/contact.tpl 파일이 있는지 확인하고 포함되어 있는지 확인해야합니다.
내 관심사는 보안 및 null 문자, 여분의 점 및 슬래시 등에 관한 것입니다. 어떤 종류의 필터가 아래 코드에 적용해야합니까? 아니면 pathinfo 및 디렉토리 접두사를 충분히 사용합니까? 분명히 나는 누군가가 악의적으로 지정된 템플릿 디렉토리 외부에 파일을 포함 할 수 없도록하고 싶다.
<?php
define ('TEMPLATES', '/var/html/templates');
$page = pathinfo ($_SERVER['REQUEST_URI'], PATHINFO_FILENAME);
if (file_exists (TEMPLATES . '/' . $page . '.tpl')) {
include (TEMPLATES . '/' . $page . '.tpl');
} else {
header ('HTTP/1.0 404 Not Found');
echo 'Sorry page not found';
}
?>
요청할 때마다 글로브 처리 하시겠습니까? 그다지 좋은 선택이 아닙니다. – Gumbo
당신 말이 맞아요 - 초고속 아니지만 더 많은 포인트를 보여 주었다. 내 답변의 첫 번째 문장은 내 권장 솔루션 것입니다. 프로덕션 환경에서 glob가 사용 되었다면 성능 향상을 위해'GLOB_NOSORT' 플래그를 사용하는 것이 좋습니다. – calcinai
답장을 보내 주셔서 감사합니다. 이전에는 일종의 "화이트리스트"를 제안대로 사용했지만 이상적으로는 새 페이지/템플릿이 만들어 질 때마다 화이트리스트를 업데이트하고 싶지 않습니다. – MrCarrot