Ở bài viết hôm nay mình sẽ giới thiệu 1 vài cách bảo mật webserver chạy php cho các sysadmin.
Điều kiện: CÓ root access . và tập trung nói ở file security của apache /etc/php.d/security.ini ( file này tự tạo nhé )
Trước hết hãy đề cập đến các lỗi thường bị khai thác bây giờ để tìm ra cách chống đỡ
Phổ biến và nguy hiểm nhất là XSS, SQL injection, File upload,file includes, hàm eval(),csrf,etc nhiều lắm các bạn tự tìm hiểu thêm
Mình sẽ demo config tại 1 server sạch chưa cài gì
Phần 1 :
1> Tìm cách module không cần thiết và xóa bỏ bớt đi
[root@www2047uc ~]# php -m
ở ví dụ này mình thấy sqlite,readline là k cần lắm nên có để disable hoặc xóaMã:[PHP Modules] bz2 calendar Core ctype curl date ereg exif fileinfo filter ftp gettext gmp hash iconv imap json libxml mbstring mysql mysqli openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar readline Reflection session shmop SimpleXML sockets SPL sqlite3 standard tokenizer xml zip zlib [Zend Modules]
(readline)Mã:rm /etc/php.d/sqlite3.ini
hoặc
e (readline)Mã:v /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disabl
Hoặc thay vì xóa thì cài bản php chỉ có những module mình cần
cái này mình cài luôn fastcgiMã:./configure --with-libdir=lib64 --with-gd --with-mysql --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --cache-file=../config.cache --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-fastcgi --enable-force-cgi-redirect
2. Fake http banner ( http://diendanmaychu.vn/showthread.php/32117 )
3.Log tất cả các lỗi phát sinh của PHP
Mở /etc/php.d/security.ini thêm vào
4. Tốt nhất là dis luôn upload :Mã:display_errors=Off log_errors=On error_log=/var/log/httpd/php_scripts_error.log
vẫn sửa trong file kia nha file_uploads=Off hoặc nếu cho thì hoặc set max upload
file_uploads=On# user can only upload upto 1MB via php
upload_max_filesize=1M
5. bật sql safe mode
Khi set cái này mysql_connect() và mysql_pconnect() sẽ không nhận bất thì đối số nào được truyền tới chúng.Mã:sql.safe_mode=On
cái này mà dùng wp là xịt đấy
và gợi ý nữa là thay vì dùng magic_quotes thì dùng mysql_escape_string() (các pro đã chứng minh)
6. Dis các hàm nguy hiểm
7.Cài fastcgiMã:disable_functions =exec,passthru,shell_exec,system,proc_open,popen,c url_exec,curl_multi_exec,parse_ini_file,show_sourc e
FastCGI giảm hiệu suất của server tuy nhiên lại làm tăng tốc độ của PHP. và giúp ngăn chặn việc gọi shell trực tiếp qua cgi.force_redirect
8. Bảo vệ Apache, PHP, and, MySQL Configuration FilesMã:cgi.force_redirect=On
thay vì dùng chmod ở đây mình dùng chattr
dùng ở các file sau
Hi vọng với bài viết trên mình cũng đã giúp đỡ được ít nhiều cho các webmaster.Mã:# chattr +i /etc/php.ini # chattr +i /etc/php.d/* # chattr +i /etc/my.ini # chattr +i /etc/httpd/conf/httpd.conf # chattr +i /etc/