2010-12-14 3 views
0

왜 $ _SERVER [ 'PHP_SELF']는 한 인스턴스에서 /test/foo.bar 및 다른 인스턴스 (같은 PHP 스크립트에서 실행)로 파일 이름을 반환하는 이유는 무엇입니까? //test/foo.bar (이중 선행 슬래시가 있음)?

form.php는 login.php에 $ _GET을 보냅니다.

$page = filter_var($_SERVER['SCRIPT_NAME'], FILTER_SANITIZE_STRING); 

(를 또한 내가 요구에 그것을 복제 할 수 없습니다,를.)

+0

일부 코드를 표시 할 수 있습니까? 변수 자체가 바뀔 가능성은 거의 없습니다. –

답변

1

나는 코드 어딘가에 링크를 구축하고 있다고 생각한다. (어쩌면 다른 누군가가 어딘가에 슬래시를 입력했을 수도있다). 당신은이 라인을 따라 몇 가지 코드가 있습니다 : 서버 이름이 제거 될 때

function buildLink($site, $relPath, $text) { 
    return "<a href=\"$site/$relPath\">$text</a>"; 
} 

$site 경우는 어떤 경우에 후행 슬래시로 전달됩니다, 당신은 최고의 이중 슬래시로 끝날 것입니다. 또는 절대 경로가 전달 된 경우 추가 슬래시는 표시되는 페이지에는 영향을 미치지 않지만 구문 분석 된 URL에는 계속 표시됩니다.

+0

여분의 슬래시를위한 수세. 고마워. – tgrass

+0

발견. 도와 주셔서 감사합니다. – tgrass

1

$_SERVER['PHP_SELF']의 값은 실제 요청에 따라 달라집니다 foo.bar 포함

header ('Location: test/foo.bar') 

에 login.php 리디렉션 클라이언트가 보냈습니다. Apache는 디렉토리 이름 사이에 여러 개의 슬래시를 허용하므로 http://example/foo.phphttp://example//foo.php과 동일하게 처리합니다. 둘 다 foo.php을 호출하지만 요청 URI에는 클라이언트가 요청한 내용이 모두 포함됩니다.

스크립트에서 슬래시가 하나만 필요하면 수동으로 나머지를 제거해야합니다.

+0

감사합니다. 왜 같은 클라이언트 컴퓨터에있는 동일한 브라우저가 하나의 파일을 요구 한 다음 두 개의 슬래시를 요구하는지 생각해보십시오. – tgrass

+1

@tgrass - 거기에 도착하기 위해 따라 오는 링크를보세요. '$ _SERVER [ 'HTTP_REFERER']'의 값을 PHP_SELF와 함께 덤핑하면 문제를 찾을 수 있습니다. –

0

$ _SERVER [ 'SCRIPT_NAME']을 (를) 사용해 볼 수 있습니다. PHP_SELF는 몇 가지 유형의 공격에 취약하므로주의 할 것. 사용자 입력으로 취급해야합니다.

+0

SCRIPT_NAME으로 대체되었으며 여전히 두 개의 선행 슬래시를 반환합니다. – tgrass

+0

더 많은 코드가 필요합니다. 여기 뭔가 놀고있어. – profitphp

관련 문제