스크립트 언어와 초기 버전 설계의 여러 가지 이유로 인해 PHP 프로젝트에는 많은 보안 위험이 있습니다. 구성 옵션에서 다음과 같은 최적화를 수행할 수 있습니다.
1. Shield PHP 오류 출력.
/etc/php.ini(기본 구성 파일 위치)에서 다음 구성 값을 Off로 변경하세요
display_errors=Off
display_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 값을 Offexpose_php=Off
로 변경합니다. 3. 전역 변수를 닫습니다.
전역 변수가 활성화되면 양식에 제출된 일부 데이터가 자동으로 전역 변수로 등록됩니다. 코드는 다음과 같습니다.
<?php echo file_get_contents('/etc/passwd');
켜는 방법은 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
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 'apg -m 32' 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 //记录是密文的 可见加密对安全的重要性
##显式指定指定白名单列表 suhosin.executor.func.whitelist = htmlentities,htmlspecialchars,base64_encode suhosin.executor.eval.whitelist = htmlentities,htmlspecialchars,base64_encode <?php echo htmlentities('<test>'); eval('echo htmlentities("<test>");');
##显式指定指定黑名单列表 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
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!