>백엔드 개발 >PHP 튜토리얼 >PHP 보안 문제 요약

PHP 보안 문제 요약

巴扎黑
巴扎黑원래의
2016-11-29 10:09:27858검색

(1) PHP의 안전 모드 켜기

php의 안전 모드는 system(),

등 PHP의 일부 기능을 제어할 수 있는 매우 중요한 내장 보안 메커니즘입니다. 동시에 많은 파일 작업 기능의 권한이 제어되며 /etc/passwd와 같은 특정 키 파일은 허용되지 않습니다.

그러나 기본 php.ini는 안전 모드를 열지 않습니다. put it Open:

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 스크립트가 액세스할 수 있는 디렉토리 제어

open_basedir 옵션을 사용하여 PHP 스크립트가 지정된 디렉토리에만 액세스할 수 있도록 제어하면 PHP 스크립트가 액세스하는 것을 방지할 수 있습니다

액세스된 파일은 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.shilicn.com 80 텔넷을 사용하면 PHP 정보를 볼 수 없습니다.

(8) 전역 변수 등록 끄기

POST 또는 GET을 사용하여 제출된 변수를 포함하여 PHP로 제출된 변수는 자동으로 전역 변수로 등록되며 직접 액세스할 수 있습니다.

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

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는 데이터베이스에 연결되지 않은 경우 오류 메시지를 표시합니다. 또는 다른 상황에서는 일반적으로 오류 메시지에

PHP 스크립트가 포함됩니다.이러한 유형의 정보가 해커에게 제공된 후에는 이전 경로 정보나 쿼리 SQL 문 및 기타 정보가 안전하지 않으므로 일반적으로 서버에서 오류 메시지를 비활성화하는 것이 좋습니다.

display_errors = Off

그러나 오류 정보를 표시하려면 오류 표시 수준을 설정해야 합니다. 예를 들어 경고 위의 정보만 표시합니다.

error_reporting = E_WARNING & E_ERROR

물론, 여전히 오류 프롬프트를 끄는 것이 좋습니다.

(11) 오류 로그

display_errors를 끈 후 오류 정보를 기록하여 서버가 실행되는 이유를 찾는 것이 좋습니다.

log_errors =

동시에 오류 로그가 저장되는 디렉터리도 설정해야 합니다. 루트 아파치 로그를 함께 저장하는 것이 좋습니다.

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

참고: Give 파일은 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 사용자가 원하는 작업만 수행할 수 있도록 각 폴더의 권한을 설정하고 각 디렉토리에 대해 별도의 읽기-쓰기 사용자를 생성할 수도 있습니다.

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



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