PHP是一種開源服務器端腳本語言,應用很廣泛。Apache web服務器提供了這種便利:通過HTTP或HTTPS協議,
訪問文件和內容。配置不當的服務器端腳本語言會帶來各種各樣的問題。所以,使用PHP時要小心。以下是25個
PHP安全方面的最佳實踐,可供系統管理員們安全地配置PHP。
為PHP安全提示而提供的示例環境
?文件根目錄(DocumentRoot):/var/www/html
?默認的Web服務器:Apache(可以使用Lighttpd或Nginx來取代Apache)
?默認的PHP配置文件:/etc/php.ini
?默認的PHP加載模塊配置目錄:/etc/php.d/
?我們的示例php安全配置文件:/etc/php.d/security.ini(需要使用文本編輯器來創建該文件)
?操作系統:RHEL/CentOS/Fedora Linux(相關指令應該與Debian/Ubuntu等其他任何Linux發行版或者
OpenBSD/FreeBSD/HP-UX等其他類似Unix的操作系統兼容)。
?默認的php服務器TCP/UDP端口:無
為本文所列的大多數操作編寫代碼時,假定它們將由運行bash外殼程序或其他任何現代外殼程序的根用戶來執行:
$ php -v
示例輸出:
PHP 5.3.3 (cli) (built: Oct 24 2011 08:35:41) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
出于演示的用途,我會使用以下操作系統:
$ cat /etc/redhat-release
示例輸出:
Red Hat Enterprise Linux Server release 6.1 (Santiago)
第1個最佳實踐:了解你的對手
基于PHP的應用程序面臨不同類型的攻擊。我注意到了幾種不同類型的攻擊:
1. XSS:跨站腳本是Web PHP應用程序中的一種安全漏洞,攻擊者可以利用該漏洞來竊取用戶的信息。
你可以配置Apache,編寫更安全的PHP腳本(驗證所有的用戶輸入),以避免XSS攻擊。
2. SQL注入攻擊:這是PHP應用程序的數據庫層中的安全漏洞。用戶輸入不正確地過濾時,應用程序就
能執行任何SQL語句。你可以配置Apache,編寫安全代碼(驗證和轉換所有的用戶輸入),以避免
SQL注入攻擊。PHP中的一個常見做法是,在發送SQL查詢之前,使用名為mysql_real_escape_string()的函數,轉換參數。
3. 文件上傳:它讓訪客可以將文件放在(將文件上傳到)你的服務器上。這會帶來眾多安全問題,比如
刪除你的文件、刪除數據庫、獲取用戶詳細資料,不一而足。你可以使用php來禁用文件上傳,或編寫安
全代碼(比如驗證用戶輸入,只允許PNG或GIF等圖像文件類型)。
4. 添加本地和遠程文件:攻擊者可以從遠程服務器打開文件,執行任何PHP代碼。這讓他們得以上傳
文件、刪除文件和安裝后門。可以配置php以禁用遠程文件執行功能。
5. eval() :將字符串作為PHP代碼來進行評估。攻擊者常常利用該函數來隱藏其在服務器本身上面的
代碼和工具。你可以配置PHP,禁用eval()。
6. sea-surf攻擊(跨站請求偽造,CSRF):這種攻擊迫使最終用戶針對目前已驗證其身份的Web應
用程序執行有害的操作。如果是平常的用戶,得逞的CSRF攻擊會危及最終用戶的數據和操作。但如
果被盯上的最終用戶使用管理員帳戶,這會危及整個Web應用程序。
第2個最佳實踐:查找內置的PHP模塊
想查看一組編譯進去的PHP模塊,請輸入以下命令:
# php -m
示例輸出:
[PHP模塊]
apcbcmathbz2calendarCorectypecurldatedomeregexiffileinfofilterftpgdgettextgmphashiconvimapjsonlibxmlmbstringmemcachemysqlmysqliopensslpcntlpcrePDOpdo_mysqlpdo_sqlitePharreadlineReflectionsessionshmopSimpleXMLsocketsSPLsqlite3standardsuhosintokenizerwddxxmlxmlreaderxmlrpcxmlwriterxslzipzlib
[Zend模塊]
Suhosin
我建議你使用模塊數量減少的PHP,以增強性能和安全。比如說,你可以通過刪除(移除)配
置文件或者更名(或移動)一個名為/etc/php.d/sqlite3.ini的文件來禁用sqlite3模塊,操作如下:
# rm /etc/php.d/sqlite3.ini
或者
# mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable
其他編譯進去的模塊只能通過重新安裝精簡配置的PHP來移除。可以從php.net下載php源代碼
,然后按以下方法編譯它,支持GD、fastcgi和MySQL:
./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
參閱如何編譯php,并重新安裝到類似Unix的操作系統上(???http://www.php.net/manual/en/install.unix.php???)
,以了解更多信息。
第3個最佳實踐:限制PHP信息泄露
要限制PHP信息泄露,就要禁用expose_php。編輯/etc/php.d/secutity.ini,執行以下指令:
expose_php=Off
啟用后,expose_php向外界報告PHP安裝在服務器上,這包括HTTP頭里面的PHP版本
(如X-Powered-By: PHP/5.3.3)。PHP標識的全局唯一標識符(GUID,見示例
????http://www.php.net/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42???)也顯示出來,
因而將它們添加到支持PHP的網站的URL后面,就會顯示相應標識。expose_php啟用后,
你可以使用以下命令,查看PHP版本:
$ curl -I http://www.cyberciti.biz/index.php
示例輸出:
HTTP/1.1 200 OK X-Powered-By: PHP/5.3.3 Content-type: text/html; charset=UTF-8 Vary: Accept-Encoding, Cookie X-Vary-Options: Accept-Encoding;list-contains=gzip,Cookie;string-contains=wikiToken;string-contains=wikiLoggedOut;string-contains=wiki_session Last-Modified: Thu, 03 Nov 2011 22:32:55 GMT ...
我還建議,你應在httpd.conf中執行ServerTokens和ServerSignature命令,隱藏Apache
版本及其他信息(????http://www.cyberciti.biz/faq/rhel-centos-hide-httpd-version/??)。
第4個最佳實踐:盡量減少可裝入的PHP模塊(動態加載模塊)
PHP支持“動態加載模塊”(Dynamic Extensions)。默認情況下,RHEL裝入/etc/php.d/
目錄里面的所有加載模塊。要啟用或禁用某一個模塊,只要在/etc/php.d/目錄中找到配置文件
、為模塊名稱添加注釋。你還可以更名或刪除模塊配置文件。想獲得最佳的PHP性能和安全,
你應該只啟用Web應用程序需要的加載模塊。比如說,要禁用gd加載模塊,輸入以下命令:
# cd /etc/php.d/# mv gd.{ini,disable}# /sbin/service httpd restart
要啟用名為gd的php模塊,請輸入:
# mv gd.{disable,ini}# /sbin/service httpd restart
第5個最佳實踐:將所有PHP錯誤記入日志
別讓PHP錯誤信息暴露在網站的所有訪客面前。編輯/etc/php.d/security.ini,執行以下指令:
display_errors=Off
確保你將所有PHP錯誤記入到日志文件中(http://www.cyberciti.biz/tips/php-howto-turn-on-error-log-file.html):
log_errors=Onerror_log=/var/log/httpd/php_scripts_error.log
第6個最佳實踐:不允許上傳文件
出于安全原因,編輯/etc/php.d/security.ini,執行以下命令:
file_uploads=Off
如果使用你應用程序的用戶需要上傳文件,只要設置upload_max_filesize(http://www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/),即可啟用該功能,該設置限制了PHP允許通過上傳的文件的最大值:
file_uploads=On
# 用戶通過PHP上傳的文件最大1MB
upload_max_filesize=1M
第7個最佳實踐:關閉遠程代碼執行
如果啟用,allow_url_fopen允許PHP的文件函數——如file_get_contents()、include語句和require語句——可以從遠程地方(如FTP或網站)獲取數據。
allow_url_fopen選項允許PHP的文件函數——如file_get_contents()、include語句和require語句——可以使用FTP或HTTP協議,從遠程地方獲取數據。編程員們常常忘了這一點,將用戶提供的數據傳送給這些函數時,沒有進行適當的輸入過濾,因而給代碼注入安全漏洞留下了隱患。基于PHP的Web應用程序中存在的眾多代碼注入安全漏洞是由啟用allow_url_fopen和糟糕的輸入過濾共同引起的。編輯/etc/php.d/security.ini,執行以下指令:
allow_url_fopen=Off
出于安全原因,我還建議禁用allow_url_include:
allow_url_include=Off
第8個最佳實踐:啟用SQL安全模式
編輯/etc/php.d/security.ini,執行以下指令:
sql.safe_mode=On
如果啟用,mysql_connect()和mysql_pconnect()就忽視傳送給它們的任何變量。請注意:你可能得對自己的代碼作一些更改。sql.safe_mode啟用后,第三方開源應用程序(如WorkdPress)及其他應用程序可能根本運行不了。我還建議你針對所有安裝的php 5.3.x關閉magic_quotes_gpc(http://php.net/manual/en/security.magicquotes.php),因為它的過濾并不有效、不是很可靠。mysql_escape_string()和自定義過濾函數能起到更好的作用(向Eric Hansen致謝,https://www.facebook.com/EricHansen.SFU):
magic_quotes_gpc=Off
第9個最佳實踐:控制POST請求的大小
作為請求的一部分,客戶機(瀏覽器或用戶)需要將數據發送到Apache Web服務器時,比如上傳文件或提交填好的表單時,就要用到HTTP POST請求方法。攻擊者可能會企圖發送過大的POST請求,大量消耗你的系統資源。你可以限制PHP將處理的POST請求的最大大小。編輯/etc/php.d/security.ini,執行以下命令:
; 在此設置實際可行的值
post_max_size=1K
1K設置了php應用程序允許的POST請求數據的最大大小。該設置還影響文件上傳。要上傳大容量文件,這個值必須大于upload_max_filesize。我還建議你限制使用Apache Web服務器的可用方法。編輯httpd.conf,執行針對文件根目錄/var/www/html的以下指令:
<Directory /var/www/html> <LimitExcept GET POST> Order allow,deny </LimitExcept>
1.
## 可在此添加配置的其余部分... ##
</Directory>
第10個最佳實踐:資源控制(拒絕服務控制)
你可以設置每個php腳本的最長執行時間,以秒為單位。另一個建議的選項是設置每個腳本可能用于解析請求數據的最長時間,以及腳本可能耗用的最大內存數量。編輯/etc/php.d/security.ini,執行以下命令:
# 設置,以秒為單位
max_execution_time = 30max_input_time = 30memory_limit = 40M
第11個最佳實踐:為PHP安裝Suhosin高級保護系統
來自Suhosin項目網頁(http://www.hardened-php.net/suhosin/):
Suhosin是一款高級的保護系統,面向安裝的PHP。它旨在保護服務器和用戶,遠離PHP應用程序和PHP核心中的已知缺陷和未知缺陷。Suhosin分兩個獨立部分,可以單獨使用,也可以組合使用。第一個部分是針對PHP核心的小補丁,實施了幾個低級防護措施,以防范緩沖器溢出或格式字符串安全漏洞;第二個部分是功能強大的PHP加載模塊,實施了其他所有的保護措施。
看看如何在Linux操作系統下安裝和配置suhosin(???http://www.cyberciti.biz/faq/rhel-linux-install-suhosin-php-protection/??)。
第12個最佳實踐:禁用危險的PHP函數
PHP有許多函數,如果使用不當,它們可以用來闖入你的服務器。你可以使用disable_functions命令,在/etc/php.d/security.ini中禁用一系列函數:
disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
?
第13個最佳實踐:PHP Fastcgi/CGI - cgi.force_redirect命令
PHP可與FastCGI協同工作。 Fascgi減少了Web服務器占用的內存資源,但是仍為你提供了整個PHP語言具有的速度和功能。你可以配置Apache2+PHP+FastCGI或cgi,如這里描述的那樣。配置命令cgi.force_redirect可以防止任何人使用http://www.cyberciti.biz/cgi-bin/php/hackerdir/backdoor.php這樣的地址,直接調用PHP。出于安全原因,應啟用cgi.force_redirect。編輯/etc/php.d/security.ini,執行以下命令:
; 出于安全原因,在典型的*Apache+PHP-CGI/FastCGI*環境中,啟用cgi.force_redirect
cgi.force_redirect=On
第14個最佳實踐:PHP用戶和用戶組ID
mod_fastcgi是面向Apache Web服務器的cgi模塊。它可以連接至外部的FASTCGI服務器。你要確保PHP以非根目錄用戶的身份來運行。如果PHP以根目錄或100以下UID的身份來運行,它可以訪問及/或處理系統文件。你必須使用Apache的suEXEC或mod_suPHP,以非特權用戶的身份來執行PHP CGI。suEXEC功能讓Apache用戶們能夠以有別于調用Web服務器的用戶ID的用戶ID來運行CGI程序。在該示例中,我的php-cgi以phpcgi用戶的身份來運行,Apache以apache用戶的身份來運行:
# ps aux | grep php-cgi
示例輸出:
phpcgi 6012 0.0 0.4 225036 60140 ? S Nov22 0:12 /usr/bin/php-cgiphpcgi 6054 0.0 0.5 229928 62820 ? S Nov22 0:11 /usr/bin/php-cgiphpcgi 6055 0.1 0.4 224944 53260 ? S Nov22 0:18 /usr/bin/php-cgiphpcgi 6085 0.0 0.4 224680 56948 ? S Nov22 0:11 /usr/bin/php-cgiphpcgi 6103 0.0 0.4 224564 57956 ? S Nov22 0:11 /usr/bin/php-cgiphpcgi 6815 0.4 0.5 228556 61220 ? S 00:52 0:19 /usr/bin/php-cgiphpcgi 6821 0.3 0.5 228008 61252 ? S 00:55 0:12 /usr/bin/php-cgiphpcgi 6823 0.3 0.4 225536 58536 ? S 00:57 0:13 /usr/bin/php-cgi
1.
你可以使用spawn-fcgi等工具,以phpcgi用戶的身份(先要為系統添加phpcgi用戶)來創建遠程和本地FastCGI進程:
# spawn-fcgi -a 127.0.0.1 -p 9000 -u phpcgi -g phpcgi -f /usr/bin/php-cgi
現在,你可以配置Apache、Lighttpd和Nginx web服務器了,使用在127.0.0.1 IP地址處端口9000上運行的php FastCGI。
第15個最佳實踐:限制PHP對文件系統的訪問
open_basedir命令設置了允許PHP使用fopen()和其他函數來訪問哪些目錄的文件。如果文件在open_basdir定義的路徑外面,PHP就拒絕打開該文件。你無法使用符號鏈接作為變通辦法。比如說,只允許訪問/var/www/html目錄、不允許訪問/var/www、/tmp或/etc目錄:
限制PHP進程訪問/var/www/html/等專門指定的目錄外面的文件
; Limits the PHP process from accessing files outside; of specifically designated directories such as /var/www/html/open_basedir="/var/www/html/"; ------------------------------------; Multiple dirs example; open_basedir="/home/httpd/vhost/cyberciti.biz/html/:/home/httpd/vhost/nixcraft.com/html/:/home/httpd/vhost/theos.in/html/"; ------------------------------------
第16個最佳實踐:會話路徑
PHP中的會話支持包括在隨后的訪問中保留某些數據的一種方法。這讓你能夠開發更加定制的應用程序,并加大網站的吸引力。該路徑在/etc/php.ini文件中定義,與某一個會話有關的所有數據都將存放在session.save_path選項指定的目錄下的文件中。在RHEL/CentOS/Fedora Linux下,默認路徑如下:
session.save_path="/var/lib/php/session"
;設置用于上傳文件時存儲文件的臨時目錄
upload_tmp_dir="/var/lib/php/session"
確保路徑是outside /var/www/html,而且無法被其他任何系統用戶讀取或寫入:
# ls -Z /var/lib/php/
示例輸出:
drwxrwx---. root apache system_u:object_r:httpd_var_run_t:s0 session
注意:ls命令的-Z選項顯示了SELinux 安全上下文,比如文件模塊、用戶、用戶組、安全上下文和文件名稱。
第17個最佳實踐:保持PHP、軟件和操作系統版本最新
打安全補丁是維護Linux、Apache、PHP和MySQL服務器的一個重要環節。應該使用以下其中任何一個工具(如果你通過軟件包管理器來安裝PHP),盡快檢查所有的PHP安全更新版本,并盡快打上:
# yum update
或
# apt-get update && apt-get upgrade
你可以配置紅帽/CentOS/Fedora Linux,以便通過電子郵件發送yum軟件包更新通知。另一個選項是通過cron job(計劃任務)打上所有的安全更新版。在Debian/Ubuntu Linux下,可以使用apticron來發送安全通知。
注意:經常訪問php.net(http://php.net/),尋找源代碼安裝的最新版本。
第18個最佳實踐:限制文件和目錄訪問
確保你以Apache或www等非根用戶的身份來運行Apache。所有文件和目錄都應該歸非根用戶(或apache用戶)所有,放在/var/www/html下:
# chown -R apache:apache /var/www/html/
/var/www/html/是個子目錄,這是其他用戶可以修改的文件根目錄,因為根目錄從來不在那里執行任何文件,也不會在那里創建文件。
確保在/var/www/html/下,文件權限設成了0444(只讀):
# chmod -R 0444 /var/www/html/
確保在/var/www/html/下,所有目錄權限設成了0445:
# find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {}
關于設置合適文件權限的補充
chown和chmod命令確保:不管在什么情況下,文件根目錄或文件根目錄里面的文件都可以被Web服務器用戶apache寫入。請注意:你需要設置對你網站的開發模型最合理的權限,所以可以根據自身需要,隨意調整chown和chmod命令。在這個示例中,Apache服務器以apache用戶的身份來運行。這可以在你的httpd.conf文件中用User和Group命令來配置。apache用戶需要對文件根目錄下的所有內容享有讀取訪問權,但是不應該享有寫入訪問權。
確保httpd.conf有以下命令,實現限制性配置:
<Directory / > Options None AllowOverride None Order allow,deny</Directory>
1.
你只要在需要時才應該授予寫入訪問權。WordPress等一些Web應用程序及其他應用程序可能需要緩存目錄。你可以使用以下命令,授予寫入到緩沖目錄的訪問權:
# chmod a+w /var/www/html/blog/wp-content/cache### block access to all #### echo 'deny from all' > /var/www/html/blog/wp-content/cache/.htaccess
第19個最佳實踐:寫保護Apache、PHP和MySQL配置文件
使用chattr命令來寫保護配置文件:
# 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/
chattr命令還可以寫保護/var/www/html目錄中的一個php文件或多個文件:
# chattr +i /var/www/html/file1.php# chattr +i /var/www/html/
第20個最佳實踐:使用Linux安全加載模塊(如SELinux)
Linux自帶各種安全補丁,可以用來防護配置不當或受到危及的服務器程序。可能的話,使用SELinux及其他Linux安全加載模塊,對網絡及其他程序實行限制。比如說,SELinux為Linux內核和Apache Web服務器提供了眾多安全策略。要列出所有的Apache SELinux保護變量,請輸入:
# getsebool -a | grep httpd
示例輸出:
allow_httpd_anon_write --> offallow_httpd_mod_auth_ntlm_winbind --> offallow_httpd_mod_auth_pam --> offallow_httpd_sys_script_anon_write --> offhttpd_builtin_scripting --> onhttpd_can_check_spam --> offhttpd_can_network_connect --> offhttpd_can_network_connect_cobbler --> offhttpd_can_network_connect_db --> offhttpd_can_network_memcache --> offhttpd_can_network_relay --> offhttpd_can_sendmail --> offhttpd_dbus_avahi --> onhttpd_enable_cgi --> onhttpd_enable_ftp_server --> offhttpd_enable_homedirs --> offhttpd_execmem --> offhttpd_read_user_content --> offhttpd_setrlimit --> offhttpd_ssi_exec --> offhttpd_tmp_exec --> offhttpd_tty_comm --> onhttpd_unified --> onhttpd_use_cifs --> offhttpd_use_gpg --> offhttpd_use_nfs --> off
要禁用Apache cgi支持,請輸入:
# setsebool -P httpd_enable_cgi off
參閱紅帽SELinux指南(http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/index.html),即可了解更多信息。
第21個最佳實踐:安裝Mod_security
ModSecurity是一個保護Web應用程序的開源入侵檢測和預防引擎。你在Linux下很容易安裝mod_security,安裝后就能保護基于Apache和PHP的應用程序,遠離XSS及其他各種攻擊:
##幾個實例##
#不允許打開/etc/中的文件
SecFilter /etc/
#阻止SQL注入攻擊
SecFilter "delete[[:space:]]+from"SecFilter "select.+from"
第22個最佳實踐:盡可能在chroot jail環境中運行Apache / PHP
將PHP及/或Apache放在chroot jail環境中可以盡量減小潛在的入侵事件造成的破壞,因為它將Web服務器隔離到文件系統的一小部分。你可以使用Apache自帶的那種傳統的chroot jail環境。不過建議使用FreeBSD jail、運用容器概念的XEN虛擬化、KVM虛擬化或OpenVZ虛擬化。
?
第23個最佳實踐:使用防火墻限制出站連接
攻擊者會使用wget之類的工具,將文件本地下載到你的Web服務器上。你可以使用iptables阻止apache用戶的出站連接。ipt_owner模塊會試圖比對本地創建的數據包與數據包創建者的各個特點。它只有在OUTPUT鏈中才有效。在這個示例中,允許vivek用戶使用端口80連接外界(這適用于RHN或centos repo訪問)。
/sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
1.
下面是另一個示例,阻止apache用戶的所有出站連接(通向我們自己的smtp服務器的出站連接除外),以及垃圾郵件驗證API服務:
# ..../sbin/iptables --new-chain apache_user/sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT/sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user# allow apache user to connec to our smtp server/sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN# Allow apache user to connec to api server for spam validation/sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.62 --dport 80 -j RETURN/sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.61 --dport 80 -j RETURN/sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.89 --dport 80 -j RETURN/sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.88 --dport 80 -j RETURN########################### Add more rules here ############################ No editing below# Drop everything for apache outgoing connection/sbin/iptables --append apache_user -j REJECT
第24個最佳實踐:關注日志和審查
檢查apache日志文件:
# tail -f /var/log/httpd/error_log# grep 'login.php' /var/log/httpd/error_log# egrep -i "denied|error|warn" /var/log/httpd/error_log
檢查php日志文件:
# tail -f /var/log/httpd/php_scripts_error.log# grep "...etc/passwd" /var/log/httpd/php_scripts_error.log
日志文件讓你對于服務器遭到什么攻擊有所了解,并讓你可以檢查必要的安全級別有沒有落實到位。
提供了用于系統審查的auditd服務。啟用該服務,就可以審查SELinux事件、驗證事件、文件修改和
帳戶修改等。我還建議使用標準的Linux系統監測工具
(????http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html??),用于監測你的Web服務器。
第25個最佳實踐:按照系統或虛擬機實例來運行服務
對于安裝的大型系統來說,建議你借助不同的服務器運行數據庫、靜態內容和動態內容。
(圖1:在不同的服務器上運行服務)
在不同的服務器或虛擬機實例上運行不同的網絡服務。這限制了可能受到危及的其他服務的數量。
比如說,如果攻擊者成功地利用了Apache flow等軟件的漏洞,就能訪問整個服務器,包括在同一
臺服務器上運行的其他服務(比如MySQL和電子郵件服務等)。但是在上述例子中,按以下方式提供不同內容:
1.?static.lan.cyberciti.biz:使用lighttpd或nginx服務器,用于提供js/css/images等靜態資產。
2.?phpcgi1.lan.cyberciti.biz和phpcgi2.lan.cyberciti.biz:Apache web服務器,php用于生成動態內容。
3.?mysql1.lan.cyberciti.biz:MySQL數據庫服務器。
4.?mcache1.lan.cyberciti.biz:Memcached服務器是用于MySQL的速度非常快的緩存系統。它使用
libevent或epoll(Linux運行時環境),可以擴展至任何數量的打開的連接,并使用非阻塞的網絡輸入/輸出。
5.?LB01:放在Apache Web服務器前面的nginx Web服務器和反向代理服務器。 從互聯網進入到其中
一臺Web服務器的所有連接均通過nginx代理服務器來傳送,該代理服務器可以本身處理請求,也可以將
請求全部或部分傳送到主Web服務器。LB01提供了簡單的負載均衡機制。
第26個最佳實踐:其他工具
來自PHPIDS項目網頁(https://phpids.org/):
PHPIDS(PHP入侵檢測系統)是面向基于PHP的web應用程序的安全層,具有使用簡單、結構
良好、運行快捷、技術先進等優點。IDS無法清除、凈化或過濾任何惡意輸入內容,僅僅識別攻
擊者何時企圖闖入你的網站,安全按照你希望它采取的措施來采取相應措施。
你可以使用PHPIDS來檢測惡意用戶,并記錄檢測出來的任何攻擊,方便以后分析。請注意:我個
人沒有用過這款工具。
來自PhpSecInfo項目網頁(http://phpsec.org/projects/phpsecinfo/index.html):
PhpSecInfo提供了與phpinfo()函數相對應的機制,可報告關于PHP環境的安全信息,并提供改進
的建議。它無法取代安全開發技巧,也不進行任何一種代碼或應用程序審查,卻是多層次安全方案
中的一個實用工具。
圖2:關于PHP應用程序的安全信息
參閱Linux安全加固要點(http://www.cyberciti.biz/tips/linux-security.html),減少系統面臨的攻擊途徑數量。
關于PHP后門的補充
你可能碰到過PHP腳本或所謂的常見后門,比如c99、c99madshell和r57等。后門php腳本其實就
是一段隱藏的腳本,用于繞開所有的驗證機制,根據需要訪問你的服務器。攻擊者安裝它的目的
是,訪問你的服務器,同時又企圖不被發現。誤用的PHP腳本(或其他任何CGI腳本)通常允許
添加鉆Web瀏覽器中安全漏洞空子的代碼。攻擊者可以使用這種被鉆空子的安全漏洞,上傳后門
外殼程序,從而讓攻擊者能夠獲得許多功能,比如:
?下載文件
?上傳文件
?安裝rootkit
?設置垃圾郵件服務器/中繼服務器
?設置代理服務器,隱匿行蹤
?控制服務器
?控制數據庫服務器
?竊取所有信息
?刪除所有信息和數據庫
?打開TCP/UDP端口及更多端口
要點:該如何找出PHP后門?
可以使用Unix/Linux grep命令,搜索c99或r57外殼:
# grep -iR 'c99' /var/www/html/ # grep -iR 'r57' /var/www/html/ # find /var/www/html/ -name \*.php -type f -print0 | xargs -0 grep c99 # grep -RPn "(passthru|shell_exec|system|base64_decode|fopen|fclose|eval)" /var/www/html/
結束語
你基于PHP的服務器現在經過了適當的加固,可以準備顯示動態網頁了。不過,安全漏洞主要是
因沒有遵守堪稱最佳實踐的編程規則而引起的。為了滿足在web應用程序安全方面的要求,
你應該查閱更多資源,特別是PHP編程知識,盡管這超出了系統管理員的工作范疇。
--
- php開發
- 常用技巧
- 字符數組對象
- php換行替換,PHP替換回車換行符的三種方法
- PHP 數組轉字符串,與字符串轉數組
- php將img中的寬高刪除,PHP刪除HTML中寬高樣式的詳解
- php去除換行(回車換行)的三種方法
- php 過濾word 樣式
- php如何設置隨機數
- 2個比較經典的PHP加密解密函數分享
- php怎么去除小數點后多余的0
- php中判斷是一維數組還是二維數組的解決方案
- php 獲取數組中出現次數最多的值(重復最多的值)與出現的次數
- PHP過濾掉換行符、特殊空格、制表符等
- PHP中json_endoce轉義反斜杠的問題
- PHP過濾Emoji表情和特殊符號的方法
- PHP完美的提取鏈接正則
- php很牛的圖片采集
- 日期處理
- php 獲取今日、昨日、上周、本月的起始時間戳和結束時間戳的方法非常簡單
- PHP指定時間戳/日期加一天,一年,一周,一月
- 使用php 獲取時間今天明天昨天時間戳的詳解
- php獲得當月的節假日函數(包含周末,年度節假日)
- PHP獲取本月起始和截止時間戳
- php 獲取每月開始結束時間,php 獲取指定月份的開始結束時間戳
- PHP獲取今天,昨天,本月,上個月,本年 起始時間戳
- php、mysql查詢當天,本周,本月的用法
- php獲取兩個時間戳之間相隔多少天多少小時多少分多少秒
- 毫秒級時間戳和日期格式轉換
- php-倒計時
- 請求提交上傳
- php+put+post,Curl和PHP-如何通過PUT,POST,GET通過curl傳遞json
- PHP put提交和獲取數據
- PHP curl put方式上傳文件
- 數據導入導出
- PHP快速導入大量數據到數據庫的方法
- PHP快速導出百萬級數據到CSV或者EXCEL文件
- PHP解析大型Excel表格的庫:box/spout
- PHP導入(百萬級)Excel表格數據
- PHP如何切割excel大文件
- 使用 PHP_XLSXWriter 代替 PHPExcel 10W+ 數據秒級導出
- 安裝php擴展XLSXWriter
- 解決php導入excel表格時獲取日期變成浮點數的方法
- xml處理
- PHP XML和數組互相轉換
- php解析xml字符串
- php 生成vcf通訊錄
- 文件操作相關
- php獲取文件后綴的9種方法
- PHP判斷遠程文件是否存在
- PHP獲取文件修改時間,訪問時間,inode修改時間
- php獲取遠程文件大小教程
- php 讀取文件并以文件方式下載
- php 把數字轉化為大寫中文
- 請求響應
- PHP 獲取當前訪問的URL
- 壓縮
- php生成zip壓縮包
- PHPMailer
- 整理PHPMailer 發送郵件 郵件內容為html 可以添加多個附件等
- 通達oa
- OA管理員密碼忘了怎么辦,這里教你分分鐘搞定…
- 跨域
- php解決多站點跨域
- php設置samesite cookie,有效防止CSRF
- Chrome 配置samesite=none方式
- Cookie 的 SameSite 屬性
- 圖片
- php pdf首頁截圖,PHP_PHP中使用Imagick讀取pdf并生成png縮略圖實例,pdf生成png首頁縮略圖
- PHP -- 七牛云 在線視頻 獲取某一幀作為封面圖
- PHP圖片壓縮方法
- 如何解決PHP curl或file_get_contents下載圖片損壞或無法打開的問題
- php遠程下載文章中圖片并保存源文件名不變
- 詳解PHP如何下載采集圖片到本地(附代碼實例)
- php如何將webp格式圖片轉為jpeg
- PHP獲取遠程圖片的寬高和體積大小
- php 軟件版本號比較
- 使用PHP通過SMTP發送電郵
- 常用正則表達式
- php如何用正則表達式匹配中文
- 用于分割字符串的 PHP preg_match_all 正則表達式
- 性能優化
- php.ini配置調優
- PHP 幾種常見超時的設置方法
- PHP函數in_array、array_key_exists和isset效率分析
- php array push 和array_merge 效率誰高,php 通過array_merge()和array+array合并數組的區別和效率比較...
- php 兩個數組取交集、并集、差集
- 設置PHP最大連接數及php-fpm 高并發 參數調整
- 小工具
- php 獲取代碼執行時間和消耗的內存
- PHP如何判斷某項擴展是否開啟
- centos7.x下php 導出擴展 XLSXWriter 安裝
- php生成mysql數據庫字典
- PHP 實現 word/excel/ppt 轉換為 PDF
- composer的使用
- showdoc sqlite3 找回管理員密碼
- php怎么將數組轉為xml
- PHP抖音最新視頻提取代碼
- yii
- Yii2 如何獲取Header參數?
- swoole
- Linux下搭建swoole服務的基本步驟
- 相關學習資料
- 帶你學習swoole_process詳解
- 按照官方文檔 在win10下安裝 docker for windows easyswoole鏡像 掛載目錄
- php常用框架
- Hyperf
- 常用算法PHP版
- thinkphp6
- TP6 事件綁定、監聽、訂閱
- Thinkphp 模板中輸出HTML的變量
- Thinkphp6(操作SQL數據庫)
- thinkphp6 mysql查詢語句對于為null和為空字符串給出特定值處理
- Thinkphp 6 - 連接配置多個數據庫并實現自由切換(詳細過程及實例demo)
- TP框架中的Db::name 和 dB::table 以及 db('') 的區別
- thinkphp6.0模型篇之模型的軟刪除
- thinkphp6自定義日志驅動,增加顯示全部請求信息
- 其他系統
- 微擎數據庫字段字典
- Flutter實現微信支付和iOS IAP支付
- Flutter上線項目實戰——蘋果內購
- PHP接入蘋果支付
- 調試
- php如何獲取當前腳本所有加載的文件
- php跟蹤所有調用方法,日志方法
- 解析phpstorm + xdebug 遠程斷點調試
- PHP XDEBUG調試 PHPSTORM配置
- 異常處理
- PHP 出現 502 解決方案
- php 語法解析錯誤 syntax error unexpected namespace T_NAMESPACE
- Composer 安裝與使用
- 數據庫相關
- php pdo怎么設置utf8
- php 如何根據最新聊天對用戶進行排序
- php lic&fpm
- 讓php程序在linux后臺執行
- PHPcli模式和fpm模式優缺點在哪里?
- 運行模式
- php運行模式之cli模式
- 自己庫
- php批量獲取所有公眾號粉絲openid
- 地圖
- php 判斷點在多邊形內,php百度地圖api判斷地址是否在多邊形區域內
- PHP,Mysql-根據一個給定經緯度的點,進行附近地點查詢
- MySQL 根據經緯度查找排序
- PHP+MySQL獲取坐標范圍內的數據
- 【百度地圖】刪除指定覆蓋物
- 百度地圖多點+畫連接線+數字標注
- laravel5.8
- laravel5.8(四)引入自定義常量文件及公共函數文件
- Lumen 查詢執行SQL
- 使你的 Laravel 項目模塊化
- Laravel 多條件 AND , OR條件組合查詢
- Laravel 查詢 多個or或者and條件
- laravel redis操作大全
- laravel中外部定義whereIn的用法和where中使用in
- lumen5.8
- 創建laravel5.8 lumen前后臺api項目--記錄請求和響應日志
- Laravel和Lumen開啟SQL日志記錄
- Laravel 5.8 常用操作(路徑+日志+分頁+其他操作)
- 升級php7.4 laravel lumen報錯Trying to access array offset on value of type null
- Laravel 任務調度(計劃任務,定時任務)
- laravel的command定時任務時間的設置
- Laravel任務調度的簡單使用
- laravel單數據庫執行事務和多數據庫執行事務
- laravel中鎖以及事務的簡單使用
- 申請其他相關
- 小程序地理位置接口申請
- PHP高并發
- php 高并發下 秒殺處理思路
- 記錄 PHP高并發 商品秒殺 問題的 Redis解決方案
- thinkphp3.2
- thinkphp3.2 數據庫 AND OR連綴使用
- laravel
- laravel的聯表查詢with方法的使用
- laravel獲取請求路由對應的控制器和方法
- Laravel 模型關聯建立與查詢
- Laravel多表(3張表以上)with[]關聯查詢,對關聯的模型做條件查詢(has,跟join一樣結果 )
- Laravel模型屬性的隱藏屬性、顯示屬性和臨時暴露隱藏屬性用法介紹
- aravel獲取當前的url以及當前的基礎域名方法匯總
- Laravel 模型實現多庫查詢或者多表映射
- 關于 Laravel 的 with 多表查詢問題
- Laravel 模型過濾(Filter)設計
- 懶加載、預加載、with()、load() 傻傻分不清楚?
- laravel模型$castsl屬性
- Laravel Query Builder 復雜查詢案例:子查詢實現分區查詢 partition by
- Laravel 模型關聯、關聯查詢、預加載使用實例
- laravel 中with關聯查詢限定查詢字段
- laravel 原生字段查詢 whereRaw 和 where(DB::raw(''))
- lavarel - where條件分組查詢(orWhere)
- 通過 Laravel 查詢構建器實現復雜的查詢語句
- 兩個結果集合并成一個
- Laravel 對某一列進行篩選然后求和 sum()
- laravel怎么優雅的拼接where,處理whereIn與where數組查詢的問題
- laravel查詢時判斷是否存在數據
- laravel中的whereNull和whereNotNull
- laravel框架中的子查詢
- Laravel框架中 orwhere 多條件查詢的使用
- Laravel中where的高級使用方法
- laravel復雜的數據庫查詢(事例)
- laravel多條件查詢方法(and,or嵌套查詢)
- Laravel 的 where or 查詢
- Laravel 進行where 多個or和and的條件查詢可用
- laravel Middleware 中間件 $next($request) 報錯不執行問題
- 基于Laravel框架--自定義CORS跨域中間件
- laravel9新增路由文件及解決跨域問題方法
- 解決在laravel中leftjoin帶條件查詢沒有返回右表為NULL的問題
- 【Laravel 】faker數據填充詳解
- 數據庫
- mysql
- mysql聯合索引(復合索引)詳解
- MYSQL 清空表和截斷表
- MySQL快速生成大量測試數據(100萬、1000萬、1億)
- 提高mysql千萬級大數據SQL查詢優化30條經驗(Mysql索引優化注意)
- MySQL常用命令
- MySQL(三)|《千萬級大數據查詢優化》第一篇:創建高性能的索引
- MySQL(一)|性能分析方法、SQL性能優化和MySQL內部配置優化
- MySQL(二)|深入理解MySQL的四種隔離級別及加鎖實現原理
- MySQL(四)|《千萬級大數據查詢優化》第一篇:創建高性能的索引(補充)
- MySQL(五)|《千萬級大數據查詢優化》第二篇:查詢性能優化(1)
- MySQL(六)|《千萬級大數據查詢優化》第二篇:查詢性能優化(2)
- MySQL(七)|MySQL分庫分表的那點事
- Mysql索引優化 Mysql通過索引提升查詢效率(第二棒)
- MySQL查詢的性能優化(查詢緩存、排序跟索引)
- 【總結】MySQL數據庫
- MySQL存儲引擎、事務日志并發訪問以及隔離級別
- 技巧
- 數據庫 SQL查詢重復記錄 方法
- 替換數據庫中某個字段中的部分字符
- mysql開啟bin log 并查看bin log日志(linux)
- 分表分區
- 千萬級別數據的mysql數據表優化
- MYSQL百萬級數據,如何優化
- MySQL備份和恢復
- MySQL間隙鎖死鎖問題
- 小技巧
- 基礎
- MySQL中sql_mode參數
- mysql數據庫異常
- this is incompatible with sql_mode=only_full_group_by
- mysql安全
- MySQL數據庫被比特幣勒索及安全調整
- mysql忘記密碼后重置(以windows系統mysql 8.4為例)
- MongoDB
- sql查詢
- MYSQL按時間段分組查詢當天,每小時,15分鐘數據分組
- 高級
- 基于 MySQL + Tablestore 分層存儲架構的大規模訂單系統實踐-架構篇
- 數據庫安全
- 服務器被黑,MySQL 數據庫遭比特幣勒索!該如何恢復?
- 數千臺MySQL數據庫遭黑客比特幣勒索,該怎么破?
- MySQL 數據庫規范
- MySQL數據庫開發的36條鐵律
- Elasticsearch
- 安裝與配置
- ElasticSearch關閉重啟命令
- 設置ES默認分詞器IK analyzer
- 查詢
- elasticsearch 模糊查詢不分詞,實現 mysql like
- elasticSearch多條件高級檢索語句,包含多個must、must_not、should嵌套示例,并考慮nested對象的特殊檢索
- elasticSearch按字段普通檢索,結果高亮
- Elasticsearch 如何實現查詢/聚合不區分大小寫?
- 索引更新&刷新
- refresh與批量操作的效率
- Elasticsearch 刪除type
- 分詞器
- ElasticSearch最全分詞器比較及使用方法
- 異常錯誤
- 解決ES因內存不足而無法查詢的錯誤,Data too large, data for [<http_request>]
- linux
- 基本知識
- CentOS7.5 通過wget下載文件到指定目錄
- 【CentOS】vi命令
- centos7查看硬盤使用情況
- CentOS7 查看目錄大小
- Centos 7下查看當前目錄大小及文件個數
- 普通用戶sudo\su 到root免密碼
- 普通用戶切換到root用戶下的免密配置方法
- linux 獲取進程啟動參數,linux查看進程啟動及運行時間
- Linux 查看進程
- linux刪除文件后不釋放磁盤的問題
- Linux查找大文件命令
- linux 如何關閉正在執行的php腳本
- linux三劍客(grep、sed、awk)基本使用
- centos 卸載軟件
- centos查看內存、cpu占用、占用前10,前X
- Centos 查看系統狀態
- 異常
- 問題解決:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:...
- php相關
- centos 安裝phpize
- Centos7.2下phpize安裝php擴展
- 切換版本
- 運營工具
- 資深Linux運維工程師常用的10款軟件/工具介紹
- 一款良心的終端連接工具
- 六款Linux常用遠程連接工具介紹,看看哪一款最適合你
- Finalshell
- Linux Finalshell連接centos7和文件無顯示問題
- WSL2:我在原生的Win10玩轉Linux系統
- MobaXterm
- 運維
- linux服務器上定時自動備份數據庫,并保留最新5天的數據
- Centos系統開啟及關閉端口
- CentOS7開放和關閉端口命令
- Linux中查看所有正在運行的進程
- 防火墻firewall-cmd命令詳解
- centos 7.8阿里云服務器掛載 數據盤
- Linux Finalshell連接centos7和文件無顯示問題
- Centos7系統端口被占用問題的解決方法
- vi
- 如何在Vim/Vi中復制,剪切和粘貼
- 命令
- [Linux kill進程] kill 進程pid的使用詳解
- 備份還原
- Linux的幾種備份、恢復系統方式
- Linux系統全盤備份方法
- 相關軟件安裝
- linux下 lua安裝
- python
- 升級pip之后出現sys.stderr.write(f“ERROR: {exc}“)
- lua
- centos源碼部署lua-5.3
- deepin
- deepin20.6設置默認的root密碼
- 任務相關
- 寶塔定時任務按秒執行
- CentOS 7 定時任務 crontab 入門
- centos7定時任務crontab
- Linux下定時任務的查看及取消
- Linux(CentOS7)定時執行任務Crond詳細說明
- Linux 查看所有定時任務
- linux查看所有用戶定時任務
- Linux 定時任務(超詳細)
- 防火墻
- Centos7開啟防火墻及特定端口
- CentOS防火墻操作:開啟端口、開啟、關閉、配置
- 生成 SSH 密鑰(windows+liunx)
- 阿里云,掛載云盤
- 前端
- layui
- layui多文件上傳
- layer.msg()彈框,彈框后繼續運行
- radio取值
- layui-數據表格排序
- Layui select選擇框添加搜索選項功能
- 保持原來樣式
- layui表格單元如何自動換行
- layui-laydate時間日歷控件使用方法詳解
- layui定時刷新數據表格
- layer 延時設置
- layer.open 回調函數
- 【Layui內置方法】layer.msg延時關閉msg對話框(代碼案例)
- layui多圖上傳圖片順序錯亂及重復上傳解決
- layer.confirm關閉彈窗
- vue
- Vue跨域解決方法
- vue 4.xx.xx版本降級至2.9.6
- vue-cli 2.x升級到3.x版本, 和3.x降級到2.x版本命令
- 最新版Vue或者指定版本
- Vue2.6.11按需模塊安裝配置
- jQuery
- jQuery在頁面加載時動態修改圖片尺寸的方法
- jquery操作select(取值,設置選中)
- 日歷
- FullCalendar中文文檔:Event日程事件
- js
- JS 之 重定向
- javascript截取video視頻第一幀作為封面方案
- HTML <video> preload 屬性
- jQuery使用ajax提交post數據
- JS截取視頻靚麗的幀作為封面
- H5案例分享:移動端touch事件判斷滑屏手勢的方向
- JS快速獲取圖片寬高的方法
- win
- Windows環境下curl的使用
- Cygwin
- Windows下安裝Cygwin及apt-cyg
- Cygwin 安裝、CMake 安裝
- mklink命令 詳細使用
- Nginx
- Nginx高級篇-性能優化
- Nginx常用命令(Linux)
- linux+docker+nginx如何配置環境并配置域名訪問
- Nginx的啟動(start),停止(stop)命令
- linux 查看nginx 安裝路徑
- 安裝配置
- Linux 查看 nginx 安裝目錄和配置文件路徑
- 【NGINX入門】3.Nginx的緩存服務器proxy_cache配置
- thinkphp6.0 偽靜態失效404(win下)
- 深入
- nginx rewrite及多upstream
- Nginx負載均衡(upstream)
- 專業術語
- 耦合?依賴?耦合和依賴的關系?耦合就是依賴
- PHP常用六大設計模式
- 高可用
- 分布式與集群
- Nginx 實踐案例:反向代理單臺web;反向代理多組web并實現負載均衡
- 容器
- Docker
- 30 分鐘快速入門 Docker 教程
- linux查看正在運行的容器,說說Docker 容器常用命令
- Windows 安裝Docker至D盤
- 配置
- win10 快速搭建 lnmp+swoole 環境 ,部署laravel6 與 swoole框架laravel-s項目1
- win10 快速搭建 lnmp+swoole 環境 ,部署laravel6 與 swoole框架laravel-s項目2
- docker 容器重命名
- Linux docker常用命令
- 使用
- docker 搭建php 開發環境 添加擴展redis、swoole、xdebug
- docker 單機部署redis集群
- Docker 退出容器不停止容器運行 并重新進入正在運行的容器
- 進入退出docker容器
- Docker的容器設置隨Docker的啟動而啟動
- 使用異常處理
- docker容器中bash: vi: command not found
- OCI runtime exec failed: exec failed:解決方法
- docker啟動容器慢,很慢,特別慢的坑
- 解決windows docker開發thinkphp6啟動慢的問題
- 【Windows Docker】docker掛載解決IO速度慢的問題
- Docker的網絡配置,導致Docker使用網路很慢的問題及解決辦法
- golang工程部署到docker容器
- Docker 容器設置自啟動
- 如何優雅地刪除Docker鏡像和容器(超詳細)
- 5 個好用的 Docker 圖形化管理工具
- Docker 可能會用到的命令
- Kubernetes
- 消息隊列
- RabbitMQ
- php7.3安裝使用rabbitMq
- Windows環境PHP如何使用RabbitMQ
- RabbitMQ學習筆記:4369、5672、15672、25672默認端口號修改
- Window10 系統 RabbitMQ的安裝和簡單使用
- RabbitMQ默認端口
- RabbitMQ可視化界面登錄不了解決方案
- RocketMQ
- Kafka
- ActiveMQ
- mqtt
- phpMQTT詳解以及處理使用過程中內存耗死問題
- MQTT--物聯網(IoT)消息推送協議
- php實現mqtt發布/發送 消息到主題
- Mqtt.js 的WSS鏈接
- emqx
- 如何在 PHP 項目中使用 MQTT
- emqx 修改dashboard 密碼
- 其他
- Windows 系統中單機最大TCP的連接數詳解
- EMQX
- Linux系統EMQX設置開機自啟
- Centos7 EMQX部署
- docker安裝 EMQX 免費版 docker安裝并配置持久化到服務器
- 實時數倉
- 網易云音樂基于 Flink + Kafka 的實時數倉建設實踐
- 實時數倉-基于Flink1.11的SQL構建實時數倉探索實踐
- 安全
- 網站如何保護用戶的密碼
- 關于web項目sessionID欺騙的問題
- php的sessionid可以偽造,不要用來做防刷新處理了
- DVWA-Weak Session IDs (弱會話)漏洞利用方式
- 保證接口數據安全的10種方案
- cookie和session的竊取
- 萬能密碼漏洞
- 黑客如何快速查找網站后臺地址方法整理
- 網站后臺萬能密碼/10大常用弱口令
- 萬能密碼漏洞02
- 大多數網站后臺管理的幾個常見的安全問題注意防范
- token可以被竊取嗎_盜取token
- token被劫持[token被劫持如何保證接口安全性]
- PHP給后臺管理系統加安全防護機制的一些方案
- php - 重新生成 session ID
- 隱藏響應中的server和X-Powered-By
- PHP會話控制之如何正確設置session_name
- Session攻擊001
- PHP防SQL注入代碼,PHP 預防CSRF、XSS、SQL注入攻擊
- php25個安全實踐
- php架構師 系統管理員必須知道的PHP安全實踐
- 版本控制
- Linux服務器關聯Git,通過執行更新腳本實現代碼同步
- PHP通過exec執行git pull
- git 在linux部署并從windows上提交代碼到linux
- git上傳到linux服務器,git一鍵部署代碼到遠程服務器(linux)
- linux更新git命令,使用Linux定時腳本更新服務器的git代碼
- git異常
- 如何解決remote: The project you were looking for could not be found
- git status顯示大量文件修改的原因是什么
- PHPstorm批量修改文件換行符CRLF為LF
- git使用
- git常用命令大全
- centos git保存賬戶密碼
- GIT 常用命令
- git怎樣還原修改
- Git 如何放棄所有本地修改的方法
- Git忽略文件模式改變
- git: 放棄所有本地修改
- Git三種方法從遠程倉庫拉取指定的某一個分支
- 雜七雜八
- h5視頻
- H5瀏覽器支持播放格式:H264 AVCA的MP4格式,不能轉換為mpeg-4格式,
- iOS無法播放MP4視頻文件的解決方案 mp4視頻iphone播放不了怎么辦
- h5點播播放mp4視頻遇到的坑,ios的h5不能播放視頻等
- 【Linux 并發請求數】支持多少并發請求數
- Linux下Apache服務器并發優化
- 緩存
- redis
- Linux啟動PHP的多進程任務與守護redis隊列
- 重啟redis命令
- golang