#進入虛擬主機配置文件 [root@aminglinux 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf #增長下列配置 <Directory /data/wwroot/111.com/upload> //把upload目錄下全部的php禁止解析 php_admin_flag engine off //表示禁止解析php ## 增長下面的(兩個F之間的)後,全部訪問php都會是403 <FilesMatch (.*)\.php(.*)> Order allow,deny Deny from all </FilesMatch> </Directory>
2.檢查讀寫並重啓服務php
[root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl graceful
3.建立須要禁止解析php的目錄,並把1個php文件放在目錄下html
[root@aminglinux ~]# cd /data/wwroot/111.com/ [root@aminglinux 111.com]# ls 123.php admin qq.png u=3062734635,4183904616&fm=96.jpg [root@aminglinux 111.com]# mkdir upload/ [root@aminglinux 111.com]# ls 123.php admin qq.png u=3062734635,4183904616&fm=96.jpg upload #在目錄下建立一個php文件 [root@aminglinux 111.com]# cp 123.php upload/
4.訪問這個文件,這裏顯示了403。當咱們訪問另外一個目錄的php文件的時候,顯示能直接訪問,因此這個限制解析php是指定了目錄的,不影響咱們其它目錄。linux
[root@aminglinux 111.com]# curl -x192.168.10.120:80 '111.com/upload/123.php' -I HTTP/1.1 403 Forbidden Date: Mon, 08 Jan 2018 16:26:54 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 Content-Type: text/html; charset=iso-8859-1 #當咱們訪問其餘目錄的php文件 [root@aminglinux 111.com]# curl -x192.168.10.120:80 '111.com/123.php' 123.com[root@centos001 111.com]#
5.註釋掉後面加的代碼的時候會出現什麼情況呢,開始說到禁止解析php只須要最前面的就能夠了。shell
#進入虛擬主機配置文件並註釋掉 <FilesMatch (.*)\.php(.*)> Order allow,deny Deny from all </FilesMatch> #檢查讀寫並重啓服務 #再次訪問目錄下的php文件 [root@aminglinux 111.com]# curl -x192.168.10.120:80 '111.com/upload/123.php' <?php echo "123.com";
6.這裏能看到直接顯示源代碼了,看起來不太美觀apache
1.修改虛擬主機配置文件。本例意爲當user_agent匹配到curl或者baidu.com時,都會觸發規則顯Forbiddenvim
<IfModule mod_rewrite.c> //此處加載了一個模塊 RewriteEngine on #NC表示忽略大小寫,OR表示或者,F至關於Forbidden RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]// RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC] RewriteRule .* - [F] </IfModule>
2.檢查讀寫並重啓服務。注:要是沒有加載模塊還要去主配置文件裏面加載哦centos
[root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl graceful
3.訪問。由於有curl觸發了規則因此輸出403瀏覽器
[root@aminglinux 111.com]# curl -x192.168.10.120:80 'http://111.com/123.php' <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access /123.php on this server.<br /> </p> </body></html>
4.curl -A "123123" 指定user_agent安全
[root@aminglinux 111.com]# curl -A "123123" 192.168.10.120:80 '111.com/123.php' abc.com
查看php配置文件的位置bash
[root@aminglinux ~]# cd /data/wwroot/111.com/ [root@centos001 111.com]# ls 123.php index.php [root@aminglinux 111.com]# vi index.php [root@aminglinux 111.com]# cat index.php <?php phpinfo();
cp php.ini-development /usr/local/php/etc/php.ini #刷新瀏覽器不成功,能夠再重啓下服務
#打開配置文件 vim /usr/local/php7/etc/php.ini #搜索 disable_functions #修改爲以下 disable_functions=eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close #重啓服務 phpinfo能夠添加到最後面
2. date.timezone 定義時區。
不定義的話有時會出現一些警告信息
#進入配置文件 [root@aminglinux 111.com]# vim /usr/local/php7/etc/php.ini #搜索date.timezone #修改成date.timezone = Asia/Shanghai #搜索display 修改成display_errors = Off
3.配置error_log (錯誤日誌)
剛纔咱們禁用phpinfo的時候,瀏覽器輸出了一段錯誤信息。這個就是php開啓了錯誤日誌的輸出功能,可是開啓以後呢,咱們的有些東西就會泄露出去。因此下面咱們將介紹怎麼設置錯誤日誌的路徑、級別和類型等
#進入配置文件 1.開啓error_log #搜索 log_errors 修改成log_errors = Off on = 打開 off = 關閉 2.定義錯誤日誌的文件路徑 #搜索error_log 修改成error_log = /tmp/php_errors.log 3.定義錯誤日誌的級別,這裏咱們選擇的是最不嚴謹的。E_NOTICE爲生產環境中所選的 #搜索error_reporting 修改成error_reporting = E_ALL #保存退出後,檢查讀寫並重啓服務。查看路徑有沒有生成,訪問下或者刷新一下網頁 [root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl graceful [root@aminglinux 111.com]# cd /tmp [root@aminglinux tmp]# ls php_errors.log //生成的文件
查看php_errors.log文件,會看到屬主屬組是daemon
[root@aminglinux tmp]# ls -l /tmp/php_errors.log -rw-r--r--. 1 daemon daemon 432 1月 9 04:53 /tmp/php_errors.log
daemon其實是httpd的屬主,php_errors.log日誌文件是以httpd這個進程的身份去生成的
[root@aminglinux tmp]# ps aux |grep httpd root 2323 0.0 1.4 267872 14384 ? Ss 1月08 0:15 /usr/local/apache2.4/bin/httpd -k start daemon 24263 0.0 0.8 554700 8644 ? Sl 04:46 0:00 /usr/local/apache2.4/bin/httpd -k start daemon 24264 0.0 0.8 554700 8644 ? Sl 04:46 0:00 /usr/local/apache2.4/bin/httpd -k start daemon 24267 0.0 1.1 687884 11172 ? Sl 04:46 0:00 /usr/local/apache2.4/bin/httpd -k start root 24363 0.0 0.0 112676 984 pts/1 R+ 04:55 0:00 grep --color=auto httpd
[root@aminglinux tmp]# grep error_log /usr/local/php/etc/php.ini ; server-specific log, STDERR, or a location specified by the error_log ; Set maximum length of log_errors. In error_log information about the source is ;error_log = php_errors.log ;error_log = syslog ; OPcache error_log file name. Empty string assumes "stderr". ;opcache.error_log= [root@aminglinux tmp]# touch /tmp/php_errors.log ; chmod /tmp/php_errors.log
[root@aminglinux tmp]# cat /tmp/php_errors.log [09-Jan-2018 04:43:15 Asia/Shanghai] PHP Warning: phpinfo() has been disabled for security reasons in /data/wwroot/111.com/index.php on line 2
open_basedir = /data/wwroot/111.com:/tmp
一臺服務器上有多個網站運行,這樣作的弊端是若是其中一個被黑。其它的也有可能被連累
[root@aminglinux tmp]# vim /usr/local/php7/etc/php.ini #搜索open_basedir 修改成open_basedir = /data/wwroot/111.com:/tmp
2.檢查讀寫並重啓服務
3.正常訪問的話,直接就能訪問
4.如果服務器上跑了N多個站點,那應該怎麼去作限制呢?
應該針對站點,這些網站去作open_basedir ,但php.ini是作不到的,由於php.ini是針對全部站點的 但咱們能夠在虛擬主機配置文件中設置,在apache虛擬主機配置文件中去設置/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
[root@aminglinux tmp]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf #增長 保存並退出 php_admin_value open_basedir "/data/wwroot/111.com:/tmp/"
apache開啓壓縮 http://ask.apelearn.com/question/5528
apache2.2到2.4配置文件變動 http://ask.apelearn.com/question/7292
apache options參數 http://ask.apelearn.com/question/1051
apache禁止trace或track防止xss http://ask.apelearn.com/question/1045
apache 配置https 支持ssl http://ask.apelearn.com/question/1029