44.限定某個禁止解析php 限制useragenr php相關配置

11.28 限定某個目錄禁止解析phpphp

11.29 限制user_agent(防止cc攻擊)html

11.30/11.31 php相關配置linux

擴展shell

apache開啓壓縮 http://ask.apelearn.com/question/5528apache

apache2.2到2.4配置文件變動 http://ask.apelearn.com/question/7292vim

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服務器

 

 

11.28 限定某個目錄禁止解析php:php7

通常針對放圖片的目錄禁止解析php文件。防止被黑客拿到root權限,把php文件放到圖片的目錄下,就會很危險。由於php有一些危險的函數,若是開放了,確定會被上傳一些木馬文件,這種行爲通常存在放容許上傳圖片的那個目錄下,在這個目錄裏上傳了php文件

知識點:上傳圖片的目錄,99%的機率不須要解析php

 

核心配置文件內容

<Directory /data/wwwroot/111.com/upload>

php_admin_flag engine off 若是隻是單純禁止解析.php的,只加這一行便可

<FilesMatch (.*)\.php(.*)> 此處又使用了FilesMatch,其實upload目錄下的,php目錄就被限制了

Order allow,deny

deny from all 此處的deny是由於,若是不加deny會直接訪問源代碼,不太友好

<FilesMatch>

</Directory>

 

curl測試時直接返回了php源代碼,並未解析。-I會顯示200,但已提示沒法解析php

瀏覽器上測試會直接下載這個文件

 

實例:

[root@axinlinux-01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

<Directory /data/wwwroot/111.com/upload>

php_admin_flag engine off

<FilesMatch (.*)\.php(.*)> 此處並加入了限制php的訪問。更加安全

Order allow,deny 需注意此處,deny放在後面爲最終結果

deny from all

</FilesMatch>

</Directory>

[root@axinlinux-01 upload]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@axinlinux-01 upload]# /usr/local/apache2/bin/apachectl graceful

curl -x192.168.159.128:80 http://111.com/upload/123.php

<?php

[root@axinlinux-01 111.com]# curl -x192.168.159.128:80 'http://111.com/upload/123.php' -I

HTTP/1.1 200 OK

Date: Tue, 07 Aug 2018 14:10:00 GMT

Server: Apache/2.4.34 (Unix) PHP/5.6.32

Last-Modified: Tue, 07 Aug 2018 14:03:35 GMT

ETag: "1a-572d8dc218805"

Accept-Ranges: bytes

Content-Length: 26

Content-Type: application/x-httpd-php

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

11.29 限制user_agent:

 

 

cc攻擊:黑客利用本身手裏的肉雞同時去訪問一個網站或論壇,訪問量過大,被攻擊服務器必然會掛掉。稱爲cc攻擊

cc攻擊的規律:就是他的user_agent是一致的,並且訪問頻率很快,一秒訪問N次。知足這樣的特徵就能斷定爲cc攻擊

可經過限制他的user_agent,實現減輕服務器的壓力:

 

user_agent能夠理解爲瀏覽器標識

核心配置文件內容

<IfModule mod_rewrite.c> 用到了rewrite模塊(以前實現了域名跳轉)

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR] 這兩行都是定義條件

NC表明忽略大小寫(由於user_agent裏會有大寫),OR是這兩行的鏈接符,是這兩行的知足條件爲或者關係。不加OR就是而且關係。也就是上下兩行同時知足(user_agenr中不可能同時知足)

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

RewriteRule .* - [F] F表明Forbidden的意思。就是直接Forbidden(用法比較特殊)

</IfModule>

curl -A "123123" 指定user_agent

 

 

實例:

[root@axinlinux-01 upload]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

<IfModule mod_rewrite.c>

RewriteEngine on

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

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

RewriteRule .* - [F]

</IfModule>

[root@axinlinux-01 upload]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@axinlinux-01 upload]# /usr/local/apache2/bin/apachectl graceful

[root@axinlinux-01 upload]# curl -x192.168.159.128:80 http://111.com/123.php -I

HTTP/1.1 403 Forbidden

Date: Tue, 07 Aug 2018 14:54:04 GMT

Server: Apache/2.4.34 (Unix) PHP/5.6.32

Content-Type: text/html; charset=iso-8859-1

[root@axinlinux-01 upload]# curl -A "axin axin" -x192.168.159.128:80 http://111.com/123.php -I -A指定user_agent

HTTP/1.1 200 OK

Date: Tue, 07 Aug 2018 14:55:04 GMT

Server: Apache/2.4.34 (Unix) PHP/5.6.32

X-Powered-By: PHP/5.6.32

Content-Type: text/html; charset=UTF-8

 

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

11.30/11.31 php相關配置:

 

 

 

~1.

關於查找準確的php配置文件:

查看php配置文件位置

好比要找111.com的PHP位置。在111.com的目錄下建立phpinfo的文件,在到瀏覽器上查詢。詳見實例1

/usr/local/php/bin/php -i|grep -i "loaded configuration file" 這個方法不太準

~2.

關於定義時區:

date.timezone 定義時區(有時候會有告警信息) date.timezone=Asis/Shanghai 詳見實例2

~3.

關於禁掉危險函數:

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。由於黑客會經過訪問phpinfo來獲取信息。避免暴露

以上爲,較危險的php函數(其中eval就是一句話木馬所用到的函數)。針對這些作一些限制。詳見實例3

~4.

關於錯誤日誌:

display_errors, log_errors,error_log,error_reporting

display_errors:咱們若是把phpinfo禁掉的話,他會在瀏覽器裏顯示錯誤日誌,同樣會暴露。改成display_errors=Off

log_errors,error_log,error_reporting:咱們改成display_errors=Off以後,要設置錯誤日誌。步驟爲,檢查是否打開>設置路徑>錯誤級別

以上詳見實例4

 

~5.

open_basedir

一臺服務器上多個站點作隔離。好比A網站在A目錄下,B網站在B目錄下,及時被攻擊了A網站也只能在A目錄裏,B不受影響

假如這臺服務器全部的站點都在111.com下。咱們在PHP的配置文件裏設置open_basedir=/data/wwwroot/111.com:/tmp,也沒有什麼用。由於都在一個目錄下。因此咱們能夠在Apache的虛擬配置文件裏設置,下面的配置:

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

以上加:/tmp/是由於,默認的臨時文件在tmp下,若是被限制了,他本身臨時的文件也寫不了

php_admin_value這個命令能夠定義php.ini裏面的參數

不一樣的虛擬主機限制不一樣的 open_basedir

 

 

實例:

1.

[root@axinlinux-01 111.com]# ls

123.php abc.jpg admin index.php upload

[root@axinlinux-01 111.com]# vim index.php

(若是第二行沒有加載就要複製一個

[root@axinlinux-01 php-5.6.32]# cd /usr/local/src/php-7.1.6/

[root@axinlinux-01 php-7.1.6]# cp php.ini-development /usr/local/php7/etc/php.ini

cp:是否覆蓋"/usr/local/php7/etc/php.ini"? y

[root@axinlinux-01 php-7.1.6]# /usr/local/apache2/bin/apachectl graceful)

以上咱們就找到了php的配置文件。(最準的)

2.

[root@axinlinux-01 php-7.1.6]# vim /usr/local/php7/etc/php.ini

;date.timezone =Asis/Shanghai 注意首字母大寫(A S)

[root@axinlinux-01 php-7.1.6]# /usr/local/apache2/bin/apachectl graceful

3.

[root@axinlinux-01 ~]# vim /usr/local/php7/etc/php.ini 咱們第一步驟獲得的配置文件路徑

搜索 disable_functions,後面直接加上哪些危險的函數便可。由於咱們實驗要用phpinfo,因此沒有禁掉

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

[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl graceful

4.

[root@axinlinux-01 php-7.1.6]# vim /usr/local/php7/etc/php.ini

display_errors = Off 搜索display_errors,改成Off(首字母大寫)

以上爲白頁

 

定義錯誤日誌,首先檢查log_errors是否打開(On)

log_errors = On

搜索error_log,設置錯誤路徑

; Example:

error_log = /tmp/php_errors.log 這一行,前面加上目錄便可,不要更名字

; Log errors to syslog (Event Log on Windows)

若是咱們在建立錯誤日誌的時候,不能生成php_errors.log。就要先touch一個,並給他設置一個777的權限

[root@axinlinux-01 php-7.1.6]# touch /tmp/php_errors.log ; chmod 777 /tmp/php_errors.log

[root@axinlinux-01 php-7.1.6]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@axinlinux-01 php-7.1.6]# /usr/local/apache2/bin/apachectl graceful

[root@axinlinux-01 php-7.1.6]# cat /tmp/php_errors.log

[07-Aug-2018 17:02:32 UTC] PHP Warning: phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2

 

搜索error_reporting,設置錯誤的記錄級別。生產環境設置爲E_ALL & ~E_NOTICE。搜索的時候上面有選擇,直接複製,後面括號的不用複製。

error_reporting = E_ALL ALL表明全部的都記錄

 

5.

[root@axinlinux-01 php-7.1.6]# !vim

vim /usr/local/php7/etc/php.ini

open_basedir = /data/wwwroot/111.com/:/tmp

 

[root@axinlinux-01 php-7.1.6]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/" 在不一樣的虛擬主機里加上不一樣的 open_basedir 便可,直接輸入這一行

[root@axinlinux-01 php-7.1.6]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@axinlinux-01 php-7.1.6]# /usr/local/apache2/bin/apachectl graceful

相關文章
相關標籤/搜索