>  기사  >  백엔드 개발  >  PHP와 관련된 몇 가지 일반적인 보안 세부 사항

PHP와 관련된 몇 가지 일반적인 보안 세부 사항

迷茫
迷茫원래의
2017-01-14 13:39:541827검색

PHP를 수동으로 설치했습니다. PHP의 기본 구성 파일은 /usr/local/apache2/conf/php.ini에 있습니다. 가장 중요한 것은 PHP를 보다 안전하게 실행할 수 있도록 php.ini에 내용을 구성하는 것입니다. . PHP 전체의 보안 설정은 주로 phpshell 및 SQL 주입 공격을 방지하기 위한 것입니다. 먼저 편집 도구를 사용하여 /etc/local/apache2/conf/php.ini를 엽니다. 다른 방법으로 설치하면 구성 파일이 이 디렉터리에 없을 수 있습니다.

(1) PHP의 안전 모드 켜기

PHP의 안전 모드는 시스템( ),

도 많은 파일 작업 기능의 권한을 제어하고 /etc/passwd,

과 같은 특정 키 파일을 허용하지 않지만 기본 php.ini는 안전 모드가 다음과 같습니다. 켜지지 않았으면 켜세요:

safe_mode = on

(2) 사용자 그룹 보안

safe_mode가 켜지면 safe_mode_gid가 꺼지고 php 스크립트는 파일에 접근할 수 있으며, 동일한

그룹에 속한 사용자도 파일에 접근할 수 있습니다.

safe_mode_gid = off

로 설정하는 것이 좋습니다. 설정하지 않으면 서버 웹사이트 디렉토리에 있는 파일을 작동하지 못할 수 있습니다. 예를 들어

파일을 조작합니다.

(3) 안전 모드에서 프로그램을 실행하기 위한 홈 디렉터리

안전 모드가 켜져 있지만 특정 프로그램을 실행하려는 경우 해당 프로그램을 지정하면 됩니다. 기본 디렉터리:

safe_mode_exec_dir = D:/usr/bin

일반적으로 어떤 프로그램도 실행할 필요가 없으므로 시스템 프로그램 디렉터리는 실행하지 않는 것이 좋습니다.

실행해야 하는 프로그램을 복사하세요. 예:

safe_mode_exec_dir = D:/tmp/cmd

그러나 어떤 프로그램도 실행하지 않는 것이 좋습니다. 그런 다음 웹 디렉토리를 가리킬 수 있습니다:

safe_mode_exec_dir = D:/usr/www

(4) 안전 모드에 파일 포함

일부 공용 파일을 안전 모드에 포함하려면 다음 옵션을 수정하세요.

safe_mode_include_dir = D:/usr/www/include/

사실 일반적으로 PHP 스크립트에 포함된 파일은 다음과 같습니다. 이는 특정 요구 사항에 따라 수행될 수 있습니다.

(5) PHP 스크립트가 액세스할 수 있는 디렉터리 제어

PHP 스크립트가 지정된 디렉터리에만 액세스할 수 있도록 제어하려면 open_basedir 옵션을 사용하세요. 액세스

액세스해서는 안되는 파일은 phpshell의 피해를 어느 정도 제한합니다. 일반적으로 웹사이트 디렉토리에만 액세스하도록 설정할 수 있습니다:

open_basedir = D:/usr/www

(6) 해제 위험한 기능

안전 모드를 켜면 기능 금지가 꼭 필요한 것은 아니지만 그래도 안전을 위해 고려하고 있습니다. 예를 들어

명령을 실행할 수 있는 system()을 포함한 PHP 함수나 PHP 정보를 볼 수 있는

phpinfo()와 같은 함수를 실행하고 싶지 않다고 느끼면 비활성화할 수 있습니다:

disable_functions = system,passthru,exec,shell_exec,popen,phpinfo

파일 및 디렉터리 작업을 비활성화하려면 많은 파일 작업을 비활성화할 수 있습니다.

disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir ,fopen ,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown

위에는 일반적으로 사용되는 파일 처리 기능 중 일부만 나열되어 있습니다. 위의 실행 명령 기능을 이 기능과 결합하면

은 대부분의 phpshell에 저항할 수 있습니다.

(7) http 헤더에서 PHP 버전 정보 유출 차단

해커가 서버에서 PHP 버전 정보를 얻는 것을 방지하기 위해 폐쇄할 수 있습니다. http 헤더 헤더:

expose_php = Off

에서 이 정보가 유출됩니다. 예를 들어 해커가 www.chinaz.com 80에 텔넷을 연결하면 PHP 정보를 볼 수 없습니다.

(8) 전역 변수 등록 닫기

POST 또는 GET을 사용하여 제출된 변수를 포함하여 PHP로 제출된 변수는 자동으로 전역 변수로 등록되며 직접 access,

이것은 서버에 매우 위험하므로 전역 변수로 등록할 수 없으므로 전역 변수 등록 옵션을 끕니다:

register_globals = Off

물론, 이렇게 설정하면 해당 변수를 구할 때 GET으로 제출한 var 변수를 구하는 등 합리적인 방법을 사용해야 하며,

$_GET['var']을 사용하여 구해야 합니다. 따라서 PHP 프로그래머는 이에 주의해야 합니다.

(9) SQL 주입 방지를 위해 Magic_quotes_gpc 열기

SQL 주입은 작은 경우에는 웹사이트 백엔드에 침입할 수 있는 매우 위험한 문제이며, 더 심각한 문제입니다. 그럴 경우 서버 전체가 다운됩니다.

조심하세요. php.ini에는 다음 설정이 있습니다:

magic_quotes_gpc = Off

이 기능은 기본적으로 꺼져 있습니다. 켜져 있으면 사용자가 제출한 SQL 쿼리를 자동으로 변환합니다.

예를 들어, ' ' 등으로 SQL 인젝션을 방지하는데 중요한 역할을 합니다. 따라서 다음과 같이 설정하는 것이 좋습니다:

magic_quotes_gpc = On

(10) 오류 메시지 제어

일반적으로 PHP는 데이터베이스에 연결되어 있지 않거나 아래에 있는 경우 오류 메시지를 표시합니다. 기타 상황 일반 오류 메시지

앞의 경로 정보나 쿼리 SQL 문 및 기타 정보가 포함됩니다. 이러한 종류의 정보는 해커에게 제공되면 안전하지 않으므로 일반적으로 서버에서 오류 메시지를 비활성화하는 것이 좋습니다. :

display_errors = Off

오류 메시지를 표시하려면 경고 위의 정보만 표시하는 등 오류 표시 수준을 반드시 설정하세요.

error_reporting = E_WARNING & E_ERROR

물론 그래도 오류를 끄는 것이 좋습니다. 프롬프트.

(11) 오류 로그

서버 작동 원인을 쉽게 찾을 수 있도록 display_errors를 끈 후 오류 정보를 기록하는 것이 좋습니다.

log_errors = On

또한 오류 로그가 저장되는 디렉터리를 설정합니다. 루트 아파치 로그를 함께 저장하는 것이 좋습니다:

error_log = D:/usr/local/apache2/logs/php_error .log

참고: 파일은 Apache 사용자 및 그룹에게 쓰기 권한을 허용해야 합니다.

MYSQL 권한 다운로드

mysqlstart와 같은 새 사용자 생성

net user mysqlstart ****microsoft /add

net localgroup users mysqlstart / del

어떤 그룹에도 속하지 않습니다

MYSQL이 d:mysql에 설치된 경우 mysqlstart에 전체 제어 권한을 부여하고

시스템에서 MYSQL의 서비스 속성을 설정합니다. service 로그인 속성에서 이 사용자 mysqlstart를 선택하고 비밀번호 OK를 입력합니다.

MYSQL 서비스를 다시 시작하면 MYSQL이 낮은 권한으로 실행됩니다.

net user apache ****microsoft /add

net localgroup users apache /del

알겠습니다. 어떤 그룹에도 속하지 않는 사용자 apche를 만들었습니다.

컴퓨터 관리자를 열고, 서비스를 선택하고, Apache 서비스 속성을 클릭하고, 로그온을 선택하고, 이 계정을 선택하고, 위에서 만든 계정과 비밀번호를 입력하고,

다시 시작합니다. 아파치 서비스, 좋아요, 아파치가 낮은 권한으로 실행 중입니다.

실제로 Apache 사용자가 원하는 작업만 수행할 수 있도록 각 폴더의 권한을 설정하고 각 디렉토리에 대해 별도의 읽기-쓰기 사용자를 생성할 수도 있습니다.

이 역시 많은 가상 호스트 제공업체에서 널리 사용하는 구성 방법이지만 이를 방지하기 위해 사용하면 과잉입니다.

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