찾다
백엔드 개발PHP 튜토리얼PHP 보안 조치 및 안전 모드

PHP의 안전모드는 공유서버의 보안문제를 해결하기 위해 만들어졌습니다. 구조적으로 이 문제를 PHP 계층에서 해결하려는 것은 의미가 없지만 웹 서버 계층과 운영 체제 계층을 수정하는 것은 매우 비현실적으로 보입니다. 현재 많은 사람들, 특히 ISP가 안전 모드를 사용하고 있습니다.

다음은 php.ini의 안전 모드 설정입니다:

safe_mode boolean

PHP의 안전 모드 활성화 여부.

safe_mode_gid boolean

기본적으로 안전 모드에서는 파일을 열 때 UID 비교 확인을 수행합니다. GID 비교로 완화하려면 safe_mode_gid를 켜십시오. 파일에 접근할 때 UID(FALSE)를 사용할지 GID(TRUE)를 사용할지 여부를 확인합니다.

safe_mode_include_dir 문자열

이 디렉터리 및 하위 디렉터리의 파일을 포함할 때 UID/GID 검사를 우회합니다(디렉토리는 include_path에 있거나 전체 경로와 함께 포함되어야 함).

PHP 4.2.0부터 이 지시문은 단순한 디렉토리 대신 include_path 지시문과 유사한 스타일로 콜론(Windows의 경우 세미콜론)으로 구분된 경로를 허용할 수 있습니다. 지정된 제한은 실제로 디렉터리 이름이 아닌 접두사입니다. 이는 "safe_mode_include_dir = /dir/incl"이 "/dir/include" 및 "/dir/incls"가 존재하는 경우 이에 대한 액세스를 허용한다는 것을 의미합니다. 특정 디렉터리에 대한 액세스를 제한하려면 뒤에 슬래시를 추가하세요(예: "safe_mode_include_dir = /dir/incl/"). 이 지시문의 값이 비어 있으면 PHP 4.2.3에서 UID/GID가 다르고 PHP 4.3.3부터 시작하는 파일은 포함되지 않습니다. 이전 버전에서는 모든 파일이 포함될 수 있었습니다.

safe_mode_exec_dir string

PHP가 안전 모드를 사용하는 경우 system() 및 기타 프로그램 실행 함수는 이 디렉토리에 없는 프로그램 시작을 거부합니다. Windows를 포함하여 디렉터리 구분 기호로 /를 사용해야 합니다.

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가 on으로 설정되면 PHP는 파일 함수나 해당 디렉토리를 통해 현재 스크립트의 소유자가 작업할 파일의 소유자와 일치하는지 확인합니다. 예:

-rw-rw-r--    1 rasmus   rasmus       33 Jul  1 19:20 script.php
-rw-r--r--    1 root     root       1116 May 26 18:01 /etc/passwd

script.php 실행

<?php
readfile(&#39;/etc/passwd&#39;);
?>

안전 모드가 활성화되면 다음 오류가 발생합니다.

Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2

동시에 , 어쩌면 완화된 GID 검사로는 충분하지만 엄격한 UID 검사는 부적합한 환경이 있을 수 있습니다. 이 검사는 safe_mode_gid 옵션으로 제어할 수 있습니다. On으로 설정하면 완화된 GID 검사가 수행되고, Off(기본값)로 설정하면 UID 검사가 수행됩니다.

safe_mode를 제외하고 open_basedir 옵션을 설정하면 모든 파일 작업이 지정된 디렉터리로 제한됩니다. 예:

<Directory /docroot>
  php_admin_value open_basedir /docroot
</Directory>

open_basedir 옵션을 설정한 후 동일한 script.php를 실행하면 결과는 다음과 같습니다.

Warning: open_basedir restriction in effect. File is in wrong directory in
/docroot/script.php on line 2

특정 기능을 개별적으로 차단할 수도 있습니다. php.ini 파일 외부에서는 비활성화_functions 옵션을 사용할 수 없습니다. 즉, httpd.conf 파일의 다른 가상 호스트나 다른 디렉터리에 의해 기능이 차단될 수 없습니다. php.ini 파일에 다음 콘텐츠를 추가하면

disable_functions readfile,system

다음과 같은 출력이 표시됩니다.

Warning: readfile() has been disabled for security reasons in
/docroot/script.php on line 2

경고
물론 이러한 PHP 제한 사항은 실행 파일 문서에 적용됩니다.


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

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구