>php教程 >PHP开发 >PHP 보안을 강화하기 위해 PHP의 일부 서버 측 기능을 구성하십시오.

PHP 보안을 강화하기 위해 PHP의 일부 서버 측 기능을 구성하십시오.

PHP中文网
PHP中文网원래의
2016-12-05 11:19:581473검색

Shaun Clowes와 rfp는 이전에 프로그래밍 과정에서 PHP 및 CGI 프로그램이 직면한 문제와 애플리케이션 취약점을 통해 시스템을 돌파하는 방법을 자세히 소개했습니다. 이 기사에서는 PHP에 대한 지식을 살펴보겠습니다.
PHP 보안을 강화하기 위해 구성하는 서버측 기능입니다. CGI 스크립트를 작성할 때 다양한 보안 문제에 주의하고 사용자 입력을 엄격하게 필터링해야 하는데 어떻게 신발을 젖지 않고 해변을 걸을 수 있고, 참깨를 잃지 않고
먹을 수 있을까요? phpnuke 및 phpMyAdmin과 같은 유명한 프로그램에서도 심각한 실수가 발생했습니다. 문제는 나 같은 깡패들이 쓴 대본은 말할 것도 없고. 이제 우리는 얼마 전과 같이 PHP 스크립트에 심각한 문제가 있었다고 가정합니다. phpnuke가 PHP 스크립트를 업로드하는 데 큰 문제가 있습니다. 이러한 문제가 있는 경우 스크립트가 시스템을 통과하지 못하도록 서버를 어떻게 구성할 수 있습니까?

1. 컴파일 시 알려진 취약점 패치에 주의

4.0.5부터 PHP의 메일 기능에 5번째 매개변수가 추가되었으나 제대로 필터링되지 않아 PHP 애플리케이션을 만들 수 있습니다. safe_mode의 제한을 깨고 명령을 실행하세요. 따라서 4.0.5 및 4.0.6
을 사용하는 경우 컴파일하기 전에 PHP 소스 코드 패키지의 ext/standard/mail.c 파일을 수정하여 메일 기능의 다섯 번째 매개변수를 비활성화하거나 셸 문자를 필터링해야 합니다. mail.c 파일의 152번째 줄:
if (extra_cmd != NULL) {
뒤에 extra_cmd=NULL 또는 extra_cmd = php_escape_shell_cmd(extra_cmd); php를 수정한 다음 취약점을 패치했습니다.

2. php.ini 구성 파일 수정

PHP 배포 버전의 php.ini-dist를 기반으로 수정합니다.
1)오류 처리 및 로깅
오류 처리 및 로깅 섹션에서 몇 가지 설정을 지정할 수 있습니다. 첫 번째 발견:
display_errors = On
기본적으로 PHP는 오류 메시지 표시를 켭니다. 우리는 이를 다음과 같이 변경했습니다:
display_errors = Off

오류 표시를 끈 후 PHP 함수 실행 오류 정보가 더 이상 사용자에게 표시되지 않으므로 공격자가 오류 메시지에서 스크립트의 물리적 위치와 기타 유용한 정보를 알아내는 것을 어느 정도 방해하여 적어도 공격자의 블랙박스 감지에 특정 장애물을 만듭니다. . 이러한 오류 메시지는 지정된 파일에 기록되도록 한 후 다음을 수정할 수 있습니다.
log_errors = Off
다음으로:
log_errors = On

지정된 파일에서 다음 줄을 찾습니다:
;error_log = filename
이전 주석을 제거하고 파일 이름을 지정된 파일로 변경합니다(예:
/usr/local/apache/logs/php_error.log

error_log = /usr/local/apache/logs/php_error.log
이렇게 하면 모든 오류가 php_error.log 파일에 기록됩니다.

2)안전 모드

PHP의 safe_mode 기능은 많은 기능을 제한하거나 비활성화하여 PHP 보안 문제를 크게 해결할 수 있습니다. 안전 모드 섹션에서
safe_mode = Off
를 찾아 다음으로 변경합니다.
safe_mode = On

이렇게 하면 safe_mode 기능이 켜집니다. 시스템 명령을 실행할 수 있는 shell_exec() 및 ``와 같은 일부 기능은 금지되며, exec(), 시스템(), 패스스루(), popen()은 safe_mode_exec_dir에 지정된 디렉터리의 프로그램 실행으로 제한됩니다. 실제로 일부 명령이나 프로그램을 실행하려면 다음을 찾으십시오.
safe_mode_exec_dir =
다음과 같이 실행할 프로그램의 경로를 지정하십시오.
safe_mode_exec_dir = /usr/local/php/exec

그런 다음 사용하려는 프로그램을 /usr/local/php/exec 디렉토리에 복사하면 위와 같이 제한된 기능이 여전히 해당 디렉토리의 프로그램을 실행할 수 있습니다.

안전 모드에서 제한된 기능에 대한 자세한 내용은 주요 PHP 사이트의 지침을 참조하세요:
[url]http://www.php.net/manual/en/features.safe- mode.php[/url]

3) 비활성화_기능

일부 기능의 유해성에 대해 명확하지 않고 사용하지 않는 경우 해당 기능을 비활성화하면 됩니다. 다음 줄을 찾으세요:
disable_functions =
"=" 뒤에 비활성화할 기능을 추가하고, 여러 기능을 ","로 구분합니다.

3. httpd.conf 수정

php 스크립트 프로그램이 웹 디렉토리에서만 작동하도록 허용하는 경우 httpd.conf 파일을 수정하여 php의 작동 경로를 제한할 수도 있습니다. 예를 들어 웹 디렉토리가 /usr/local/apache/htdocs인 경우
httpd.conf:

에 다음 줄을 추가합니다. php_admin_value open_basedir /usr/local/apache/htdocs

이런 방식으로 스크립트가 /usr/local/apache/htdocs 이외의 파일을 읽으려고 하면 허용되지 않습니다.

에서는 다음과 같은 오류가 표시됩니다.
경고: open_basedir 제한이 적용되었습니다. 파일이 4행의 /usr/local/apache/htdocs/open.php에 있는 잘못된 디렉토리에 있습니다. 등.

4. PHP 코드를 컴파일합니다

Zend는 PHP에 큰 공헌을 했습니다. PHP4 엔진은 Zend를 사용하며 ZendOptimizer 및 ZendEncode와 같은 많은 PHP 향상 구성 요소도 개발했습니다. 최적화 도구 ZendOptimizer는 [url]http://www.zend.com[/url]에만 등록하면 무료로 사용할 수 있습니까?... 직선형 鸲 혼합 수염 가장자리는 항상 남쪽에서 낮습니다.?/a>

ZendOptimizer-1[1].1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz
ZendOptimizer-1 [1] .1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz
ZendOptimizer-1[1].1.0-PHP_4.0.5-Solaris-sparc.tar.gz
ZendOptimizer-1[1]. 1.0-PHP_4 .0.5-Windows-i386.zip


옵티마이저 설치는 매우 편리하며, 패키지에 자세한 설명이 나와 있습니다. UNIX 버전을 예로 들어, 운영 체제를 명확하게 확인하고 패키지에 있는 ZendOptimizer.so 파일을 /usr/local/lib
라고 가정하고 디렉터리에 추출한 다음 php.ini에 두 문장을 추가합니다. 🎜> zend_optimizer.optimization_level=15
zend_extension="/usr/local/lib/ZendOptimizer.so"

그렇습니다. phpinfo()를 사용하여 Zend 아이콘 왼쪽에 다음 텍스트를 확인합니다.
with Zend Optimizer v1.1.0, Copyright (c) 1998-2000, by Zend Technologies

그런 다음 최적화 프로그램은 성공적으로 연결되었습니다.
하지만 컴파일러 ZendEncode는 무료가 아닙니다. 여기 Ma Yong이 디자인한 [url]http://www.PHPEase.com[/url]이 있습니다. ... Mi Jiantao의 Kangmo胗?/a> [url]http://www.zend.com[/url] 라이센스 계약을 얻으려면 문의하세요.

PHP 스크립트가 컴파일된 후에는 스크립트의 실행 속도가 크게 증가합니다. 스크립트 파일에서는 왜곡된 문자만 볼 수 있으므로 공격자가 서버에서 스크립트 프로그램을 더 이상 분석하는 것을 방지할 수 있습니다. PHP 스크립트의 원본 일반 텍스트 저장된 비밀번호도 mysql 비밀번호와 같이 기밀로 유지됩니다. 하지만 서버 측에서 스크립트를 변경하는 것이 더 번거롭기 때문에 로컬에서 변경한 후 업로드하는 것이 좋습니다.


5. 파일 및 디렉토리에 대한 권한 설정

업로드 디렉토리를 제외하고 웹 디렉토리에 있는 다른 디렉토리 및 파일에 대한 권한은 none 사용자에게 허용되지 않아야 합니다. 권한. 그렇지 않으면 공격자가 홈페이지 파일을 수정할 수 있으므로 웹 디렉터리의 권한을 올바르게 설정해야 합니다. 또한 안전 모드에서 파일을 읽기 때문에 PHP 스크립트의 소유자는 루트가 아니어야 합니다. 읽은 파일의 소유자가 현재 실행 중인 스크립트의 소유자와 동일해야 읽을 수 있도록 기능이 제한됩니다. 그렇지 않으면 오류 표시가 켜져 있으면 다음과 같은 오류가 표시됩니다.

경고: 안전 모드 제한이 적용됩니다. uid가 500인 스크립트는 다음과 같습니다. uid 0이 소유한 /etc/passwd에 액세스할 수 없습니다. /usr/local/apache/htdocs/open.php 3행
이러한 방식으로 /etc/passwd 등과 같은 많은 시스템 파일을 읽는 것을 방지할 수 있습니다.

업로드 디렉터리 소유자와 업로드 스크립트도 동일하게 설정해야 합니다. 그렇지 않으면 안전 모드에서 오류가 발생하므로 주의하세요.

6. Mysql 시작 권한 설정


Mysql은 루트로 시작하지 않도록 주의해야 하며, 다른 mysqladm 사용자를 생성하는 것이 가장 좋습니다. /etc/rc.local과 같은 시스템 시작 스크립트에 문장을 추가할 수 있습니다.
su mysqladm -c "/usr/local/mysql/share/mysql/mysql.server start"

다음 시스템이 다시 시작되면 mysql 프로세스도 mysqladmin 사용자로 자동 시작됩니다.

7. 로그 파일 및 업로드 디렉터리 검토 및 검토

로그를 보는 것은 인간의 게으름과 관련이 많습니다. 이렇게 큰 로그 파일에서 공격 흔적을 찾는 것은 바늘을 찾는 것과 같습니다. 건초 더미가 있고 불가능할 수도 있습니다. 웹에서 업로드한 디렉터리의 파일도 자주 확인해야 하며, 프로그램에 문제가 있을 수 있으며 사용자가 스크립트를 실행하는 등 불법적인 파일을 업로드했을 수도 있습니다.

8. 운영체제 자체의 패치

마찬가지로, 시스템의 알려진 취약점을 패치하는 것은 시스템 관리자의 가장 기본적인 책임이자 최후의 방어선이기도 합니다.


위 구성 이후에는 난공불락이라고 할 수는 없지만 PHP 스크립트에 심각한 취약점이 있음에도 어느 정도 공격자의 테스트에 많은 어려움을 초래했습니다. 프로그램을 사용하면 공격자는 실질적인 파괴 결과를 초래할 수 없습니다.

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