Linux

停止 PHP 讀取/寫入其他 PHP 文件的能力

  • December 15, 2010

我託管了一個非常小的託管站點,其中託管了一種聊天軟體。我給每個使用者一個 /home/ jailed ftp,但他們有自己的 www 文件夾,可以上傳東西。

我的一個使用者上傳了這個 php 文件: http: //pastebin.com/YAJW8weh - 它似乎能夠保存 php 文件並允許他下載它們。

使用這個我認為他能夠訪問我的一些文件,並且我的一個 php 文件在 php 中有我的 MySQL 密碼,然後他可以使用我所有的客戶密碼訪問數據庫。

我怎樣才能阻止這種情況再次發生?在給使用者自己的 /home/ 目錄時我應該採取什麼預防措施。

您想禁用主文件夾的 php。

當使用 PHP 作為 Apache 模組(Ubuntu 10.04 上的預設值)時,將以下內容添加到您的 Apache 配置中

<Directory /home>
 php_admin_value engine Off
</Directory>

為了安全起見,您可能還應該使用Options -ExecCGIand AllowOverride Nonethere 。請參閱官方 Apache安全提示。如果您的網路伺服器啟用了其他類型的腳本(如mod_perl),請確保也為主文件夾禁用它們。

您必須保護您的網站,Linux/Unix 做得很好,在您網站的根目錄上為組和其他人設置最小權限:

chmod 0711 /var/virtualhosts/example.com

# ls -ald /var/virtualhosts/example.com
drwx--x--x  4 example    example    4096 Oct  9 08:43 example.com

使用open_basedir限制對 PHP 文件的訪問:

# virtual host config
php_admin_value open_basedir "/var/virtualhosts/example.com:/tmp"

# directory config
<Directory /home/bad_user>
   php_admin_value open_basedir "/home/bad_user:/tmp"
</Directory>

禁用 PHP 中的危險函式:

# /etc/php.ini
disable_functions = "dl,shell_exec,passthru,exec,
                   popen,system,proc_terminate,proc_close,stream_socket_server"

使用su - user測試他們在您的網站上擁有的權限。

su - apache -s /bin/bash 
cd /var/virtualhosts/example.com
ls -al
cat /var/virtualhosts/example.com/db.config.php

引用自:https://serverfault.com/questions/212273