




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
WEB安全PHP安全基礎詳解Web安全定義
隨著Web2.0、社交網(wǎng)絡、微博等等一系列新型的互聯(lián)網(wǎng)產(chǎn)品的誕生,基于Web環(huán)境的互聯(lián)網(wǎng)應用越來越廣泛,企業(yè)信息化的過程中各種應用都架設在Web平臺上,Web業(yè)務的迅速發(fā)展也引起黑客們的強烈關注,接踵而至的就是Web安全威脅的凸顯,黑客利用網(wǎng)站操作系統(tǒng)的漏洞和Web服務程序的SQL注入漏洞等得到Web服務器的控制權限,輕則篡改網(wǎng)頁內(nèi)容,重則竊取重要內(nèi)部數(shù)據(jù),更為嚴重的則是在網(wǎng)頁中植入惡意代碼,使得網(wǎng)站訪問者受到侵害。這也使得越來越多的用戶關注應用層的安全問題,對Web應用安全的關注度也逐漸升溫。web安全的定義根據(jù)攻擊手段來分,我們把它分為如下兩類:
1)服務安全,確保網(wǎng)絡設備的安全運行,提供有效的網(wǎng)絡服務。2)數(shù)據(jù)安全,確保在網(wǎng)上傳輸數(shù)據(jù)的保密性、完整性和可用性等。攻擊手段1、SQL注入:即通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執(zhí)行惡意的SQL命令,比如先前的很多影視網(wǎng)站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊。2、跨站腳本攻擊(也稱為XSS):指利用網(wǎng)站漏洞從用戶那里惡意盜取信息。用戶在瀏覽網(wǎng)站、使用即時通訊軟件、甚至在閱讀電子郵件時,通常會點擊其中的鏈接。攻擊者通過在鏈接中插入惡意代碼,就能夠盜取用戶信息。3、網(wǎng)頁掛馬:把一個木馬程序上傳到一個網(wǎng)站里面然后用木馬生成器生一個網(wǎng)馬,再上到空間里面,再加代碼使得木馬在打開網(wǎng)頁里運行。4、DNS攻擊:黑客使用常見的洪水攻擊,阻擊DNS服務器,導致DNS服務器無法正常工作,從而達到域名解析失敗,造成網(wǎng)站無法訪問。章第1簡介1、php的功能全局變量注冊register_globals開啟,任何使用未初始化變量的行為幾乎就意味著安全漏洞,第一,它會增加安全漏洞的數(shù)量;第二,隱藏了數(shù)據(jù)的來源,與開發(fā)者需要隨時跟蹤數(shù)據(jù)的責任相違背。錯誤報告PHP的錯誤報告功能將協(xié)助您確認和定位這些錯誤??梢訮HP提供的這些詳細描述也可能被惡意攻擊者看到,這就不安全了,使用合適的錯誤報告。2、原則深度防范堅持深度防范原則要求您時刻有一個備份方案。如果一個安全措施失效了,必須有另外一個提供一些保護。盡管深度防范是一個合理的原則,但是過度地增加安全措施只能增加成本和降低價值。最小權限不必要的授權會加大你的風險,即使是增加了很小權限也會如此。風險最小化是安全程序開發(fā)的主要組成部分。簡單就是美復雜容易滋生錯誤,錯誤能導致安全漏洞。能很簡單明了的,就不要寫的太復雜。暴露的最小化數(shù)據(jù)暴露不一定就意味著安全風險。可是數(shù)據(jù)暴露必須盡量最小化。為了降低對敏感數(shù)據(jù)的暴露率,你必須確認什么數(shù)據(jù)是敏感的,同時跟蹤它,并消除所有不必要的數(shù)據(jù)暴露。3、方法平衡風險與可用性用戶操作的友好性與安全措施是一對矛盾,在提高安全性的同時,通常會降低可用性。在你為不合邏輯的使用者寫代碼時,必須要考慮到符合邏輯的正常使用者。要達到適當?shù)钠胶獾拇_很難,但是你必須去做好它。跟蹤數(shù)據(jù)在審核PHP代碼是否有安全漏洞時,主要檢查代碼中與外部系統(tǒng)交互的部分,最重要的一件事就是隨時跟蹤數(shù)據(jù)。不只是要知道它是什么和它在哪里,還要知道它從哪里來,要到哪里去。過濾輸入過濾是Web應用安全的基礎。它是你驗證數(shù)據(jù)合法性的過程。通過在輸入時確認對所有的數(shù)據(jù)進行過濾,你可以避免被污染(未過濾)數(shù)據(jù)在你的程序中被誤信及誤用。大多數(shù)流行的PHP應用的漏洞最終都是因為沒有對輸入進行恰當過濾造成的。輸入轉(zhuǎn)義輸出轉(zhuǎn)義具體分為三步:l
識別輸出l
輸出轉(zhuǎn)義l
區(qū)分已轉(zhuǎn)義與未轉(zhuǎn)義數(shù)據(jù)1、表單與數(shù)據(jù)任何來自遠程數(shù)據(jù)源的數(shù)據(jù)都是輸入,而所有的輸入數(shù)據(jù)都是被污染的,必須在要在使用前對其進行過濾。2、語義url攻擊這類攻擊主要包括對URL進行編輯以至發(fā)現(xiàn)一些有趣的事情。
例如,如果用戶chris點擊了你的軟件中的一個鏈接并到達了頁面/private.php?user=chris,很自然地他可能會試圖改變user的值,看看會發(fā)生什么。例如,他可能訪問/private.php?user=admin來看一下他是否能看到其他人的信息。對用戶輸入的不信任做法是防止你的應用產(chǎn)生漏洞的關鍵。5、跨站請求偽造跨站請求偽造(CSRF)是一種允許攻擊者通過受害者發(fā)送任意HTTP請求的一類攻擊方法。它是指所有攻擊者通過偽造他人的HTTP請求進行攻擊的類型。已知的攻擊方法同時包括對GET和POST的攻擊,所以不要認為只要嚴格地只使用POST方式就行了。這會危害終端用戶的數(shù)據(jù)與操作安全。如果目標終端用戶的賬號用于管理員權限,整個Web應用都會收到威脅。防止跨站點請求偽造:一般來說,確保用戶來自你的表單,并且匹配每一個你發(fā)送出去的表單。有兩點一定要記?。簩τ脩魰挷捎眠m當?shù)陌踩胧?,例?給每一個會話更新id和用戶使用SSL。生成另一個一次性的令牌并將其嵌入表單,保存在會話中(一個會話變量),在提交時檢查它。6、欺騙表單提交欺騙表單攻擊是不能防止的,盡管這看起來有點奇怪,但事實上如此。不過這你不需要擔心。一旦你正確地過濾了輸入,用戶就必須要遵守你的規(guī)則,這與他們?nèi)绾翁峤粺o關。7、http請求欺騙一個比欺騙表單更高級和復雜的攻擊方式是HTTP請求欺騙。這給了攻擊者完全的控制權與靈活性,它進一步證明了不能盲目信任用戶提交的任何數(shù)據(jù)。再次強調(diào)了過濾輸入的重要性和HTTP請求提供的任何信息都是不可信的這個事實。1、訪問權限暴露
數(shù)據(jù)庫使用中需要關注的主要問題之一是訪問權限即用戶名及密碼的暴露。2、sql注入
SQL注入是PHP應用中最常見的漏洞之一。事實上令人驚奇的是,開發(fā)者要同時犯兩個錯誤才會引發(fā)一個SQL注入漏洞,一個是沒有對輸入的數(shù)據(jù)進行過濾(過濾輸入),還有一個是沒有對發(fā)送到數(shù)據(jù)庫的數(shù)據(jù)進行轉(zhuǎn)義(轉(zhuǎn)義輸出)。這兩個重要的步驟缺一不可,需要同時加以特別關注以減少程序錯誤。
防止SQL注入:使用mysql_real_escape_string()過濾數(shù)據(jù),手動檢查每一數(shù)據(jù)是否為正確的數(shù)據(jù)類型,使用預處理語句并綁定變量,使用準備好的預處理語句,分離數(shù)據(jù)和SQL邏輯,預處理語句將自動過濾(如:轉(zhuǎn)義)3、數(shù)據(jù)的暴露
關于數(shù)據(jù)庫,另外需要關心的一點是敏感數(shù)據(jù)的暴露。不管你是否保存了信用卡號,社會保險號,或其它數(shù)據(jù),你還是希望確認數(shù)據(jù)庫是安全的。
你可以加密最敏感的數(shù)據(jù),這樣只要密鑰不泄露,數(shù)據(jù)庫的安全問題就不會造成災難性的后果。章第4會話與cookies1、cookies盜竊因使用Cookie而產(chǎn)生的一個風險是用戶的cookie會被攻擊者所盜竊。如果會話標識保存在cookie中,cookie的暴露就是一個嚴重的風險,因為它能導致會話劫持。防止cookie盜竊的手段是通過防止跨站腳本漏洞和檢測導致cookie暴露的瀏覽器漏洞相結合。2、會話數(shù)據(jù)暴露會話數(shù)據(jù)常會包含一些個人信息和其它敏感數(shù)據(jù)?;谶@個原因,會話數(shù)據(jù)的暴露是被普遍關心的問題。一般來說,暴露的范圍不會很大,因為會話數(shù)據(jù)是保存在服務器環(huán)境中的,而不是在數(shù)據(jù)庫或文件系統(tǒng)中。因此,會話數(shù)據(jù)自然不會公開暴露。使用SSL是一種特別有效的手段,它可以使數(shù)據(jù)在服務器和客戶端之間傳送時暴露的可能性降到最低。3、會話固定關于會話,需要關注的主要問題是會話標識的保密性問題。如果它是保密的,就不會存在會話劫持的風險了。通過一個合法的會話標識,一個攻擊者可以非常成功地冒充成為你的某一個用戶。PHP生成的是隨機性很強的會話標識,所以被猜測的風險是不存在的。然而,PHP可以接受一個會話ID通過一個Cookie或者URL。因此,欺騙一個受害者可以使用一個特定的(或其他的)會話ID或者釣魚攻擊常見的是通過捕獲網(wǎng)絡通信數(shù)據(jù)以得到會話標識。為了避免會話標識被捕獲的風險,可以使用SSL,同時還要對瀏覽器漏洞及時修補。4、會話劫持最常見的針對會話的攻擊手段是會話劫持。它是所有攻擊者可以用來訪問其它人的會話的手段的總稱。所有這些手段的第一步都是取得一個合法的會話標識來偽裝成合法用戶,因此保證會話標識不被泄露非常重要。前面幾節(jié)中關于會話暴露和固定的知識能幫助你保證會話標識只有服務器及合法用戶才能知道。如果你不希望依賴于檢查User-Agent的一致性。你可以生成一個隨機的標記:
<?php
$token=md5(uniqid(rand(),TRUE));
$_SESSION['token']=$token;
?>防止會話捕獲和劫持,更新ID,如果使用會話,請確保用戶使用SSL章第5包含2、后門url
后門URL是指雖然無需直接調(diào)用的資源能直接通過URL訪問。在某些情況下,這些腳本可能執(zhí)行一個重要的操作,這就增大了風險。
為了防止后門URL,你需要確認把所有包含文件保存在網(wǎng)站主目錄以外。所有保存在網(wǎng)站主目錄下的文件都是必須要通過URL直接訪問的。3、文件名操縱在很多情形下會使用動態(tài)包含,此時目錄名或文件名中的部分會保存在一個變量中。<?php
include"/cache/{$_GET['username']}.html";
?>/index.php?username=../admin/users/index.php?username=../etc/passwd%004、代碼注入
代碼注入是利用計算機漏洞通過處理無效數(shù)據(jù)造成的。問題出在,當你不小心執(zhí)行任意代碼,通常通過文件包含。寫得很糟糕的代碼可以允許一個遠程文件包含并執(zhí)行。如許多PHP函數(shù),如include可以包含URL或文件名:<?phpinclude"{$_GET['path']}/header.inc";?>/index.php?pat...%2Fevil.inc%3F在上例中,path的值是URL編碼過的,原值如下:/evil.inc?這就導致了include語句包含并執(zhí)行了攻擊者所選定的腳本(evil.inc),同時原來的文件名/header.inc會被認為是一個請求串:
<?php
include"/evil.inc?/header.inc";
?>只要在include和require語句前對數(shù)據(jù)進行過濾即可防止這種情況的發(fā)生:<?php
$clean=array();
/*$_GET['path']被過濾并存儲在$clean['path'].*/
include"{$clean['path']}/header.inc";
?>防止代碼注入:過濾用戶輸入,在php.ini中設置禁用allow_url_fopen和allow_url_include。這將禁用require/include/fopen的遠程文件。1、文件系統(tǒng)跨越無論你用什么方法使用文件,你都要在某個地方指定文件名。在很多情況下,文件名會作為fopen()函數(shù)的一個參數(shù),同時其它函數(shù)會調(diào)用它返回的句柄:
<?php
$handle=fopen('/path/to/myfile.txt','r');
?>
當你把被污染數(shù)據(jù)作為文件名的一部分時,漏洞就產(chǎn)生了:
<?php
$handle=fopen("/path/to/{$_GET['filename']}.txt",'r');
?>basename()函數(shù)在檢查是否有不必要的路徑時非常有用:<?php
$clean=array();
if(basename($_GET['filename'])==$_GET['filename'])
{
$clean['filename']=$_GET['filename'];
}else
{
/*...*/
}
$handle=fopen("/path/to/{$clean['filename']}.txt",'r');
?>2、遠程文件風險PHP有一個配置選項叫allow_url_fopen,該選項默認是有效的。它允許你指向許多類型的資源,并像本地文件一樣處理。例如,通過讀取URL你可以取得某一個頁面的內(nèi)容(HTML):
<?php
$contents=file_get_contents('/');
?><?php
$clean=array();
$html=array();
/*FilterInput($_GET['filename'])*/
$contents=file_get_contents($clean['filename']);
/*FilterInput($contents)*/
$html['contents']=htmlentities($clean['contents'],ENT_QUOTES,'UTF-8');
echo$html['contents'];
?>章第7驗證與授權1、暴力攻擊限制在上次驗證失敗后對同一用戶再試嘗試的頻率。如果在一次嘗試失敗后的15秒內(nèi)再次嘗試,不管密碼是否正確,驗證都會失敗。這就是這個方案的關鍵點。但簡單地在一次失敗嘗試后15秒內(nèi)阻止訪問還是不夠的——在此時不管輸入是什么,輸出也會是一致的,只有在登錄成功后才會不同。否則,攻擊者只要簡單地檢查不一致的輸出即可確定登錄是否成功。2、密碼嗅探使用SSL可以有效地防止HTTP請求和回應不被暴露。3、重播攻擊重播攻擊,有時稱為演示攻擊,即攻擊者重現(xiàn)以前合法用戶向服務器所發(fā)送的數(shù)據(jù)以獲取訪問權或其它分配給該用戶的權限。4、永久登陸你應該堅持從三個方面來限制永久登錄cookie的使用。
l
Cookie需在一周內(nèi)(或更少)過期l
Cookie最好只能用于一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物營養(yǎng)學與其他學科的關聯(lián)試題及答案
- 二手車評估與風險防控的結合試題及答案
- 重視藥物使用中的患者反饋試題及答案
- 考前沖刺2024食品質(zhì)檢員考試試題及答案
- 食品質(zhì)量問題源頭追溯與考核試題及答案
- 汽車維修工專業(yè)術語解析試題及答案
- 全新視覺傳播設計相關試題及答案
- 浙江省北斗聯(lián)盟2021-2022學年高一下學期期中聯(lián)考生物試題(含答案)
- 汽車動力轉(zhuǎn)向系故障分析試題及答案
- 重慶市綦江區(qū)聯(lián)盟校2023-2024學年八年級下學期期中考試英語試題(含答案)
- 娛樂場所安全管理制度與應急預案
- Python試題庫(附參考答案)
- 《項脊軒志》 高中語文
- 2024年全國眼視光行業(yè)眼鏡驗光員技能大賽理論參考試題庫(含答案)
- 基于眼動追蹤的認知負荷評估
- 江蘇省南京市化學中考試題及解答參考(2024年)
- 化學鍵教學設計 人教版
- DL∕T 612-2017 電力行業(yè)鍋爐壓力容器安全監(jiān)督規(guī)程
- 2024年全國“紅旗杯”班組長大賽(復賽)備考試題庫(簡答、案例分析題)
- 傳統(tǒng)戲劇與人工智能的創(chuàng)新融合
- 2024年汽車裝調(diào)工技能競賽理論考試題庫500題(含答案)
評論
0/150
提交評論