一、apache禁止解析php.
執行個體:假如我們的一個目錄是允許上傳圖檔的,可能有些别有用心的人通過某些手段上傳php檔案上來。也就意味着被執行的檔案,可能是惡意檔案
修改:
[root@abc admin]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/111.com/upload>
php_admin_flag engine off (打開禁止PHP解析)
<FilesMatch (.*)\.php(.*)> (隻要是比對到php結尾的檔案,全部deny掉,雖然已經開啟了php解析,但是如果不加這 一行curl的時候會拿到源代碼,這樣不友好)
Order allow,deny
Deny from all
</FilesMatch>
</Directory>
測試:
如果不加比對檔案哪一行,雖然不解析,但是會下載下傳拿到源代碼:
[root@abc upload]# curl -x192.168.52.100:80 '111.com/upload/index.php'
<?php
phpinfo();
?>
不加-I的話會直接拿到源代碼。加上-I會顯示200,如果在浏覽器上則會直接下載下傳檔案。
加上Order:
[root@abc 111.com]# curl -x192.168.52.100:80 '111.com/upload/index.php' -I
HTTP/1.1 403 Forbidden
Date: Sun, 26 Nov 2017 10:16:37 GMT
Server: Apache/2.4.28 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
直接403拒絕通路
二、apache限制user_agent
通路控制user_agent(浏覽器辨別)
執行個體:
有時候我們網站會受到cc攻擊(同時讓1w個肉機攻擊一個網站),就是正常的通路,但是她的通路特别有規律,且user_agent都是一樣的。通過限制user_agent來限制。
也是用rewrite子產品,上次用他實作的域名跳轉
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR] OR作為兩個條件的連接配接詞,或者的意思。
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC] NC表示忽律大小寫
RewriteRule .* - [F]
</IfModule>
檢查文法錯誤并且重新開機服務
驗證:
[root@abc ~]# curl -x127.0.0.1:80 'http://111.com/index.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 /index.php
on this server.<br />
</p>
</body></html>
當用Curl直接通路的時候,顯示403,沒有權利通路,因為限制了curl
[root@abc ~]# curl -A "lty"-x127.0.0.1:80 'http://111.com/index.php' -I
HTTP/1.1 200 OK
Date: Sun, 26 Nov 2017 11:41:37 GMT
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
當修改浏覽器表示為lty時,則通路正常。
檢視日志:
127.0.0.1 - - [26/Nov/2017:19:41:13 +0800] "GET http://111.com/index.php HTTP/1.1" 403 218 "-" "curl/7.29.0"
192.168.52.100 - - [26/Nov/2017:19:41:32 +0800] "GET /index.php HTTP/1.1" 200 80050 "-" "lty-x127.0.0.1:80"
curl -A " " 可以修改user_agent 也就是浏覽器辨別
curl -e " " 可以修改referer 也就是上次一通路的網址
三、php相關配置
檢視php配置檔案位置
還是寫一個phpinfo();的檔案。然後用浏覽器通路,檢視php詳細資訊
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuIzMzcjNygDN2cTO2ETM1EzLcZjMxEzNxAjMvwVZnFWbp9CXkF2bsBXdvwFcoB3LcJ3b0lGZlV3Lc12bj5ibyFWZsVGch5idvw1LcpDc0RHaiojIsJye.png)
我們發現php的目錄在,但是它并沒有加載。
我們需要從源碼包的配置檔案裡複制一個
[root@abc php-5.6.30]# cp /usr/local/src/php-5.6.30/php.ini-development /usr/local/php/etc/php.ini
[root@abc php-5.6.30]# /usr/local/apache2.4/bin/apachectl graceful (重新整理配置)
這樣就顯示出來了
修改配置檔案
vim /usr/local/php/etc/php.ini
搜尋 disable_functions 安全函數 (一句話木馬裡就用到了eval函數)
危險函數 :
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
搜尋 date.timezone 定義時區 (如果不定義有時候會有一些告警資訊)
可以定義到上海,或者重慶
date.timezone = Asia/Chongqing
日志相關的
display_errors = Off 會把你的錯誤資訊顯示到浏覽器上,改成OFF會顯示白頁
log_error = 打開或關閉錯誤日志
error_log = /tmp/php_errors.log 定義錯誤日志路徑
error_reporting 定義錯誤日志的級别(最好定義松一點,否則日志隻會記錄筆記嚴重錯誤)
四、open_bashdir
一個伺服器上跑2個網站,假如一個網站被黑了,另外一個肯定不會幸免于難,如果有open_basedir ,另外一個網站就不一定會被黑
open_basedir的作用是将網站限定在指定目錄裡,就算該站點被黑,黑客也隻能在該目錄下有所作為,不能左右其他目錄。
A網站和B網站分别在AB兩個目錄裡,A網站被黑了,黑客沒有權限進入B目錄,如果隻有一個網站,那就很有必要做安全選項,因為其他目錄沒有權限進入。
vim /usr/local/php/etc/php.ini
open_basedir = /data/wwwroot/111.com:/tmp/ (兩個目錄之間用:連接配接)
但是php.info裡包含的是所有的站點,我們也可以在虛拟主機配置檔案裡限制:
php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/" 要寫上tmp,因為tmp是個臨時檔案存放點,如果連自己的臨時檔案都寫不了,比如上傳一個圖檔,會臨時把圖檔放到tmp下。如果限制了,就不能上傳圖檔了
五、拓展内容:
本文轉自 小新銳 51CTO部落格,原文連結:http://blog.51cto.com/13407306/2054659,如需轉載請自行聯系原作者