摘要:保證,軟件及操作系統(tǒng)更新到最新維護(hù)和服務(wù)器的一項重要工作是更新安全補(bǔ)丁。所有的安全更新應(yīng)盡快進(jìn)行審查并更新。啟用審查服務(wù)用于系統(tǒng)審查,可審查時間,驗證事件,文件修改,賬號修改
PHP是廣泛使用的開源服務(wù)端腳本語言。通過HTTP或HTTPS協(xié)議,Apache Web服務(wù)允許用戶訪問文件或內(nèi)容。服務(wù)端腳本語言的錯誤配置會導(dǎo)致各種問題。因此,PHP應(yīng)該小心使用。以下是為系統(tǒng)管理員準(zhǔn)備的,安全配置PHP的25個實踐事例。
用于下文的PHP設(shè)置樣例
DocumentRoot:/var/www/html
默認(rèn)Web服務(wù):Apache(可以使用Lighttpd或Nginx代替)
默認(rèn)PHP配置文件:/etc/php.ini
默認(rèn)PHP Extensions配置目錄:/etc/php.d/
PHP安全配置樣例文件:/etc/php.d/security.ini(需要使用文本編輯器創(chuàng)建這個文件)
操作系統(tǒng):RHEL / CentOS / Fedora Linux(指令應(yīng)該可以在所有其他Linux發(fā)行版,如Debian / Ubuntu,或是Unix-like的操作系統(tǒng),如OpenBSD / FreeBSD / HP-UX下正常運(yùn)行)
PHP服務(wù)的默認(rèn)TCP/UDP端口:none
下午列出的大部分操作,都是基于 root 用戶能在 bash 或其他現(xiàn)代 shell 上執(zhí)行操作的假設(shè)。
$ 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
本文使用的操作系統(tǒng)
$ cat /etc/redhat-release
樣例輸出
Red Hat Enterprise Linux Server release 6.1 (Santiago)1:知彼
基于PHP的應(yīng)用面臨著各種各樣的攻擊:
XSS:對PHP的Web應(yīng)用而言,跨站腳本是一個易受攻擊的點(diǎn)。攻擊者可以利用它盜取用戶信息。你可以配置Apache,或是寫更安全的PHP代碼(驗證所有用戶輸入)來防范XSS攻擊
SQL注入:這是PHP應(yīng)用中,數(shù)據(jù)庫層的易受攻擊點(diǎn)。防范方式同上。常用的方法是,使用mysql_real_escape_string() 對參數(shù)進(jìn)行轉(zhuǎn)義,而后進(jìn)行SQL查詢。
文件上傳:它可以讓訪問者在服務(wù)器上放置(即上傳)文件。這會造成例如,刪除服務(wù)器文件、數(shù)據(jù)庫,獲取用戶信息等一系列問題。你可以使用PHP來禁止文件上傳,或編寫更安全的代碼(如檢驗用戶輸入,只允許上傳png、gif這些圖片格式)
包含本地與遠(yuǎn)程文件:攻擊者可以使遠(yuǎn)程服務(wù)器打開文件,運(yùn)行任何PHP代碼,然后上傳或刪除文件,安裝后門。可以通過取消遠(yuǎn)程文件執(zhí)行的設(shè)置來防范
eval():這個函數(shù)可以使一段字符串如同PHP代碼一樣執(zhí)行。它通常被攻擊者用于在服務(wù)器上隱藏代碼和工具。通過配置PHP,取消 eval() 函數(shù)調(diào)用來實現(xiàn)
Sea-surt Attack(Cross-site request forgery,CSRF。跨站請求偽造):這種攻擊會使終端用戶在當(dāng)前賬號下執(zhí)行非指定行為。這會危害終端用戶的數(shù)據(jù)與操作安全。如果目標(biāo)終端用戶的賬號用于管理員權(quán)限,整個Web應(yīng)用都會收到威脅。
2:減少內(nèi)建的PHP模塊執(zhí)行下面指令可以查看當(dāng)前PHP所編譯的模塊
$ php -m
樣例輸出:
[PHP Modules] apc bcmath bz2 calendar Core ctype curl date dom ereg exif fileinfo filter ftp gd gettext gmp hash iconv imap json libxml mbstring memcache mysql mysqli openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar readline Reflection session shmop SimpleXML sockets SPL sqlite3 standard suhosin tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zip zlib [Zend Modules] Suhosin
從性能與安全性的角度考慮,我建議使用PHP時減少不必要的模塊。例如上面的sqlite3是不必要的。那么可以通過刪除或重命名 /etc/php.d/sqlite3.ini 文件來取消它:
# 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
更多信息請查看:how to compile and reinstall php on Unix like operating system
3:防止PHP信息泄漏可以通過取消export_php,對PHP信息泄漏進(jìn)行限制。編輯/etc/php.d/security.ini如下:
expose_php=Off
expose_php會在HTTP Header中添加服務(wù)器上,包括版本在內(nèi)的PHP信息(例如X-Powered-By: PHP/5.3.3)。同時,PHP的全局統(tǒng)一標(biāo)識符也會暴露。如果export_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 ...
建議同時隱藏Apache版本等信息:ServerTokens and ServerSignature directives in httpd.conf to hide Apache version
4:最小化可載入的PHP模塊(動態(tài)Extension)PHP支持“Dynamic Extensions”。默認(rèn)情況下,RHEL會載入 /etc/php.d/ 目錄下的所有Extension模塊。如需啟用或取消某一模塊,只需把 /etc/php.d/ 目錄下配置文件把該模塊注釋掉。也可以把文件刪除或重命名該模塊的配置文件。為了最優(yōu)化PHP的性能和安全性,應(yīng)只啟用Web應(yīng)用所需的Extension。例如,用下面命令取消GD模塊:
# cd /etc/php.d/
# mv gd.{ini,disable}
# /sbin/service httpd restart
啟用則是:
# mv gd.{disable,ini}
# /sbin/service httpd restart
5:記錄所有PHP錯誤
不要把PHP錯誤信息輸出給所用用戶。編輯 /etc/php.d/security.ini,如下修改:
display_errors=Off
確保把所有錯誤信息記錄到日志文件
log_errors=On error_log=/var/log/httpd/php_scripts_error.log6:禁止文件上傳
為安全考慮,如下編輯 /etc/php.d/security.ini 取消文件上傳
file_uploads=Off
如用戶的確需要上傳文件,那么把它啟用,而后限制PHP接受的最大文件大小:
file_uploads=On # user can only upload upto 1MB via php upload_max_filesize=1M7:關(guān)閉遠(yuǎn)程代碼執(zhí)行
如果這個特性被啟動,PHP可以通過allow_url_fopen,在file_get_contents()、include、require中獲取諸如FTP或網(wǎng)頁內(nèi)容這些遠(yuǎn)程數(shù)據(jù)。程序員經(jīng)常忘記了對用戶輸入進(jìn)行過濾,而如果這些函數(shù)調(diào)用了這些數(shù)據(jù),則形成了注入漏洞。在基于PHP的Web應(yīng)用中,大量代碼中的注入漏洞都由此產(chǎn)生。可以通過編輯 /etc/php.d/security.ini 來關(guān)閉該特性:
allow_url_fopen=Off
除此之外,建議把allow_url_include也取消掉:
allow_url_include=Off8:啟用SQL安全模式
如下修改/etc/php.d/security.ini:
sql.safe_mode=On
當(dāng)此特性被啟用,mysql_connect() 和 mysql_pconnect() 會忽略傳入的所有參數(shù)。與此同時,你需要在代碼上做些相應(yīng)的修改。第三方以及開源應(yīng)用,如Wordpress,在sql.safe_mode 下可能無法正常工作。同時建議關(guān)閉5.3.x版本的PHP的 magic_quotes_gpc 過濾,因為它簡單粗暴又沒效率。使用 mysql_escape_string() 以及自定義的過濾函數(shù)會更好一些
magic_quotes_gpc=Off9:控制POST的數(shù)據(jù)大小
HTTP POST通常作為請求的一部分,被客戶端用于向Apache Web服務(wù)器發(fā)送數(shù)據(jù),如上傳文件或提交表單。攻擊者會嘗試發(fā)送超大的POST請求去消耗服務(wù)器的資源。如下編輯 /etc/php.d/security.ini 限制POST的最大大小:
; 在這里設(shè)置一個靠譜的數(shù)值 post_max_size=1K
這里設(shè)置了1K的最大大小。這個設(shè)置會影響到文件上傳。要上傳大文件,這個值需要比update_max_filesize 大。
建議在Apache中限制可用的請求方法,編輯 httpd.conf 如下:
10:資源控制(DoS控制)Order allow,deny ## Add rest of the config goes here... ##
設(shè)置每個PHP腳本的最大運(yùn)行時間。另外建議限制用于處理請求數(shù)據(jù)的最大時間,以及最大可用內(nèi)存數(shù)。
單位:秒max_execution_time = 30 max_input_time = 30 memory_limit = 40M11:為PHP安裝Suhosin高級保護(hù)系統(tǒng)
具體參考Suhosin項目頁:project page
12:取消危險的PHP函數(shù)PHP有大量可用于入侵服務(wù)器的函數(shù),如使用不當(dāng)則會成為漏洞。如下取消這些函數(shù):
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source13:PHP Fastcgi / CGI – cgi.force_redirect管理
PHP 可與 Fastcgi 協(xié)同工作。Fastcgi 可以減少 Web 服務(wù)器的內(nèi)存足跡(memory footprint),并改善PHP性能。可以參考這個來配置 Apache2+PHP+FastCGI。在這個配置中, cgi.force_redirect 會阻止用戶通過訪問URL來調(diào)用PHP。為安全考慮,啟用該特性:
; Enable cgi.force_redirect for security reasons in a typical *Apache+PHP-CGI/FastCGI* setup cgi.force_redirect=On14:PHP用戶與用戶組ID
mod_fastcgi是 Apache Web 服務(wù)的一個 cgi 模塊,可連接到外部的 FASTCGI 服務(wù)器。你需要確保 PHP 使用非 root 用戶運(yùn)行。若其使用 root 或是 UID 小于 100 的用戶權(quán)限,它就可以訪問,乃至操作系統(tǒng)文件。通過 Apache’s suEXEC 或 mod_suPHP,可在非特權(quán)用戶下執(zhí)行 PHP CGI。suEXEC 可以是 Apache 調(diào)用 CGI 程序的 user ID 不同于運(yùn)行 Apache 的user ID。如下:
# ps aux | grep php-cgi
樣例輸出:
phpcgi 6012 0.0 0.4 225036 60140 S Nov22 0:12 /usr/bin/php-cgi phpcgi 6054 0.0 0.5 229928 62820 S Nov22 0:11 /usr/bin/php-cgi phpcgi 6055 0.1 0.4 224944 53260 S Nov22 0:18 /usr/bin/php-cgi phpcgi 6085 0.0 0.4 224680 56948 S Nov22 0:11 /usr/bin/php-cgi phpcgi 6103 0.0 0.4 224564 57956 S Nov22 0:11 /usr/bin/php-cgi phpcgi 6815 0.4 0.5 228556 61220 S 00:52 0:19 /usr/bin/php-cgi phpcgi 6821 0.3 0.5 228008 61252 S 00:55 0:12 /usr/bin/php-cgi
可以通過spawn-fcgi來生成phpcgi用戶的遠(yuǎn)程或本地FastCGI進(jìn)程(前提是有這個用戶):
# spawn-fcgi -a 127.0.0.1 -p 9000 -u phpcgi -g phpcgi -f /usr/bin/php-cgi
現(xiàn)在可以配置Apache、Lighthttpd或Nginx Web服務(wù)調(diào)用運(yùn)行在 127.0.0.1:9000 的FastCGI。
15:限制PHP訪問文件系統(tǒng)open_basedir會限制PHP的運(yùn)行目錄,例如通過 fopen() 之類的函數(shù)可訪問的目錄。如果訪問的目錄不在 open_basedir之內(nèi),PHP會拒絕該訪問。不要使用軟鏈接作為工作區(qū)。例如,只允許訪問/var/www/html而非/var/www、/tmp或/etc目錄:
; 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:Session路徑
PHP Session用戶提供數(shù)據(jù)保存功能,以便后續(xù)訪問。這可以使應(yīng)用可定制性更強(qiáng),提升吸引力。所有Session相關(guān)的數(shù)據(jù)會被保存在session.save_path中。RHEL/CentOS/Fedora Linux的默認(rèn)設(shè)置如下:
session.save_path="/var/lib/php/session" ; Set the temporary directory used for storing files when doing file upload upload_tmp_dir="/var/lib/php/session"
確認(rèn)這個路徑在/var/www/html之外,且不可被其他系統(tǒng)用戶訪問:
# ls -Z /var/lib/php/
樣例輸出:
drwxrwx---. root apache system_u:object_r:httpd_var_run_t:s0 session
注:ls -Z會顯示SELinux的安全信息,如文件模式,user,group,安全信息,文件名等。
17:保證PHP,軟件及操作系統(tǒng)更新到最新維護(hù)Linux、Apache、PHP和MySQL服務(wù)器的一項重要工作是更新安全補(bǔ)丁。所有的PHP安全更新應(yīng)盡快進(jìn)行審查并更新。可使用如下命令(如果通過包管理器來安裝PHP):
# yum update
或
# apt-get update && apt-get upgrade
可以配置Red Hat / CentOS / Fedora Linux通過Email發(fā)送yum的包更新提醒,或是Debian / Ubuntu Linux下的apticron發(fā)送提醒。又或通過cron計劃任務(wù)進(jìn)行更新。
注:查看php.net以獲取最新的PHP版本信息
18:限制文件及目錄訪問確認(rèn)以 Apache 或 www 這種非 root 用戶運(yùn)行Apache。/var/www/html目錄下的 owner 也應(yīng)是非 root 用戶:
# chown -R apache:apache /var/www/html/
DocumentRoot 下的文件應(yīng)禁止運(yùn)行或創(chuàng)建。設(shè)置該目錄下的文件權(quán)限為0444(只讀):
# chmod -R 0444 /var/www/html/
設(shè)置該目錄下的所有文件夾權(quán)限為0445
# find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {}19:Apache、PHP、MySQL配置文件的寫入保護(hù)
使用chattr命令給這些配置文件加上寫入保護(hù):
# 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/
同樣可以為/var/www/html目錄加上寫入保護(hù)
# chattr +i /var/www/html/file1.php# chattr +i /var/www/html/20:使用Linux安全拓展(如SELinux)
Linux有各種安全方案來防止服務(wù)程序的錯誤配置或漏洞。盡可能使用SELinux或其他Linux安全方案限制網(wǎng)絡(luò)和程序。例如,SELinux為Linux內(nèi)核或Apache Web服務(wù)提供不同的安全策略。使用下面命令列出所有Apache保護(hù)信息:
# getsebool -a | grep httpd
樣例輸出:
allow_httpd_anon_write --> off allow_httpd_mod_auth_ntlm_winbind --> off allow_httpd_mod_auth_pam --> off allow_httpd_sys_script_anon_write --> off httpd_builtin_scripting --> on httpd_can_check_spam --> off httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> off httpd_can_network_memcache --> off httpd_can_network_relay --> off httpd_can_sendmail --> off httpd_dbus_avahi --> on httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off httpd_execmem --> off httpd_read_user_content --> off httpd_setrlimit --> off httpd_ssi_exec --> off httpd_tmp_exec --> off httpd_tty_comm --> on httpd_unified --> on httpd_use_cifs --> off httpd_use_gpg --> off httpd_use_nfs --> off
取消Apache cgi支持可以輸入:
# setsebool -P httpd_enable_cgi off
詳細(xì)參考:Red Hat SELinux guide
21:安裝Mod_securityModSecurity是一個開源的入侵檢測和防范的Web應(yīng)用引擎。安裝mod_security可以保護(hù)Apache和PHP應(yīng)用免受XSS和其他攻擊:
## A few Examples ## # Do not allow to open files in /etc/ SecFilter /etc/ # Stop SQL injection SecFilter "delete[[:space:]]+from" SecFilter "select.+from"22:如有可能,在Chroot Jail下運(yùn)行Apache / PHP
在Chroot Jail下運(yùn)行Apache / PHP可以最小化可能受到的損失,使其局限于文件系統(tǒng)下的一小塊。可以使用一般的chroot來配置Apache:chroot kind of setup with Apache。不過我建議使用FreeBSD jails、XEN,KVM或OpenVZ虛擬化。
23:使用防火墻限制傳出連接攻擊者會使用wget之類的工具從你的Web服務(wù)器下載文件。使用iptables來阻擋Apache用戶的傳出連接。ipt_owner模塊會為本地數(shù)據(jù)包的生成者分配不同角色。它只對OUTPUT chain有效。下面指令允許vivek用戶通過80端口進(jìn)行外部訪問:
/sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
下面的樣例則是阻擋所有 Apache 用戶的傳出連接,只允許smtp服務(wù)及spam識別API服務(wù)通過:
# .... /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 REJECT24:查看并審查日志
查看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
查看日志文件可以讓你知道服務(wù)器正在承受何種攻擊,并分析當(dāng)前安全級別是否足夠。啟用審查服務(wù)用于系統(tǒng)審查,可審查SELinux時間,驗證事件,文件修改,賬號修改等。建議使用Linux System Monitoring Tools來監(jiān)控Web服務(wù)器。
25:把服務(wù)分離到不同的服務(wù)器或虛擬機(jī)對于比較龐大的安裝配置,建議把運(yùn)行、數(shù)據(jù)庫、靜態(tài)與動態(tài)內(nèi)容分離到不同的服務(wù)器
/////////////// / ISP/Router / ////////////// | Firewall | +------------+ | LB01 | +------------+ +--------------------------+ | | static.lan.cyberciti.biz | +-----------------+--------------------------+ | phpcgi1.lan.cyberciti.biz| +--------------------------+ | phpcgi2.lan.cyberciti.biz| +--------------------------+ | mysql1.lan.cyberciti.biz | +--------------------------+ | mcache1.lan.cyberciti.biz| +--------------------------+
在不同的服務(wù)器或虛擬機(jī)下運(yùn)行不同的網(wǎng)絡(luò)服務(wù),這可以減少被入侵對其他服務(wù)的影響。例如,一個攻擊者入侵了Apache,那就可以訪問同一服務(wù)器下的其他服務(wù)(如MySQL,email服務(wù)等)。但在上述例子中則不會:
static.lan.cybercity.biz – 使用lighttpd或nginx存放js/css/images等靜態(tài)資源
phpcgi1.lan.cyberciti.biz和phpcgi2.lan.cyberciti.biz – Apache Web服務(wù)+PHP,用于生成動態(tài)內(nèi)容
mysql1.lan.cyberciti.biz – MySQL數(shù)據(jù)庫服務(wù)
mcache1.lan.cyberciti.biz – Memcached服務(wù)(MySQL的高速緩存系統(tǒng))。它使用libevent或epoll來適應(yīng)任意連接數(shù)。而且它使用的是非阻塞網(wǎng)絡(luò)IO。
LB01 – 一個Nginx服務(wù)器,用于Web及Apache前端的反向代理。所有的訪問連接會通過nginx代理服務(wù),被直接處理或分發(fā)到相應(yīng)的Web服務(wù)器。LB01提供簡單的負(fù)載均衡。
原文鏈接:Linux: 25 PHP Security Best Practices For Sys Admins
轉(zhuǎn)載自:伯樂在線 - Kroderia
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/11087.html
摘要:保證,軟件及操作系統(tǒng)更新到最新維護(hù)和服務(wù)器的一項重要工作是更新安全補(bǔ)丁。所有的安全更新應(yīng)盡快進(jìn)行審查并更新。啟用審查服務(wù)用于系統(tǒng)審查,可審查時間,驗證事件,文件修改,賬號修改 PHP是廣泛使用的開源服務(wù)端腳本語言。通過HTTP或HTTPS協(xié)議,Apache Web服務(wù)允許用戶訪問文件或內(nèi)容。服務(wù)端腳本語言的錯誤配置會導(dǎo)致各種問題。因此,PHP應(yīng)該小心使用。以下是為系統(tǒng)管理員準(zhǔn)備的,安全...
摘要:如果在學(xué)習(xí)過程中有什么問題可以關(guān)注我公眾號琉憶編程庫給我留言。有興趣可以深入學(xué)習(xí)最后附上學(xué)習(xí)的知識結(jié)構(gòu)圖譜,可以按著下面的這個知識結(jié)構(gòu)圖進(jìn)行學(xué)習(xí)不一定完整,更多資料,面試題,都可以關(guān)注公眾號琉憶編程庫獲取。 你好,是我——琉憶。PHP程序員面試系列圖書作者。 作為一名PHP開發(fā)者過來人,也是經(jīng)歷了菜鳥到老手的過程,在此給那些想學(xué)PHP的同學(xué)指條路,即使你是轉(zhuǎn)行學(xué)PHP一樣可以學(xué)會PHP...
摘要:不過細(xì)想想,我郵只有前端的選修課啥的,課程也不是那么就業(yè)導(dǎo)向。至少目前,很少有大公司完全把作為前后端通用的技術(shù)棧。不能把簡單看做是在服務(wù)端的延展。編譯這個思想在前端領(lǐng)域很重要不改變現(xiàn)有的語言環(huán)境同時進(jìn)行最佳的工程實踐。 P.S. 噴神請繞道,大神勿噴,不引戰(zhàn),不攻擊,不鉆牛角尖。 大二時第一次接觸前端。許多同學(xué)估計都想過要做一個網(wǎng)站,大部分又是從PHP開始的(誰讓它是世界上最好的語言呢...
摘要:和內(nèi)容無關(guān)的主題什么是信號信號就是事件發(fā)生時,對進(jìn)程的一種通知機(jī)制也叫軟件中斷。當(dāng)一個進(jìn)程收到信號后,內(nèi)核會暫停該進(jìn)程正在執(zhí)行的代碼,并跳轉(zhuǎn)到對應(yīng)的信號處理函數(shù)中,如果處理函數(shù)不中斷,執(zhí)行完處理函數(shù)后,會繼續(xù)執(zhí)行之前中斷的地方往下執(zhí)行。 今天晚上吃鹵煮,領(lǐng)桌的妹子問我,這玩意兒能吃么?我:你覺得能吃就能吃。。。和內(nèi)容無關(guān)的主題 什么是信號 信號就是事件發(fā)生時,對進(jìn)程的一種通知機(jī)制(也叫...
閱讀 2269·2021-11-23 09:51
閱讀 5656·2021-09-22 15:39
閱讀 3343·2021-09-02 15:15
閱讀 3492·2019-08-30 15:54
閱讀 2354·2019-08-30 15:53
閱讀 1397·2019-08-30 14:04
閱讀 2445·2019-08-29 18:33
閱讀 2363·2019-08-29 13:08