>  기사  >  백엔드 개발  >  PHP의 일부 보안 설정(최적화)

PHP의 일부 보안 설정(최적화)

藏色散人
藏色散人앞으로
2020-01-29 13:38:573768검색

PHP의 일부 보안 설정(최적화)

스크립트 언어와 초기 버전 설계의 여러 가지 이유로 인해 PHP 프로젝트에는 많은 보안 위험이 있습니다. 구성 옵션에서 다음과 같은 최적화를 수행할 수 있습니다.

1. Shield PHP 오류 출력.

/etc/php.ini(기본 구성 파일 위치)에서 다음 구성 값을 Off로 변경하세요

display_errors=Offdisplay_errors=Off

不要将错误堆栈信息直接输出到网页上,防止黑客加以利用相关信息。

正确的做法是:

把错误日志写到日志文件中,方便排查问题。

 

2.屏蔽PHP版本。

默认情况下PHP版本会被显示在返回头里,如:

Response Headers X-powered-by: PHP/7.2.0

将php.ini中如下的配置值改为Off

expose_php=Off

 

3.关闭全局变量。

如果开启全局变量会使一些表单提交的数据被自动注册为全局变量。代码如下:

<form action="/login" method="post">
<input name="username" type="text">
<input name="password" type="password">
<input type="submit" value="submit" name="submit">
</form>

如果开启了全局变量,则服务器端PHP脚本可以用$username和$password来获取到用户名和密码,这会造成极大的脚本注入危险。

开启方法是在php.ini中修改如下:

register_globals=On

建议关闭,参数如下:

register_globals=Off

오류 스택 정보를 웹페이지에 직접 출력하지 마세요. 해커가 관련 정보를 사용하는 것을 방지합니다.

올바른 접근 방식은 다음과 같습니다.

문제 해결을 용이하게 하려면 오류 로그를 로그 파일에 기록합니다.

2. PHP 버전을 차단하세요.

기본적으로 PHP 버전은 다음과 같이 반환 헤더에 표시됩니다.

응답 헤더 X-powered-by: PHP/7.2.0

php에서 다음을 구성합니다. ini 값을 Off

expose_php=Off

로 변경합니다. 3. 전역 변수를 닫습니다.

전역 변수가 활성화되면 양식에 제출된 일부 데이터가 자동으로 전역 변수로 등록됩니다. 코드는 다음과 같습니다.

<?php
echo file_get_contents(&#39;/etc/passwd&#39;);

전역 변수가 활성화된 경우 서버 측 PHP 스크립트는 $username 및 $password를 사용하여 사용자 이름과 비밀번호를 얻을 수 있으며 이로 인해 스크립트 삽입의 위험이 커집니다.

켜는 방법은 php.ini에서 다음과 같이 수정하는 것입니다.

register_globals=On

끄는 것을 권장하는 매개 변수는 다음과 같습니다.

register_globals=Off

종료 후 해당 매개변수는 $_POST, $_GET, $_REQUEST에서만 가져올 수 있습니다.

4. 파일 시스템 제한

open_basedir을 사용하여 PHP가 액세스할 수 있는 시스템 디렉터리를 제한할 수 있습니다.

다음 스크립트 코드(hack.php)를 제한 없이 사용하시면 시스템 비밀번호를 얻으실 수 있습니다.

PHP Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3
Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3 PHP Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3
Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3

설정하면 오류가 보고되고 관련 정보가 더 이상 표시되지 않으므로 시스템 디렉터리 b에 불법적으로 접근하는 일이 없습니다.

open_basedir=/var/www

설정 방법은 다음과 같습니다.

allow_url_fopen=Off
allow_url_include=Off

5 . 원격 리소스 액세스를 금지합니다.

wget http://download.suhosin.org/suhosin-0.9.37.1.tar.gz
tar zxvf suhosin-0.9.37.1.tar.gz
cd suhosin-0.9.37.1/
phpize
./configure  --with-php-config=/usr/local/bin/php-config
make
make install
在php.ini下加入suhosin.so即可
extension=suhosin.so

기타 타사 보안 확장

6.Suhosin.

Suhosin은 PHP 프로그램 보호 시스템입니다. 이는 원래 PHP 프로그램 및 PHP 코어의 알려진 또는 알려지지 않은 결함으로부터 서버와 사용자를 보호하기 위해 설계되었습니다(매우 실용적이고 일부 사소한 공격에 저항할 수 있음). 수호신은 두 개의 독립된 부분으로 구성되어 있어 별도로 사용하거나 결합하여 사용할 수 있습니다.

첫 번째 부분은 버퍼 오버플로 또는 형식 문자열 약점을 방지할 수 있는 PHP 코어용 패치입니다(필수입니다!).

두 번째 부분은 강력한 PHP 확장입니다(확장 모드는 매우 훌륭하며 설치가 쉽습니다). ...) 기타 모든 보호 조치가 포함됩니다.

확장 프로그램 설치

suhosin.session.encrypt = On
suhosin.session.cryptkey = zuHywawAthLavJohyRilvyecyondOdjo
suhosin.session.cryptua = On
suhosin.session.cryptdocroot = On
;; IPv4 only
suhosin.session.cryptraddr = 0
suhosin.session.checkraddr = 0

기능

● 에뮬레이터 보호 모드

● PHP 코어에 sha256() 및 sha256_file() 두 함수 추가

● 모든 플랫폼의 경우 crypt() 함수에 CRYPT_BLOWFISH를 추가하세요

● phpinfo() 페이지에 대한 투명한 보호 켜기

● SQL 데이터베이스 사용자 보호(테스트 단계)

런타임 보호

● 암호화된 쿠키

● 다양한 종류의 포함 취약점 방지(원격 URL 포함은 허용되지 않음(검은색) /white list); 업로드된 파일을 포함하지 않음, 디렉터리 탐색 공격 방지)

● preg_replace() 금지 허용

● eval() 함수 금지 허용

● 최대 실행 깊이를 구성하여 무한 재귀 방지

● 각 가상 호스트에 대한 블랙 및 화이트 목록 구성 지원

● 코드 실행을 위한 별도의 함수 블랙 및 화이트 목록 제공

● HTTP 응답 분할 취약점 방지

● 스크립트의 memory_limit 옵션 제어 방지

● PHP 슈퍼글로벌 보호 , function extract(), import_request_vars()

● mail() 함수의 줄바꿈 ​​공격 방지 🎜🎜● preg_replace() 공격 방지 🎜🎜🎜Session 보호 🎜🎜🎜● 세션 데이터 암호화 🎜🎜● 세션이 암호화되는 것을 방지 하이재킹 🎜🎜● 추가 긴 세션 ID 방지🎜🎜● 악성 세션 ID 방지🎜🎜 SESSION의 데이터는 일반적으로 서버에 일반 텍스트로 저장됩니다. 여기서 $_SESSION은 서버 측에서 암호화되고 해독됩니다. 이러한 방식으로 세션 핸들이 Memcache 또는 데이터베이스에 저장되면 세션 핸들이 쉽게 손상되지 않는 경우가 많습니다. 세션 데이터는 일부 민감한 필드를 저장합니다. 🎜🎜이 기능은 기본적으로 활성화되어 있으며 php.ini를 통해 수정할 수도 있습니다. 🎜
suhosin.cookie.encrypt = On
;; the cryptkey should be generated, e.g. with &#39;apg -m 32&#39;
suhosin.cookie.cryptkey = oykBicmyitApmireipsacsumhylWaps1
suhosin.cookie.cryptua = On
suhosin.cookie.cryptdocroot = On
;; whitelist/blacklist (use only one)
;suhosin.cookie.cryptlist = WALLET,IDEAS
suhosin.cookie.plainlist = LANGUAGE
;; IPv4 only
suhosin.cookie.cryptraddr = 0
suhosin.cookie.checkraddr = 0
Blocking Functions
测试
##默认PHP的Session保存在tmp路径下
ll  -rt /tmp | grep sess
##扩展未开启时查看某条sesson的数据
cat  sess_ururh83qvkkhv0n51lg17r4aj6
//记录是明文的
##扩展开启后查看某条sesson 的数据
cat  sess_ukkiiiheedupem8k4hheo0b0v4
//记录是密文的
可见加密对安全的重要性
🎜 🎜🎜🎜쿠키 암호화 🎜🎜🎜클라이언트 브라우저에서 쿠키에 의해 전송되는 HTTP 헤더도 일반 텍스트로 되어 있습니다. 쿠키를 암호화하면 🎜🎜와 같은 수많은 공격으로부터 애플리케이션을 보호할 수 있습니다. 쿠키 변조: 공격자는 프로그램을 공격하기 위해 다른 합리적인 쿠키 값을 추측하려고 시도할 수 있습니다. 🎜🎜애플리케이션 전반에 걸쳐 쿠키 사용: 모든 세션은 기본적으로 /tmp 디렉터리에 저장되므로 부적절하게 구성된 애플리케이션은 동일한 세션 저장 공간을 가질 수 있으며, 한 애플리케이션의 쿠키는 암호화 키가 유지되는 한 다른 애플리케이션에서 재사용될 수 없습니다. 다릅니다. 🎜🎜php.ini의 쿠키 암호화 구성: 🎜
##显式指定指定白名单列表
suhosin.executor.func.whitelist = htmlentities,htmlspecialchars,base64_encode
suhosin.executor.eval.whitelist = htmlentities,htmlspecialchars,base64_encode
<?php
echo htmlentities(&#39;<test>&#39;);
eval(&#39;echo htmlentities("<test>");&#39;);
🎜차단 기능🎜🎜Whitelist🎜
##显式指定指定黑名单列表
suhosin.executor.func.blacklist = assert,unserialize,exec,popen,proc_open,passthru,shell_exec,system,hail,parse_str,mt_srand
suhosin.executor.eval.whitelist = assert,unserialize,exec,popen,proc_open,passthru,shell_exec,system,hail,parse_str,mt_srand
通过日志来查看非法调用黑白名单
suhosin.simulation = 1
suhosin.log.file = 511
suhosin.log.file.name = /tmp/suhosin-alert.log
🎜Blacklist🎜
suhosin.executor.include.max_traversal    扩目录的最大深度,可以屏蔽切换到非法路径
suhosin.executor.include.whitelist        允许包含的URL,用逗号分隔
suhosin.executor.include.blacklist        禁止包含的URL,用逗号分隔
suhosin.executor.disable_eval = On        禁用eval函数
suhosin.upload.max_uploads
suhosin.upload.disallow_elf
suhosin.upload.disallow_binary
suhosin.upload.remove_binary
suhosin.upload.verification_script        上传文件检查脚本,可以来检测上传的内容是否包含webshell特征
🎜기타 구성 항목🎜
suhosin.executor.include.max_traversal    扩目录的最大深度,可以屏蔽切换到非法路径
suhosin.executor.include.whitelist        允许包含的URL,用逗号分隔
suhosin.executor.include.blacklist        禁止包含的URL,用逗号分隔
suhosin.executor.disable_eval = On        禁用eval函数
suhosin.upload.max_uploads
suhosin.upload.disallow_elf
suhosin.upload.disallow_binary
suhosin.upload.remove_binary
suhosin.upload.verification_script        上传文件检查脚本,可以来检测上传的内容是否包含webshell特征

使用Suhosin,你可以得到一些错误日志,你能把这些日志放到系统日志中,也可以同时写到其他任意的日志文件中去;

它还可以为每一个虚拟主机创建黑名单和白名单;

可以过滤GET和POST请求、文件上载和cookie;

你还能传送加密的会话和cookie,可以设置不能传送的存储上线等等;

它不像原始的PHP强化补丁,Suhosin是可以被像Zend Optimizer这样的第三方扩展软件所兼容的。

更多相关php知识,请访问php教程

위 내용은 PHP의 일부 보안 설정(최적화)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제