PHP+MySQL+Apache는 매우 인기있는 웹 기술이라는 것은 분명합니다. 이 조합은 강력하고 확장 가능하며 여전히 무료입니다. 그러나 PHP의 기본 설정은 이미 온라인 상태 인 웹 사이트에 적합하지 않습니다. 아래에서는 기본 구성 파일을 수정하여 PHP 보안 정책을 향상시킬 수 있습니다!
0x01 : 원격 URL 파일 처리 기능을 비활성화합니다
파일의 룰 매개 변수를 수용하는 Fopen의 파일 처리 함수와 마찬가지로 (예 : fopen ( 'http : //www.yoursite.com'.'r')).이 기능은 원격 자원에 쉽게 액세스 할 수 있습니다. 그러나 이것은 매우 중요한 보안 위협입니다. 파일 기능을 제한하기 위해이 기능을 비활성화하는 것이 좋습니다. php.ini 파일에서 다음 수정을하십시오.
코드 사본은 다음과 같습니다.
allow_url_fopen = OFF
0x02 : 글로벌 변수 등록을 비활성화합니다
4.2.0 이전 버전에서 PHP는 글로벌 변수를 입력으로 사용했습니다. 이 기능을 register_globals라고합니다. 웹 애플리케이션에서는 공격자가 경우에 따라 전역 변수를 쉽게 운영 할 수 있기 때문에 많은 보안 문제가 발생했습니다. 다행히 4.2.0의 기능은 기본적으로 비활성화됩니다. 매우 위험합니다. 이 기능은 어떤 상황에서도 비활성화해야합니다. 일부 스크립트 에이 기능이 필요한 경우이 스크립트에 잠재적 인 보안 위협이 있습니다. 이 기능을 비활성화하려면 pnp.ini를 수정하십시오.
코드 사본은 다음과 같습니다.
register_globals = OFF
0x03 : 제한된 PHP의 읽기 및 쓰기 작업
많은 웹 개발 프로세스에서 PHP 스크립트는/var/www/htdocs/files와 같은 로컬 파일 시스템에 대한 작업을 읽고 써야합니다. 보안을 향상시키기 위해 로컬 파일의 읽기 및 쓰기 권한을 수정할 수 있습니다.
코드 사본은 다음과 같습니다.
Open_basedir =/var/www/htdocs/파일
0x04 : 포즈 제한
PHP 실행 시간 제한, 메모리 사용, 게시 및 업로드 데이터 제한은 최상의 전략이며 다음 구성을 수행 할 수 있습니다.
코드 사본은 다음과 같습니다.
max_execution_time = 30; 최대 스크립트 실행 시간
max_input_time = 60; 최대 시간은 입력을 구문 분석하는 데 소요되었습니다
memory_limit = 16m; 하나의 스크립트에서 사용되는 최대 메모리
upload_max_filesize = 2m; 최대 업로드 파일 크기
post_max_size = 8m; 맥스 포스트 크기
0x05 : 오류 메시지를 비활성화하고 로깅을 활성화합니다
기본 설정에서 PHP는 브라우저에 오류 메시지를 출력합니다. 이 기본 설정은 응용 프로그램 개발 프로세스 중에 가장 합리적인 구성입니다. 그러나 설치 경로 및 사용자 이름과 같은 일부 보안 정보를 사용자에게 유출 할 수도 있습니다. 개발 된 웹 사이트에서 오류 메시지를 비활성화하고 로그 파일에 오류 메시지를 출력하는 것이 가장 좋습니다.
코드 사본은 다음과 같습니다.
display_errors = OFF
log_errors = on
0x06 : PHP 파일을 숨 깁니다
PHP 파일이 숨겨져 있지 않은 경우 다양한 방법을 통해 서버 PHP 버전을 얻을 수 있습니다 (예 : http://www.example.com/script.php?=PHPB8B5F2A0-3C92-11D3A9-4C7B08C10000
분명히, 우리는 사용자가 웹 사이트 서버의 PHP 버전을 직접 얻는 것을 원하지 않습니다. 다행히도이 기능을 비활성화 할 수있는 php.ini에 스위치가 있습니다.
코드 사본은 다음과 같습니다.
Expose_php = OFF
0x07 : 안전 모드 구성
기본적으로 PHP는 안전 모드로 구성 할 수 있습니다. 이 모드에서 Apache는 파일, 환경 변수 및 이진 프로그램에 액세스하는 것을 금지합니다. 안전 모드에서 가장 큰 문제는 파일의 소유자만이 PHP 파일에 액세스 할 수 있다는 것입니다. 많은 개발자들이 공동 으로이 프로그램을 개발한다면, 그러한 설정은 비현실적입니다. PHP 파일에 액세스 해야하는 경우 파일의 소유자를 수정해야합니다. 또 다른 문제는 다른 프로그램이 이러한 PHP 파일에 액세스 할 수 없다는 것입니다. 다음 구성은 파일의 권한을 단일 사용자가 아닌 사용자 그룹으로 수정할 수 있습니다.
코드 사본은 다음과 같습니다.
SAFE_MODE = OFF
SAFE_MODE_GID = ON
SAFE_MODE_GID를 활성화하면이 Apache 그룹을 사용하여 PHP 파일에 액세스 할 수 있습니다. 안전 모드는 또한 이진 실행을 방지하는 데 매우 효과적이지만 개발자는 특정 상황에서 일부 이진 파일을 실행할 수 있기를 원합니다. 이 특별한 경우, 이진 파일을 예를 들어 (/var/www/binaries) 디렉토리에 넣을 수 있으며 다음 설정을 할 수 있습니다.
코드 사본은 다음과 같습니다.
safe_mode_exec_dir =/var/www/binaries
마지막으로 다음 설정을 통해 서버의 환경 변수에 액세스하여 지정된 접두사가있는 환경 변수에만 액세스 할 수있는 "_"접두사를 제공 할 수 있습니다.
코드 사본은 다음과 같습니다.
safe_mode_allowed_env_vars = php_
0x08 : 특정 접미어 이름이있는 파일에 대한 공개 액세스 제한
보안상의 이유로 인해 특정 접미사 이름을 가진 많은 파일은 공개 사용자가 액세스 할 수 없습니다. 예를 들어 .incix가있는 파일에는 MySQL 연결 정보와 같은 민감한 정보가 포함되어 있습니다. 적절한 구성이 없으면 모든 사용자 가이 구성 파일에 액세스 할 수 있습니다. 웹 사이트의 보안을 향상 시키려면 ..htaccess 파일에서 다음을 구성해야합니다.
코드 사본은 다음과 같습니다.
<filesmatch>
주문 허용, 거부
모두를 거부합니다
</filesmatch>
0x09 : 요약
PHP의 기본 구성은 개발자를위한 것입니다. 웹 사이트가 많은 사용자를위한 경우 PHP를 재구성하는 것이 좋습니다.