安全方面知識

什么是文件上傳漏洞


文件上傳漏洞是指
由于程序員在對用戶文件上傳部分的控制不足或者處理缺陷,而導致的用戶可以越過其本身權限向服務器上上傳可執行的動態腳本文件
這里上傳的文件可以是木馬,病毒,惡意腳本或者WebShell等。
這種攻擊方式是最為直接和有效的,“文件上傳”本身沒有問題,有問題的是文件上傳后,服務器怎么處理、解釋文件。如果服務器的處理邏輯做的不夠安全,則會導致嚴重的后果。

解析漏洞
攻擊者在利用上傳漏洞時,通常會與Web容器的解析漏洞配合在一起

造成文件上傳漏洞的原因
對于上傳文件的后綴名(擴展名)沒有做較為嚴格的限制
對于上傳文件的MIMETYPE(用于描述文件的類型的一種表述方法) 沒有做檢查
權限上沒有對于上傳的文件目錄設置不可執行權限,(尤其是對于shebang類型的文件)
對于web server對于上傳文件或者指定目錄的行為沒有做限制

防止上傳漏洞兩種策略
客戶端檢測:客戶端使用JS檢測,在文件未上傳時,就對文件進行驗證
服務器端檢測:檢測文件擴展名是否合法,檢測文件中是否嵌入惡意代碼

如何檢驗有沒有解析漏洞
上傳要求(正確的)的文件類型
上傳帶有腳本的偽造成 txt,jpg 文件上傳驗證

前端檢測繞過方法
繞過前臺腳本檢測擴展名,就是將所要上傳文件的擴展名更改為符合腳本檢測規則的擴展名,通過工具,截取數據包,并將數據包中文件擴展名更改回原來的,達到繞過的目的
如果是JS腳本檢測,在本地瀏覽器客戶端禁用JS即可。可使用火狐瀏覽器的NoScript插件、IE中禁用掉JS等方式實現

檢查擴展名
在文件被上傳到服務端的時候,對于文件名的擴展名進行檢查,如果不合法,則拒絕這次上傳
檢查擴展名是否合法的時候,有兩種策略:
1.黑名單策略,文件擴展名在黑名單中的為不合法
2.白名單策略,文件擴展名不在白名單中的均為不合法
黑名單、白名單哪種更安全?
白名單策略是更加安全的,通過限制上傳類型為只有我們接受的類型,可以較好的保證安全,因為黑名單我們可以使用各種方法來進行注入和突破
原理:當瀏覽器將文件提交到服務器端的時候,服務器端會根據設定的黑白名單對瀏覽器提交上來的文件擴展名進行檢測,如果上傳的文件擴展名不符合黑白名單的限制,則不予上傳,否則上傳成功

導致文件上傳漏洞的根本原因在于服務把用戶上傳的本應是數據的內容當作了代碼,一般來說,用戶上傳的內容都會被存儲到特定的一個文件夾下,比如我們很多人習慣于放在 ./upload/ 下面要防止數據被當作代碼執行,我們可以限制web server對于特定文件夾的行為
在默認情況下,對與 .php文件Apache會當作代碼來執行,對于 html,css,js文件,則會直接由HTTP Response交給客戶端程序對于一些資源文件,比如txt,doc,rar等等,則也會以文件下載的方式傳送的客戶端。我們希望用戶上傳的東西僅僅當作資源和數據而不能當作代碼
因此可以使用服務器程序的接口來進行限制

防范文件上傳漏洞常見的幾種方法:
1.文件上傳的目錄設置為不可執行
只要web容器無法解析該目錄下面的文件,即使攻擊者上傳了腳本文件,服務器本身也不會受到影響,因此這一點至關重要。
2.判斷文件類型
在判斷文件類型時,可以結合使用MIME Type、后綴檢查等方式。在文件類型檢查中,強烈推薦白名單方式,黑名單的方式已經無數次被證明是不可靠的。此外,對于圖片的處理,可以使用壓縮函數或者resize函數,在處理圖片的同時破壞圖片中可能包含的HTML代碼。
3.使用隨機數改寫文件名和文件路徑
文件上傳如果要執行代碼,則需要用戶能夠訪問到這個文件。在某些環境中,用戶能上傳,但不能訪問。如果應用了隨機數改寫了文件名和路徑,將極大地增加攻擊的成本。再來就是像shell.php.rar.rar和crossdomain.xml這種文件,都將因為重命名而無法攻擊。
4.單獨設置文件服務器的域名
由于瀏覽器同源策略的關系,一系列客戶端攻擊將失效,比如上傳crossdomain.xml、上傳包含Javascript的XSS利用等問題將得到解決。
-------------------------------------------------------------


XSS

?

又叫CSS(Cross Site Scripting),即跨站腳本攻擊,指攻擊者在網頁中嵌入客戶端腳本,通常是JavaScript編寫的惡意代碼,當用戶使用瀏覽器被嵌入惡意代碼的網頁時,惡意代碼將會在用戶的瀏覽器上執行
產生的原因
?Web應用程序對用戶的輸入過濾不嚴而產生的

危害
網絡釣魚,包括竊取各類用戶賬號
竊取用戶cookie
竊取用戶瀏覽會話
強制彈出廣告頁面、刷流量
網頁掛馬
提升用戶權限,進一步滲透網站
傳播跨站腳本蠕蟲等

類型
反射型XSS
存儲型XSS
DOM XSS

反射型跨站腳本也稱做非持久型、參數型跨站腳本、這類型的腳本是最常見的,也是使用最為廣泛的一種
可以將惡意的腳本附加到URL地址的參數
例如:http://www.xxcc.com/search.php?key=“><script>alert(“xss”)</script>
一般使用將構造好的URL發給受害者,使受害者點擊觸發,而且只執行一次,非持久化
或者將惡意腳本附加到帶參數的輸出函數中

什么是存儲型XSS
當用戶提交一段XSS代碼后,被服務器端接收并存儲,當攻擊者再次訪問某個頁面時,這段XSS代碼被程序讀出來響應給瀏覽器,造成XSS跨站攻擊

什么情況容易出現存儲型XSS
運行用戶存儲數據的Web應用程序

存儲型XSS漏洞,一次提交之后,每當有用戶訪問這個頁面都會受到XSS攻擊,危害巨大。

手工檢測
輸入一些敏感字符,如“<、>、’、()”,提交后查看HTML源代碼,看這些是否被轉義
全自動檢測XSS
借助于掃描工具
awvs、netsparke、appscan、burpsuit、xsser、xsscrapy、brutexssr、OWASP Xenotix

通用的補充性防御手段?
在輸出html時,加上Content Security Policy的Http Header?
(作用:可以防止頁面被XSS攻擊時,嵌入第三方的腳本文件等)
(缺陷:IE或低版本的瀏覽器可能不支持)
?2.在設置Cookie時,加上HttpOnly參數?
(作用:可以防止頁面被XSS攻擊時,Cookie信息被盜取,可兼容至IE6)?
(缺陷:網站本身的JS代碼也無法操作Cookie,而且作用有限,只能保證Cookie的安全)
?3.在開發API時,檢驗請求的Referer參數?
(作用:可以在一定程度上防止CSRF攻擊)
?(缺陷:IE或低版本的瀏覽器中,Referer參數可以被偽造)
-------------------------------------------------------------


什么是SQL注入漏洞


通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令

SQL 注入帶來的威脅主要有如下幾點
猜解后臺數據庫,這是利用最多的方式,盜取網站的敏感信息
繞過認證,例如繞過驗證登錄網站后臺
注入可以借助數據庫的存儲過程進行提權等操作?? ?

SQL注入方法
通過字符串注入
猜測:猜表名,猜列名,猜數據庫名等等
后臺身份驗證繞過漏洞

實驗步驟:
猜字段
猜數據庫名字
猜用戶名
猜數據庫版本
猜當前操作系統
猜數據庫表名
獲取用戶名和密碼

如何防御
使用參數化的過濾性語句
輸入驗證
錯誤消息處理
加密處理
存儲過程來執行所有的查詢
使用專業的漏洞掃描工具
保數據庫安全
-------------------------------------------------------------


什么是瀏覽器安全


瀏覽器端具備安全功能

為什么提瀏覽器安全
作為客戶端,如果具備安全功能,就可以像安全軟件一樣對用戶上網起到較好的保護作用
瀏覽器安全也成為瀏覽器廠商之間競爭的底牌,能夠針對安全建立起技術門檻,以獲得競爭優勢

同源策略總結:
瀏覽器的同源策略是瀏覽器安全的基礎,理解同源策略對于客戶端腳本攻擊有著重要意義。同源策略一旦出現漏洞被繞過,也將帶來非常嚴重的后果,很多基于同源策略制定的安全方案都將失去效果

同源策略的意義
限制了來自不同源的“document”或腳本,對當前“document”讀取或設置某些屬性
舉例:
如果沒有同源策略,可能a.com的一段JS腳本,在b.com未曾加載此腳本時,也可以隨意涂改b.com的頁面(在瀏覽器的顯示中)。為了不讓瀏覽器的頁面行為發生混亂,瀏覽器提出了“Origin”(源)這一概念來自不同Origin的對象無法互相干擾

為什么瀏覽器要使用同源策略
主要目的是為了安全,瀏覽器中JS的同源策略決定了,當瀏覽器認為來自不同源時,請求被拒絕
如果沒有同源限制,在瀏覽器中的cookie等其他數據可以任意讀取,不同域下的DOM任意操作,ajax任意請求其他網站的數據,包括隱私數據

掛馬:在網頁中插入一段惡意代碼,利用瀏覽器漏洞執行任意代碼的攻擊方式,被稱為“掛馬”
“掛馬”是瀏覽器需要面對的一個主要威脅,近年來,獨立于殺毒軟件之外,瀏覽器廠商根據掛馬的特點研究出了一些對抗掛馬的技術

典型對抗掛馬的技術
多進程架構
將瀏覽器的各個功能模塊分開,各個瀏覽器實例分開,當一個進程崩潰時,不會影響到其他的的進程
Google Chrome主要進程有:瀏覽器進程、渲染進程、插件進程、擴展進程等
插件進程如flash、java、pdf等于瀏覽器進程嚴格隔離,因此不會互相影響

沙箱(Sandbox):泛指“資源隔離類模塊”的代名詞
設計沙箱的目的:
讓不可信任的代碼運行在一定的環境中,限制不可信任的代碼訪問隔離去之外的資源
如果一定要跨越沙箱邊界產生數據交換,則只能通過指定的數據通道,比如經過封裝的API來完成,在這些API中會嚴格檢查請求的合法性

很多時候“掛馬”攻擊在實施時會在一個正常的網頁中通過<script>或者<iframe>等標簽加載一個惡意網址
除了加載惡意網址外,瀏覽器端還有沒有別的威脅
釣魚網站
詐騙網站
為了保護用戶安全,瀏覽器廠商紛紛推出各自的攔截惡意網址功能
目前各個瀏覽器的攔截惡意網址的功能都是基于“黑名單”的
-------------------------------------------------------------


什么是點擊劫持(ClickJacking)


攻擊者使用一個透明的、不可見的iframe,覆蓋在一個網頁上,然后誘使用戶在該網頁上進行操作,此時用戶將在不知情的情況下點擊透明的iframe頁面。通過調整iframe的位置,可以誘使用戶恰好點擊在iframe頁面的一些功能性按鈕上

主要有:
點擊劫持概述
攻擊者使用一個透明的、不可見的iframe,覆蓋在一個網頁上,然后誘使用戶在該網頁上進行操作,此時用戶將在不知情的情況下點擊透明的iframe頁面。通過調整iframe的位置,可以誘使用戶恰好點擊在iframe頁面的一些功能性按鈕上
Flash點擊劫持
攻擊者通過Flash構造出點擊劫持
圖片覆蓋攻擊
通過調整圖片的style使得圖片能夠覆蓋在他所指定的任意位置

觸屏劫持是一種視覺上的欺騙,如何防御?
通過禁止跨域的iframe來防范
寫一段 JS 代碼,以禁止iframe的嵌套,這種方法叫frame busting(框架破壞),如 :
if(top.location != location){
?? ?top.location = self.location;
}

其他防御方法
HTML5中iframe的sandbox屬性
IE中iframe的security屬性等,都可以限制iframe頁面中JS腳本的執行,從而使得frame busting失效
Firfox中的“Content Security Policy”以及Firfox的NoScript擴展也能有效防御觸屏劫持

觸屏劫持相對于XSS、CSRF來說,因為需要誘使用戶與頁面產生交互行為,因此實施攻擊的成本更高,在網絡犯罪中比較少見
但是,未來觸屏劫持仍然有可能被攻擊者利用在釣魚、欺詐和廣告作弊等方面,不可不察
-------------------------------------------------------------


什么是CSRF


全名:Cross Site Request Forgery(跨站點請求偽造)
攻擊者通過盜用身份,并用盜用來的身份發送惡意請求
CSRF能夠做什么?
以盜用者身份發送郵件,發消息,盜取賬號,甚至用于購買商品,虛擬貨幣轉賬等等
?造成的問題包括:個人隱私泄露以及財產安全

怎樣防御CSRF攻擊?
CSRF的防御可以從服務端和客戶端兩方面著手
防御效果是從服務端著手效果比較好
現在一般的CSRF防御也都在服務端進行
服務端進行CSRF防御
服務端的CSRF方式方法很多樣,但總的思想都是一致的,就是在客戶端頁面增加偽隨機數
在表單里增加Hash值,以認證這確實是用戶發送的請求;然后在服務器端進行Hash值驗證
方法二:驗證碼
方法三:One-Time Tokens(不同的表單包含一個不同的偽隨機值)
在實現One-Time Tokens時,需要注意一點: “并行會話的兼容”。如果用戶在一個站點上同時打開了兩個不同的表單,CSRF保護措施不應該影響到他對任何表單的提交
如果每次表單被裝入時站點生成一個偽隨機值來覆蓋以前的偽隨機值將會發生什么情況?
用戶只能成功地提交他最后打開的表單,因為所有其他的表單都含有非法的偽隨機值。必須小心操作以確保CSRF保護措施不會影響選項卡式的瀏覽或者利用多個瀏覽器窗口瀏覽一個站點
-------------------------------------------------------------


HTML5新增一些標簽和屬性,使得XSS等Web攻擊產生了新的變化


iframe的sandbox
<iframe>標簽一直以來都存在隱患,如:掛馬、XSS、點擊劫持等;瀏覽器廠商也一直在想辦法限制iframe執行腳本的權限,比如:跨窗口訪問會有限制,以及IE中支持security屬性限制腳本的執行
HTML5中,專門為iframe定義了一個新的屬性,叫sandbox。使用sandbox這一屬性后,<iframe>標簽加載的內容將被視為一個獨立的“源”,其中的腳本將被禁止執行,表單將被禁止提交,插件被禁止加載,指向其他瀏覽器對象的鏈接也會被禁止

Cross—Origin—Resource Sharing
瀏覽器的同源策略限制了腳本的跨域請求,但互聯網的發展趨勢越來越開放,因此跨域訪問的需求也變得越來越迫切,同源策略給Web開發者帶來了很多困擾
開發者不得不想方設法地實現一些“合法”的跨域技術,由此誕生了jsonp、iframe跨域等技巧,W3C委員會決定制定一個新的標準來解決日益迫切的跨域訪問問題
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445038.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445038.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445038.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CE游戲外掛工具

CHEAT ENGINE(以下簡稱CE)是我見過的最優秀的游戲作弊工具。它的優點多不勝數&#xff0c;雖然單獨從搜索游 戲里面的數值來說&#xff0c;它并不比其他同類軟件強多少&#xff0c;但它不僅僅是個游戲修改工具&#xff0c;它還有其他游戲修改軟件所沒有的一些特點&#xff0c;例…

外掛編程-動作模擬技術

幾乎所有的游戲都有大量繁瑣和無聊的攻擊動作以增加玩家的 功力,還有那些數不完的迷宮,這些好像已經成為了角色游戲的代名詞。現在,外掛可以幫助玩家從這些繁瑣而無聊 的工作中擺脫出來。 1. 鼠標模擬技術 幾乎所有的游戲中都使用了鼠標來改變角色的位置和方向,玩家僅用…

算法(13)-leetcode-explore-learn-數據結構-鏈表小結

leetcode-explore-learn-數據結構-鏈表51.小結2.例題2.1合并兩個有序鏈表思路1:迭代思路2:遞歸2.2 兩數相加2.3 扁平化多級雙向鏈表2.4 復制帶隨機指針的鏈表2.5 旋轉鏈表本系列博文為leetcode-explore-learn子欄目學習筆記&#xff0c;如有不詳之處&#xff0c;請參考leetcode…

leetcode121買賣股票的最佳時機

給定一個數組&#xff0c;它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多只允許完成一筆交易&#xff08;即買入和賣出一支股票&#xff09;&#xff0c;設計一個算法來計算你所能獲取的最大利潤。 注意你不能在買入股票前賣出股票。 示例 1: 輸入: [7,1,5,3,6,…

epoll的內核實現

epoll是由一組系統調用組成。 int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout); select/poll的缺點在于&#xff1…

算法(14)-數據結構-二叉樹

leetcode-explore-learn-數據結構-二叉樹10.概述1.深度優先遍歷dfs1.1先序遍歷-中左右1.2中序遍歷-左中右1.3后序遍歷-左右中2.廣度優先遍歷bfs3.遍歷-常見問題3.1 二叉樹的最大深度自頂向下自底向上3.2對稱二叉樹3.3路徑總和4.重構-常見問題4.1根據中序和后序遍歷序列構造二叉…

多進程魚多線程的權衡選擇

最近有好多人在網上問道做游戲開發框架用多線程還是多進程呢,或者兩者之間的優缺點,等等類似的問題。下邊小高就帶您小小分析一下: 1、首先要明確進程和線程的含義:進程(Process)是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,是系統進行資源分配和調度的一…

leetcode322 零錢兌換

給定不同面額的硬幣 coins 和一個總金額 amount。編寫一個函數來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額&#xff0c;返回 -1。 示例 1: 輸入: coins [1, 2, 5], amount 11 輸出: 3 解釋: 11 5 5 1 示例 2: 輸入: coins [2],…

給數據減肥 讓MySQL數據庫跑的更快

在數據庫優化工作中&#xff0c;使數據盡可能的小&#xff0c;使表在硬盤上占據的空間盡可能的小&#xff0c;這是最常用、也是最有效的手段之一。因為縮小數據&#xff0c;相對來說可以提高硬盤的讀寫速度&#xff0c;并且在查詢過程中小表的內容處理時所占用的系統資源比較少…

算法(15)-leetcode-explore-learn-數據結構-運用遞歸解決二叉樹的問題

leetcode-explore-learn-數據結構-二叉樹2本系列博文為leetcode-explore-learn子欄目學習筆記&#xff0c;如有不詳之處&#xff0c;請參考leetcode官網&#xff1a;https://leetcode-cn.com/explore/learn/card/data-structure-binary-tree/2/traverse-a-tree/7/

leetcode538 把二叉搜索樹轉換成累加樹

給定一個二叉搜索樹&#xff08;Binary Search Tree&#xff09;&#xff0c;把它轉換成為累加樹&#xff08;Greater Tree)&#xff0c;使得每個節點的值是原來的節點值加上所有大于它的節點值之和。 對于每一個點來說&#xff0c;自己的父&#xff0c;和自己父的右子樹都是大…

AWK常用命令華(1)

awk 調用: 1.調用awk:

AWk的調用精華

awk 的調用方式 awk 提供了適應多種需要的不同解決方案,它們是: 一、awk 命令行,你可以象使用普通UNIX 命令一樣使用awk,在命令行中你也可以使用awk 程序設計語言,雖然awk 支持多行的錄入,但是錄入長長的命令行并保證其正 確無誤卻是一件令人頭疼的事,因此,這種方法一般…

算法(16)-leetcode-explore-learn-數據結構-二叉樹總結

leetcode-explore-learn-數據結構-二叉樹3本系列博文為leetcode-explore-learn子欄目學習筆記&#xff0c;如有不詳之處&#xff0c;請參考leetcode官網&#xff1a;https://leetcode-cn.com/explore/learn/card/data-structure-binary-tree/2/traverse-a-tree/7/所有例題的編程…

leetcode15 三數之和

給定一個包含 n 個整數的數組 nums&#xff0c;判斷 nums 中是否存在三個元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;找出所有滿足條件且不重復的三元組。 注意&#xff1a;答案中不可以包含重復的三元組。 例如, 給定數組 nums [-1, 0, 1,…

AWK再次認識--內置的參數,以及編寫腳本

原本這是篇給公司內同事寫的培訓文章&#xff0c;對于初學awk的人還蠻有幫助&#xff0c;貼到這里與大家共享一下。 〇、前言 意見反饋&#xff0c;請mailto:datouwanggmail.com。 一、AWK簡介 AWK名字來源于三位創造者Aho、Weinberger和Kernighan統稱。 AWK擅長處理文本數據。…

AWk高級編程

首先再說一說awk的工作流程還是有必要的 : 執行awk時, 它會反復進行下列四步驟. 1. 自動從指定的數據文件中讀取一個數據行. 2. 自動更新(Update)相關的內建變量之值. 如 : NF, NR, $0... 3. 依次執行程序中所有 的 Pattern { Actions } 指令. 4. 當執行完程序中所有 Pattern {…

leetcode19. 刪除鏈表的倒數第N個節點

給定一個鏈表&#xff0c;刪除鏈表的倒數第 n 個節點&#xff0c;并且返回鏈表的頭結點。 示例&#xff1a; 給定一個鏈表: 1->2->3->4->5, 和 n 2. 當刪除了倒數第二個節點后&#xff0c;鏈表變為 1->2->3->5. 說明&#xff1a; 給定的 n 保證是有效…

python模塊(5)-Matplotlib 簡易使用教程

Matplotlib簡易使用教程0.matplotlib的安裝1.導入相關庫2.畫布初始化2.1 隱式創建2.2 顯示創建2.3 設置畫布大小2.4 plt.figure()常用參數3.plt. 能夠繪制圖像類型3.1等高線3.2 箭頭arrow4.簡單繪制小demodemo1.曲線圖demo2-柱狀、餅狀、曲線子圖5.plt.plot()--設置曲線顏色,粗…

random_shuffle 和transform算法

1)STL中的函數random_shuffle()用來對一個元素序列進行重新排序(隨機的),函數原型如下: std::random_shuffle