PHP安全之簡(jiǎn)介和總則
PHP 作為一種強(qiáng)大的語(yǔ)言,無(wú)論是以模塊還是 CGI 的方式安裝,它的解釋器都可以在服務(wù)器上訪問(wèn)文件、運(yùn)行命令以及創(chuàng)建網(wǎng)絡(luò)連接等。這些功能也許會(huì)給服務(wù)器添加很多不安全因素,但是只要正確地安裝和配置 PHP,以及編寫(xiě)安全的代碼,那么 PHP 相對(duì)于 Perl 和 C 來(lái)說(shuō),是能創(chuàng)建出更安全的 CGI 程序的。而且,也可以在可用性和安全性之間找到一個(gè)很好的平衡點(diǎn)。
PHP 可能會(huì)被用在很多不同的方面,因此,PHP 內(nèi)置的選項(xiàng)以方便用戶對(duì)其進(jìn)行配置。雖然眾多的選項(xiàng)可以使 PHP 完成很多工作,但是對(duì)這些選項(xiàng)的設(shè)定以及對(duì)服務(wù)器的配置很可能會(huì)產(chǎn)生安全問(wèn)題。
PHP 的選項(xiàng)與其語(yǔ)法一樣,具有很高的靈活性。使用 PHP,可以在只有 shell 用戶權(quán)限的環(huán)境下創(chuàng)建完善的服務(wù)器端程序,或者在被嚴(yán)格限制環(huán)境下使用它來(lái)完成服務(wù)器端包含(Server-Side Includes)而無(wú)需承但太大的風(fēng)險(xiǎn)。如何建立這樣一種環(huán)境,其安全性如何,很大程度上取決于 PHP 的開(kāi)發(fā)者。
本章以一些常規(guī)的安全建議作開(kāi)頭,講述如何在不同的環(huán)境下盡可能地提高安全性,以及介紹對(duì)于不同安全級(jí)別的一些編程原則。
總則絕對(duì)安全的系統(tǒng)是不存在的,因此安全業(yè)界常用的方法有助于平衡可用性和風(fēng)險(xiǎn)。對(duì)用戶提交的每一個(gè)變量都進(jìn)行雙重驗(yàn)證可能是一個(gè)很負(fù)責(zé)任的行為,但會(huì)導(dǎo)致用戶必須花很多時(shí)間去填寫(xiě)一張復(fù)雜無(wú)比的表格,從而迫使某些用戶嘗試?yán)@過(guò)安全機(jī)制。
最好的安全機(jī)制應(yīng)該能在不防礙用戶,并且不過(guò)多地增加開(kāi)發(fā)難度的情況下做到能滿足需求。實(shí)際上,一些安全問(wèn)題往往會(huì)發(fā)生在這種過(guò)度強(qiáng)化安全機(jī)制的系統(tǒng)上。
不要忘記著名的等強(qiáng)原則:一個(gè)系統(tǒng)的的強(qiáng)度是由它最薄弱的環(huán)節(jié)決定的(相當(dāng)于木桶原理)。如果所有的事務(wù)都基于時(shí)間、地點(diǎn)、事務(wù)種類(lèi)進(jìn)行詳細(xì)的記錄,而用戶驗(yàn)證卻只依靠一個(gè) cookie,那么用戶所對(duì)應(yīng)的事務(wù)記錄的可信度就被大大剝?nèi)趿恕?/p>
調(diào)試代碼的時(shí)候一定要記住,就算是一個(gè)簡(jiǎn)單的頁(yè)面也很難對(duì)所有可能發(fā)生的情況進(jìn)行檢測(cè):對(duì)你不滿的雇員不一定會(huì)輸入如你所愿的東西,黑客也有足夠的時(shí)間研究你的系統(tǒng),當(dāng)然,你的寵物貓也會(huì)跳到你的鍵盤(pán)上。這就是為什么必須檢查所有的代碼,去發(fā)現(xiàn)哪里可以引入不正當(dāng)?shù)臄?shù)據(jù),然后對(duì)代碼改進(jìn)、簡(jiǎn)化或者增強(qiáng)。
互聯(lián)網(wǎng)上充滿了為了成名而破壞你的代碼、攻擊你的網(wǎng)站并輸入不正當(dāng)數(shù)據(jù)的人,總之他們會(huì)使你的生活充滿樂(lè)趣。無(wú)論是大網(wǎng)站還是小網(wǎng)站,只要能和互聯(lián)網(wǎng)連接,就會(huì)成為一個(gè)目標(biāo)。很多黑客程序并不理會(huì)網(wǎng)站的大小,只會(huì)機(jī)械地掃描 IP 地址并找尋受害者。我們希望那個(gè)不要是你。
相關(guān)文章:
1. 以PHP代碼為實(shí)例詳解RabbitMQ消息隊(duì)列中間件的6種模式2. Python 如何將integer轉(zhuǎn)化為羅馬數(shù)(3999以內(nèi))3. python web框架的總結(jié)4. 詳解Python模塊化編程與裝飾器5. Python通過(guò)format函數(shù)格式化顯示值6. html小技巧之td,div標(biāo)簽里內(nèi)容不換行7. python裝飾器三種裝飾模式的簡(jiǎn)單分析8. Python如何進(jìn)行時(shí)間處理9. Python實(shí)現(xiàn)迪杰斯特拉算法過(guò)程解析10. python使用ctypes庫(kù)調(diào)用DLL動(dòng)態(tài)鏈接庫(kù)
