서버 측 구성
보안, PHP 코드 작성은 한 측면이며 PHP 구성은 매우 중요합니다.
PHP를 수동으로 설치했습니다. PHP의 기본 구성 파일은 /usr/local/apache2/conf/php.ini에 있습니다. 가장 중요한 것은 PHP를 보다 안전하게 실행할 수 있도록 php.ini에 내용을 구성하는 것입니다. PHP 전체의 보안 설정은 주로 phpshell 및 SQL 주입 공격을 방지하기 위한 것입니다. 먼저 편집 도구를 사용하여 /etc/local/apache2/conf/php.ini를 엽니다. 다른 방법으로 설치하면 구성 파일이 이 디렉터리에 없을 수 있습니다.
(1) PHP의 안전 모드를 켜세요
PHP의 안전 모드는 system()과 같은 PHP의 일부 기능을 제어할 수 있는 매우 중요한 내장 보안 메커니즘입니다. 많은 파일 작업 기능이 있으며 /etc/passwd와 같은 특정 키 파일도 허용하지 않지만 기본 php.ini는 안전 모드를 열지 않으므로 엽니다.
safe_mode = on
(2) 사용자 그룹 보안
safe_mode가 on이고 safe_mode_gid가 off일 때, 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(), phpinfo() 및 PHP 정보를 볼 수 있는 기타 함수를 포함하여 명령을 실행할 수 있는 PHP 함수를 실행하고 싶지 않다고 판단되면 해당 함수를 금지할 수 있습니다.
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
예를 들어 해커가 telnet www.12345.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 = On
同时也要设置错误日志存放的目录,建议根apache的日志存在一起:
error_log = D:/usr/local/apache2/logs/php_error.log
注意:给文件必须允许apache用户的和组具有写的权限。
MYSQL的降权运行
新建立一个用户比如mysqlstart
net user mysqlstart fuckmicrosoft /add net localgroup users mysqlstart /del
不属于任何组
如果MYSQL装在d:\mysql ,那么,给 mysqlstart 完全控制 的权限
然后在系统服务中设置,MYSQL的服务属性,在登录属性当中,选择此用户 mysqlstart 然后输入密码,确定。
重新启动 MYSQL服务,然后MYSQL就运行在低权限下了。
如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限
这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。
net user apache fuckmicrosoft /add net localgroup users apache /del
ok.我们建立了一个不属于任何组的用户apche。
我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,
重启apache服务,ok,apache运行在低权限下了。
实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。
这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。
推荐视频教程:PHP视频教程
위 내용은 PHP는 SQL 주입 공격을 어떻게 방지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!