某個目錄下禁止解析 php,這個頗有用,咱們作網站安全的時候,這個用的不少, 好比某些目錄能夠上傳文件(例如,圖片,視頻,文檔等靜態文件), 黑客能夠經過上傳帶有木馬的文件,而後執行這個文件來攻破咱們的服務器,咱們能夠將該目錄設置禁止PHP解析。這樣就算上傳的文件含有可執行木馬,也不能執行。php
<Directory /tmp/ccc.com/upload> php_admin_flag engine off </Directory>
<?php phpinfo (); ?>
[root@localhost ~]# curl -x127.0.0.1:80 www.ccc.com/upload/index.php <?php phpinfo (); ?>
能夠看到反饋回來的就是源代碼,根本沒有解析,使用瀏覽器訪問的結果就是這個網頁直接被下載了,根被解析不了。html
[root@localhost ~]# curl -x127.0.0.1:80 www.ccc.com/upload/index.php -I HTTP/1.1 200 OK Date: Fri, 24 Aug 2018 01:15:45 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.37 X-Powered-By: PHP/5.6.37 Cache-Control: max-age=0 Expires: Fri, 24 Aug 2018 01:15:45 GMT Content-Type: text/html; charset=UTF-8
能夠看到,網頁已經被解析了,再使用瀏覽器訪問能夠明顯的看到解析後的頁面 shell
<Directory /tmp/ccc.com/upload> php_admin_flag engine off <FilesMatch (.*)\.php(.*)> Order allow,deny deny from all </FilesMatch> </Directory>
[root@localhost upload]# curl -x127.0.0.1:80 www.ccc.com/upload/index.php -I HTTP/1.1 403 Forbidden Date: Fri, 24 Aug 2018 01:29:08 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.37 Content-Type: text/html; charset=iso-8859-1
User-Agent(用戶代理),即不讓哪些瀏覽器或其餘訪問方式來訪問咱們的網站apache
實驗目標:限制user_agent爲curl和google瀏覽器的訪問vim
vim /usr/local/apache/conf/extra/httpd-vhosts.conf
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR] #NC表示忽略大小寫,OR表示或者的意思,上下兩個條件或者 RewriteCond %{HTTP_USER_AGENT} .*Chrome* [NC] #限制user_ragent 爲curl或者Google瀏覽器的進行訪問 RewriteRule .* - [F] #直接F表示,Forbidden </IfModule>
[root@localhost logs]# curl -x127.0.0.1:80 www.ccc.com/upload/test.jpg <!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 /upload/test.jpg on this server.<br /> </p> </body></html>
vim /usr/local/php/etc/php.ini
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_clos
在咱們測試完以後,業務須要上線的時候,應該把phpinfo也添加進去。將 PHP 所能打開的文件限制在指定的目錄樹,包括文件自己。本指令不受安全模式打開或者關閉的影響。瀏覽器
當一個腳本試圖用例如 fopen() 或者 gzopen() 打開一個文件時,該文件的位置將被檢查。當文件在指定的目錄樹以外時 PHP 將拒絕打開它。全部的符號鏈接都會被解析,因此不可能經過符號鏈接來避開此限制。安全
特殊值 . 指明腳本的工做目錄將被做爲基準目錄。但這有些危險,由於腳本的工做目錄能夠輕易被 chdir() 而改變。服務器
在 httpd.conf 文件中中,open_basedir 能夠像其它任何配置選項同樣用「php_admin_value open_basedir none」的方法關閉(例如某些虛擬主機中)。curl
做爲 Apache 模塊時,父目錄中的 open_basedir 路徑自動被繼承。socket
用 open_basedir 指定的限制其實是前綴,不是目錄名。也就是說「open_basedir = /dir/incl」也會容許訪問「/dir/include」和「/dir/incls」,若是它們存在的話。
若是要將訪問限制在僅爲指定的目錄,用斜線結束路徑名。例如:「open_basedir = /dir/incl/」。
針對不一樣的站點設置open_basedir,將用戶可操做的文件限制在某目錄下
編輯虛擬主機配置文件 vim /usr/local/apache/conf/extra/httpd-vhosts.conf
在配置文件裏面添加以下內容便可實現 php_admin_value open_basedir "/tmp/ccc.com:/tmp/"