限定某個目錄禁止解析php,限制user_agent,php相關配置

限定某個目錄禁止解析php

  • 核心配置文件內容

<Directory /data/wwwroot/www.123.com/upload>php

    php_admin_flag engine offshell

</Directory>apache

  • curl測試時直接返回了php源代碼,並未解析

假若有一個目錄是容許上傳圖片的,可能讓黑客上傳了一個PHP文件,因爲網站能夠執行PHP文件,一旦執行,就會讓黑客拿到服務器權限,爲了不這種狀況發生,咱們須要把能上傳文件的目錄禁止解析PHP。vim

打開虛擬主機配置文件vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,添加內容以下(紅框中),保存退出瀏覽器

php_admin_flag engine off ,禁止解析php安全

檢查配置文件語法正誤,並從新配置文件服務器

建立一個upload,新建php文件curl

curl測試,出現403socket

那麼先打開虛擬主機配置文件,註釋掉FilesMatch那幾行函數

檢查配置文件語法正誤,並從新配置文件

這時訪問php,發現沒法解析,只是顯示源代碼

訪問111.com/upload/123.php,會直接下載,也沒辦法解析

若是這時候再打開虛擬主機配置文件,取消FilesMatch那幾行註釋,檢查配置文件語法正誤,並從新配置文件,而後再訪問111.com/upload/123.php

禁止php解析,就是爲了提升服務器安全性,通常靜態文件存放的目錄是不容許解析php的

限制user_agent

  • user_agent能夠理解爲瀏覽器標識
  • 核心配置文件內容

    <IfModule mod_rewrite.c>

        RewriteEngine on

        RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]

        RewriteRule .* - [F]

    </IfModule>

  • curl -A "123123" 指定user_agent

有時候,網站會受到一種黑客攻擊叫 cc 攻擊,cc攻擊就是利用不少用戶的電腦同時訪問同一個站點,當訪問量或者頻率達到必定層次,會耗盡服務器資源,從而使之不能正常提供服務。因爲其中這些惡意請求的user_agent相同或者類似,那咱們就能夠經過限制user_agent發揮防攻擊的做用,減輕服務器壓力。

打開虛擬主機配置文件vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,添加內容以下(紅框中),保存退出

NC表示忽略大小寫,OR是兩條命令的鏈接符,表示或者的意思,不加OR就表示而且。

檢查配置文件語法正誤,並從新配置文件

curl訪問測試,出現403

查看訪問日誌

自定義user_agent

查看訪問日誌

curl -A 指定user_agent,curl -e指定referer,curl -I查看狀態碼,curl -x至關於省略了hosts

php相關配置

  • 查看php配置文件位置
  • /usr/local/php/bin/php -i|grep -i "loaded configuration file"
  • date.timezone
  • 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
  • error_log, log_errors, display_errors, error_reporting
  • open_basedir
  • php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

在111.com的根目錄下建立phpinfo

切換到源碼包路徑,複製文件

找到配置文件的路徑

打開並配置PHP文件,vim /usr/local/php/etc/php.ini

搜索/disable_functions,禁掉一些的函數,保存退出

從新加載配置文件/usr/local/apache2.4/bin/apachectl graceful

再去瀏覽器訪問111.com/index.php,會發現phpinfo沒法打開

打開配置文件,搜索/timezone,定義date.timezone時區,若是不定義,有時候會有一些告警信息,注意刪掉date前面的分號

搜索display_errors,將On改爲Off,這樣就不會把錯誤的信息直接顯示在瀏覽器上

檢查配置文件語法正誤,並從新加載配置文件

在瀏覽器中訪問111.com/index.php,會看到的是白頁

而後配置錯誤日誌,搜索/log_errors,看到log_errors=On,表示錯誤日誌已開啓

搜索/error_log,定義錯誤日誌文件路徑error_log= /tmp/php_errors.log,error_log前的分號去掉

搜索/error_reporting,定義日誌的級別,默認爲ALL;在生產環境中,notices出現的頻率很高。

檢查配置文件語法正誤,並從新加載配置文件

再訪問一下,會看到生成了php_errors.log,而且屬主屬組是daemon

查看進程

再作個測試

curl訪問2.php,顯示的的狀態碼爲500

查看錯誤日誌

安全相關的參數open_basedir

打開php配置文件 vim /usr/local/php/etc/php.ini

搜索/open_basedir,去掉分號,修改爲open_basedir = /data/wwwroot/111.com:/tmp

從新加載配置文件,而後訪問2.php,就不會報錯了

針對不一樣的虛擬主機去限制不一樣的open_basedir,打開虛擬主機配置文件

檢查配置文件語法正誤,並從新加載配置文件

這樣就能夠了,針對不一樣的虛擬主機去限制不一樣的open_basedir

擴展

apache rewrite教程

apache rewrite 出現死循環

php錯誤日誌級別參考

php開啓短標籤

php.ini詳解

相關文章
相關標籤/搜索