(八)限定某個目錄禁止解析php、限制user_agent和PHP相關配置

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

限定某個目錄禁止解析php

  • 對于使用php語言編寫的網站,有一些目錄是有需求上傳文件的。如果網站代碼有漏洞,讓黑客上傳了一個用PHP寫的木馬,由于網站可以執行PHP程序,最終會讓黑客拿到服務器權限。
    為了避免這種情況發生,我們需要把能上傳文件的目錄直接禁止解析PHP代碼
    1.編輯虛擬主機配置
#進入虛擬主機配置文件
[root@centos001 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.檢查讀寫并重啟服務

[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl graceful

3.創建需要禁止解析php的目錄,并把1個php文件放在目錄下

[root@centos001 ~]# cd /data/wwroot/111.com/
[root@centos001 111.com]# ls
123.php  admin  qq.png  u=3062734635,4183904616&fm=96.jpg
[root@centos001 111.com]# mkdir upload/
[root@centos001 111.com]# ls
123.php  admin  qq.png  u=3062734635,4183904616&fm=96.jpg  upload
#在目錄下創建一個php文件
[root@centos001 111.com]# cp 123.php  upload/

4.訪問這個文件,這里顯示了403。當我們訪問另一個目錄的php文件的時候,顯示能直接訪問,所以這個限制解析php是指定了目錄的,不影響我們其它目錄。

[root@centos001 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@centos001 111.com]# curl -x192.168.10.120:80 '111.com/123.php'
123.com[root@centos001 111.com]# 

5.注釋掉后面加的代碼的時候會出現什么狀況呢,開始說到禁止解析php只需要最前面的就可以了。

#進入虛擬主機配置文件并注釋掉<FilesMatch (.*)\.php(.*)> Order allow,deny                Deny from all</FilesMatch>   
#檢查讀寫并重啟服務
#再次訪問目錄下的php文件
[root@centos001 111.com]# curl -x192.168.10.120:80 '111.com/upload/123.php'
<?php
echo "123.com";

6.這里能看到直接顯示源代碼了,看起來不太美觀

限制user_agent

  • **什么是user_agent?**答:可以理解為瀏覽器標識
  • 了解cc攻擊 CC是指攻擊者借助代理服務器生成指向受害主機的合法請求,實現DOS和偽裝。CC攻擊主要針對WEB應用程序比較消耗資源的地方進行瘋狂請求,比如,論壇中的搜索功能,如果不加以限制,任由人搜索,普通配置的服務器在幾百個并發請求下,MYSQL服務就會癱瘓
  • 為何要限制 user_agent? 答:防止網站被cc攻擊。這種攻擊有很明顯的規律,這些惡意請求的user_agent相同或相似,我們就能通過限制user_agent發揮防攻擊作用

1.修改虛擬主機配置文件。本例意為當user_agent匹配到curl或者baidu.com時,都會觸發規則顯Forbidden

<IfModule mod_rewrite.c> //此處加載了一個模塊RewriteEngine on 
#NC表示忽略大小寫,OR表示或者,F相當于ForbiddenRewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]//RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]RewriteRule  .*  -  [F]
</IfModule>

2.檢查讀寫并重啟服務。:要是沒有加載模塊還要去主配置文件里面加載哦

root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl graceful

3.訪問。因為有curl觸發了規則所以輸出403

[root@centos001 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@centos001 111.com]# curl -A "123123" 192.168.10.120:80 '111.com/123.php'
abc.com

PHP相關配置

  • 查看php配置文件的位置
    • 第一種通過瀏覽器,訪問phpinfo找到配置文件的路徑(最準確)
    • 第二種/usr/local/php/bin/php -i|grep -i "loaded configuration file" ;但是有些情況“php -i ”是不準的,因為Apache他是調用了php 的一模塊,而且“php -i” 只是php 的一個程序,它和libphp5.so可能有關系也可能沒有關系;
[root@centos001 ~]# cd /data/wwroot/111.com/
[root@centos001 111.com]# ls
123.php  index.php
[root@centos001 111.com]# vi index.php 
[root@centos001 111.com]# cat index.php 
<?php
phpinfo();

瀏覽器訪問111.com/index.php

  • 有時候瀏覽器能看到配置文件的路徑但是沒有加載。所以我們就要去拷貝一個配置文件
cp php.ini-development /usr/local/php/etc/php.ini
#刷新瀏覽器不成功,可以再重啟下服務
  • 這個就是我們的配置文件了/usr/local/php7/etc/php.ini

修改php配置文件

  • 1.disable_functions 安全函數,以下函數會直接調去linux系統命令,開放將會很危險,因此要禁掉。
#打開配置文件
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
#重啟服務
  • 示例1:禁用phpinfo。 在安全函數后面添加phpinfo,重啟生效后用瀏覽器訪問。因為不禁止的話,在網頁上就會顯示很多我們的目錄信息。

輸入圖片說明 2. date.timezone 定義時區。
不定義的話有時會出現一些警告信息

#進入配置文件
[root@centos001 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 = Off2.定義錯誤日志的文件路徑
#搜索error_log
修改為error_log = /tmp/php_errors.log3.定義錯誤日志的級別,這里我們選擇的是最不嚴謹的。E_NOTICE為生產環境中所選的
#搜索error_reporting
修改為error_reporting = E_ALL
#保存退出后,檢查讀寫并重啟服務。查看路徑有沒有生成,訪問下或者刷新一下網頁
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@centos001 111.com]# cd /tmp 
[root@centos001 tmp]# ls
php_errors.log //生成的文件

查看php_errors.log文件,會看到屬主屬組是daemon

[root@centos001 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@centos001 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
  • 有時候,定義了一個錯誤日志,但是這個錯誤日志始終沒有生成,那么就需要檢查一下定義錯誤日志所在的目錄,到底httpd有沒有寫權限
  • 最保險的辦法,就是在所在目錄創建一個錯誤日志的文件,然后賦予它777的權限,這樣就不需要擔心這個文件httpd是否有寫權限了
[root@centos001 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@centos001 tmp]# touch /tmp/php_errors.log ; chmod /tmp/php_errors.log
  • 查看錯誤日志文件
[root@centos001 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

open_basedir安全相關項

一臺服務器上有多個網站運行,這樣做的弊端是如果其中一個被黑。其它的也有可能被連累

  • open_basedir就剛好能解決這個問題,它的作用是將網站限定在指定目錄里,就算被黑也波及不到其他目錄
  • php.ini文件中的內容是針對所有虛擬主機進行的配置 1.修改配置文件
[root@centos001 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@centos001 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

轉載于:https://my.oschina.net/u/3707523/blog/1924679

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253854.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253854.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253854.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

靜態時序分析——多周期、半周期和偽路徑

一、多周期 multicycle paths 在一些情況下&#xff0c;如下圖所示&#xff0c;兩個寄存器之間的組合電路傳輸的邏輯延時超過一個時鐘周期。在這樣的情況下&#xff0c;這個組合路徑被定義為多周期路徑&#xff08;multicycle path&#xff09;。盡管后一個寄存器會在每一個的…

微信頭像單張圖片上傳

后臺配置 public function upload_img($img){import(ORG.Tencent.Weixin);$wx new Weixin(get_app_config());$media_data$wx->getMedia($img);$path./Uploads/.uniqid()..jpg;if(!file_put_contents($path,$media_data)){$this->error(圖片上傳失敗);}return $path;}前…

u-boot nand flash read/write cmd

支援的命令函數說明1. nand info/nand device功能&#xff1a;顯示當前nand flash晶片資訊。函數調用關係如下(按先後順序)&#xff1a;static void nand_print(struct nand_chip *nand) ;2. nand erase 功能&#xff1a;擦除指定塊上的數據。 函數調用關係如下(按先後順序)&am…

APP測試瞎話

APP測試 一、功能性 1、APP的安裝、卸載 2、APP中業務功能 二、性能測試 1、高、中、低端機上運行效果 2、APP安裝過程、卸載過程的耗時 3、APP運行時&#xff0c;手機的CPU、內存、耗電量、流量、FPS&#xff08;畫面每…

網絡七層協議之物理層

我們以一個非常簡單的例子開始&#xff1a; 兩服務器通訊問題 如上圖&#xff0c;有兩臺服務器&#xff0c;分別是 Server 1 和 Server 2 。 我們先做一個假設&#xff1a;計算機網絡現在還沒有被發明出來&#xff0c; 作為計算機科學家的你&#xff0c;想在這兩臺服務器間傳遞…

靜態時序分析——On-chip Variation

OCV&#xff08;on-chip variation&#xff09;是指在同一個芯片上, 由于制造工藝和環境等原因導致芯片上各部分特征不能完全一樣&#xff0c;從而造成偏差&#xff0c;對時序分析造成影響。這些偏差對互聯線和cell的延時都是有影響的。 由于OCV對延時有影響&#xff0c;那么我…

Exception和RuntimeException的區別

1.Exception表示程序運行過程中可能出現的非正常狀態 RuntimeException表示虛擬機的通常操作中可能遇到的異常&#xff0c;是一種常見運行錯誤。 Java編譯器要求方法必須聲明拋出可能發生的費運行異常&#xff0c;但是并不要求必須聲明拋出未被捕獲的運行時異常&#xff0c; 即…

[轉載]IIS7報500.23錯誤的解決方法

原文出處&#xff1a; 原文作者&#xff1a;pizibaidu 原文鏈接&#xff1a;http://pizibaidu.blog.51cto.com/1361909/1794446 背景&#xff1a;今天公司終端上有一個功能打開異常&#xff0c;報500錯誤&#xff0c;我用Fiddler找到鏈接&#xff0c;然后在IE里打開&#xff0c…

關于用戶空間和內核空間

當一個任務&#xff08;進程&#xff09;執行系統調用而陷入內核代碼中執行時&#xff0c;我們就稱進程處于內核運行態&#xff08;內核態&#xff09;。在內核態下&#xff0c;CPU可執行任何指令。當進程在執行用戶自己的代碼時&#xff0c;則稱其處于用戶運行態&#xff08;用…

kaggle中zillow比賽中模型融合的方法及其代碼

在機器學習這個領域&#xff0c;尤其是做多媒體&#xff08;聲音、圖像、視頻&#xff09;相關的機器學習方法研究&#xff0c;會涉及很多特征、分類模型&#xff08;分類任務&#xff09;的選擇。以聲音識別為例&#xff0c;常見的特征有MFCC、LPCC、spectrogram-like feature…

靜態時序分析——Timing borrow

Timing Borrow技術又稱為cycle stealing技術&#xff0c;主要是利用latch的電平敏感特性&#xff0c;通過有效電平獲取數據&#xff0c;通過無效電平保持被鎖存的數據&#xff0c;主要用于解決路徑時序不滿足電路要求的情況。 通過TimingBorrow可以對電路進行加速,當路徑延遲較…

homebrew 常用命令

安裝&#xff08;需要 Ruby&#xff09;&#xff1a;ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/Go/install)" 搜索&#xff1a;brew search MySQL 查詢&#xff1a;brew info mysql 主要看具體的信息&#xff0c;比如目前的版本&#xff0c…

從Mysql某一表中隨機讀取n條數據的SQL查詢語句

若要在i ≤ R ≤ j 這個范圍得到一個隨機整數R &#xff0c;需要用到表達式 FLOOR(i RAND() * (j – i 1))。例如&#xff0c; 若要在7 到 12 的范圍&#xff08;包括7和12&#xff09;內得到一個隨機整數, 可使用以下語句&#xff1a; SELECT FLOOR(7 (RAND() * 6)); 以上摘…

基于MTD的NAND驅動開發(二)

基于MTD的NAND驅動開發(二) 基于MTD的NAND驅動開發(三) http://blog.csdn.net/leibniz_zsu/article/details/4977853 http://blog.csdn.net/leibniz_zsu/article/details/4977869 四、基于MTD的NAND 驅動架構 1 、platform_device 和platform_driver 的定義和注冊 對于我們的…

靜態時序分析——Data to data check

setup和hold的檢查也有可能發生在任意兩個數據端口&#xff0c;其中不包括時鐘端口。 我們將其中一個端口&#xff08;pin&#xff09;設置為約束端口&#xff08;constrainted pin&#xff09;&#xff0c;就像觸發器中的數據端口&#xff1b;將另一個一個端口&#xff08;pin…

開源數據庫中間件-MyCa初探與分片實踐

如今隨著互聯網的發展&#xff0c;數據的量級也是撐指數的增長&#xff0c;從GB到TB到PB。對數據的各種操作也是愈加的困難&#xff0c;傳統的關系性數據庫已經無法滿足快速查詢與插入數據的需求。這個時候NoSQL的出現暫時解決了這一危機。它通過降低數據的安全性&#xff0c;減…

【JAVA設計模式】外觀模式(Facade Pattern)

一 定義 為子系統中的一組接口提供一個一致的界面。Facade模式定義了一個高層的接口&#xff0c;這個接口使得這一子系統更加easy使用。二 案例 一個子系統中擁有3個模塊。每一個模塊中都有3個方法。當中一個為client調用方法&#xff0c;其它兩個則為各子模塊間互相調用方法…

return的用處

#include "stdio.h" main() {int a,b1,c0;for(a1;a<5;a){ cca;}printf("%d",c);return ;printf("hello word"); } 輸出結果是10并沒有hello word&#xff1b;return將不會執行下面的語句。轉載于:https://www.cnblogs.com/doublekai/p/6148…

靜態時序分析——Clock Gating check

門控時鐘是RTL級進行低功耗設計的最常用方法&#xff0c;能夠有效降低動態功耗。在實際使用中&#xff0c;一般用ICG&#xff08;集成門控時鐘單元&#xff09;來完成clock gating。ICG電路和時序如下&#xff1a; 通常來說&#xff0c;工藝庫已經集成了ICG&#xff0c;在做門控…

U-boot中TFTP 解釋

http://www.cnblogs.com/heaad/archive/2009/08/10/1542538.html