Linux下PHP網站安全加固配置

PHP安全配置:
1、 disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,phpinfo #禁用的函數
2、
expose_php = off #避免暴露PHP信息
3、
display_errors = off #關閉錯誤信息提示
4、
register_globals = off #關閉全局變量
5、
enable_dl = off #不允許調用dl
6、
allow_url_include = off #避免遠程調用文件
7、
session.cookie_httponly = 1 #http only開啓
8、
upload_tmp_dir = /tmp #明確定義upload目錄
9、
open_basedir = ./:/tmp:/home/wwwroot/ #限制用戶訪問的目錄

open_basedir參數詳解

open_basedir可將用戶訪問文件的活動範圍限制在指定的區域,通常是其家目錄的路徑,也可用符號"."來代表當前目錄。注意用open_basedir指定的限制實際上是前綴,而不是目錄名。

舉例來說: 若"open_basedir = /home/wwwroot", 那麼目錄"/home/wwwroot"和"/home/wwwroot1"都是可以訪問的。所以如果要將訪問限制在僅爲指定的目錄,請用斜線結束路徑名。

MySQL安全設置:

     在數據庫只需供本機使用的情況下,使用–skip-networking參數禁止監聽網絡 。

確保運行MySQL的用戶爲一般用戶,如mysql,注意存放數據目錄權限爲mysql。

vi /etc/my.cnf
user = mysql

開啓mysql二進制日誌,在誤刪除數據的情況下,可以通過二進制日誌恢復到某個時間點

vi /etc/my.cnf
log_bin = mysql-bin
expire_logs_days = 7

認證和授權

禁止root賬號從網絡訪問數據庫,root賬號只允許來自本地主機的登陸。
mysql>grant all privileges on . to ‘root‘@localhost identified by 'password' with grant option;
mysql>flush priveleges;

刪除匿名賬號和空口令賬號:
mysql>USE mysql;
mysql>delete from user where User=;
mysql>delete from user where Password=;
mysql>delete from db where User=;

web服務器安全:
if ( $query_string ~ ".[\;'\<\>].*" ){
return 404;
}

關閉存放數據上傳等目錄的PHP解析:
location ~ ^/(attachments|data)/..(php|php5)${
deny all;
}

針對Apache:關閉圖片目錄/上傳等目錄的PHP解析:
<Files ~ ".php">
order allow,deny
Deny from all
</Files>

***查殺和防範:

grep -r --include=*.php '[^a-z]eval($_POST' /home/wwwroot/

grep -r --include=.php 'file_put_contents(.$_POST[.*]);' /home/wwwroot/

利用find mtime查找最近兩天或者發現***的這幾天,有哪些PHP文件被修改:
find -mtime -2 -type f -name *.php

改變目錄和文件屬性:
find -type f -name *.php -exec chomd 644 {} \;
find -type d -exec chmod 755 {} \;
chown -R www.www /home/wwwroot/www.test.com

爲防止跨站感染,需要做虛擬主機目錄隔離:
nginx的簡單實現方法:
利用nginx跑多個虛擬主機,習慣的php.ini的open_basedir配置:

open_basedir = ./:tmp:/home/wwwroot/

注:/home/wwwroot/是放置所有虛擬主機的web路徑

***可以利用任何一個站點的webshell進入到/home/wwwroot/目錄下的任何地方,這樣對各個虛擬主機的危害就很大

例如: /data/www/wwwroot目錄下有2個虛擬主機

修改php.ini

open_basedir = ./:/tmp:/home/wwwroot/www.test.com:/home/wwwroot/aaa.test.com

這樣用戶上傳webshell就無法跨目錄訪問了。

Apache的實現方法,控制跨目錄訪問

在虛擬機主機配置文件中加入

php_admin_value open_basedir "/tmp:/home/wwwroot/www.test.com"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章