테마 파일의 직접 액세스를 제한해야합니까?


31

때때로 다음과 같은 스 니펫 테마를 실행했습니다.

if ( ! defined('ABSPATH')) exit('restricted access');

테마의 일부 (모두?) PHP 파일의 시작 부분에 있으며 사악한 소스에 의한 파일의 직접 액세스를 방지해야합니다.

나는 이것이 Twenty Ten 또는 11에 포함되어 있지 않으며 공식 WordPress 문서에서 권장되는 것을 본 적이 없습니다. 그것은 나에게 좋은 생각처럼 보이지만 보안을 판단하기에 충분한 보안을 알지 못하고 Google에서 많이 찾을 수 없습니다.

이것이 나의 커스텀 테마에 필요한 것입니까? 그렇다면 모든 PHP 파일 또는 일부 파일에 있어야합니까?


7
후기 독자들을 위해, 이것은 더 짧고 더 훌륭하게 쓰여질 수 있습니다 :defined('ABSPATH') OR exit;
kaiser

또는 더 짧음 : defined('WPINC') ? : die();: P
Tim Elsass

또한 오류 로그에서 정의되지 않은 함수에 대한 PHP 오류를 보지 않기 위해 이와 같은 코드를 넣을 가치가 있는지 궁금합니다. 봇은 때때로 이러한 파일을 직접 누르는 것처럼 보이고 WP 부트 스트랩이로드되지 않았기 때문에 '정의되지 않은 함수 query_posts ()에 호출'과 같은 오류가 발생합니다.
Matt Keys

답변:


26

일반적으로 필요하지 않습니다. 그러나… 적어도 하나의 엣지 케이스가 있습니다.

  • 테마 파일이 템플릿 부분 인 경우
  • 호출 컨텍스트 (부모 파일)의 전역 변수를 사용 하고 있습니다.
  • register_globals의가 있다 on,
  • 그리고 그것은 단지 보안 검사없이 이러한 변수를 사용하고 있습니다 ...

… 공격자는이 파일을 호출 GET하거나 누락 된 변수를 설정 하거나 POST테마 파일로 인쇄 할 수 있습니다. 그리고이 보안 문제는.

따라서 가장 좋은 옵션은 예제와 같은 컨텍스트 검사가 아니라 좋은 코드입니다. 전역 변수를 피하고 인쇄하기 전에 내용을 확인하십시오.

어떤 경우에는 누군가 다른 사람이 내 코드를 사용하고 보안을 염두에 두지 않고 변경한다고 생각할 때 컨텍스트 확인을 추가합니다. 아프지 않습니다.


템플릿 부분에 여전히 PHP 치명적인 오류를 발생시키는 함수 호출이 하나 이상 포함되어있는 경우이 시나리오가 여전히 가능합니까?
Chris_O

@Chris_O 모양의 순서에 따라 다릅니다.
fuxia

파일 호출간에 전역 변수를 사용하지 않는 또 다른 이유에 대해 이해하고 완전히 동의합니다.
Chris_O

1
항상 미안보다 안전하는 것이 가장 좋습니다. 너무 많은 보안은 해칠 수 없습니다.
Sean Berg

2
모든 것을 올바르게하면 필요하지 않은 코드를 사용해서는 안됩니다. 이 질문은 코드를 따르기가 더 어렵다는 증거입니다.
fuxia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.