于JSONP
JSONP全稱是JSON with Padding,是基于JSON格式的為解決跨域請求資源而產生的解決方案。它的基本原理是利用HTML的元素標簽,遠程調用JSON文件來實現數據傳遞。如果想在a.com域下獲取b.com下的JSON數據(getUsers.JSON):
那么可以首先通過JSONP的“Padding”這個getUsers.JSON輸出為:
對于實際應用過程中callback的名稱,后臺實現是動態輸出的。上面例子用PHP實現如下:
然后在a.com使用<script>進行遠程調用,在jQuery中可以直接這樣調用:
然而,安全問題一直伴隨著業務發展,JSONP同樣帶來各種安全問題。本文就將梳理JSONP實現過程中的安全攻防。
JSON劫持
JSON劫持又稱“JSON Hijacking”,2008年國外安全研究人員開始提到由JSONP帶來的風險。這個問題屬于CSRF(Cross-site request forgery跨站請求偽造)攻擊范疇,當某網站通過JSONP的方式跨域(一般為子域)傳遞用戶認證后的敏感信息時,攻擊者可以構造惡意的JSONP調用頁面,誘導被攻擊者訪問,以達到截取用戶敏感信息的目的。一個典型的JSON Hijacking攻擊代碼如下:
這是烏云上報告的一個攻擊案例(WooYun-2012-11284),當被攻擊者登錄360網站并訪問該網頁時,個人隱私數據(如用戶名、郵箱等)可能被攻擊者劫持。
雖然這種攻擊已出現多年,但目前在大的門戶網站還普遍存在,而且由于安全意識薄弱,許多企業并未意識到這一問題的重要性。
不過許多甲方公司開始重視此類安全問題,著手研究解決方案。方案之一就是驗證JSON文件調用的來源(Referer)。它主要利用<script>遠程加載JSON文件時會發送Referer的機制,在網站輸出JSON數據時,判斷Referer是否包含在白名單內。這個方法理論上可行,但具體實現過程容易出現兩種邏輯問題。
【Referer過濾(正則)不嚴謹】
【空Referer】
在很多情況下,開發者部署過濾Referer來源時,忽視了空Referer的過濾。一般情況下瀏覽器直接訪問某URL是不帶Referer的,因此很多防御部署允許空Referer。恰恰由于這個疏忽,導致了整個防御系統奔潰,因為在通過跨協議調用JavaScript時,發送的HTTP請求中Referer為空。跨協議調用的一個簡單例子如下:
代碼中我們使用<iframe>調用JavaScript偽協議來實現空Referer調用JSON文件。
另外一種手段是通過隨機token防御,這項技術在騰訊的網站上應用較多,例如通過http://r.qzone.qq.com/cgi-bin/tfriend/friend_show_qqfriends.cgi?uin=[QQ號]&g_tk=[隨機token]輸出JSON。這個方案是有效的,但同樣存在防御實現不嚴謹的問題。例如此token可通過以下方式暴力破解:
當然,這些都是單純針對“JSON劫持”本身展開的攻防戰。在現實中,許多漏洞是相互配合實現突破的。例如上面提到的限制Referer+部署隨機token實現都很完美,理論上無懈可擊,但只要該網站存在XSS漏洞,就可能讓你的防御體系瞬間崩潰!這里順帶一提,以上是一些通用實現“JSON劫持”的方法,但現實中,某些瀏覽器的一些特有處理機制(如CSS加載、錯誤信息顯示等),也能引發類似“JSON劫持”(攻擊對象不一定是JSON)的攻擊。
callback可定義導致的安全問題
為了方便前端開發調用,輸出一般都是可定義的,前文提到的PHP實現的代碼:
就是因為可定義callback名輸出點,導致了各種安全問題。當然嚴格來說,里面提到的具體數據輸出也是可以利用的,只是本文重點強調callback這個輸出點。
【Content-Type與XSS漏洞】
在JSON剛出現時,大多數開發者還沒有良好的編碼習慣。輸出JSON時,沒有嚴格定義Content-Type(Content-Type: application/json),再加上callback輸出點沒有進行過濾,直接導致了一個典型的XSS漏洞,上文演示的getUsers.php就存在這個問題:
對Content-Type來說,早期還有一部分人比較喜歡使用application/javascript,而這個頭在IE等瀏覽器下一樣可以解析HTML導致XSS漏洞。對于這種類型的漏洞,防御主要從以下兩點部署。
a. 嚴格定義Content-Type: application/json
這樣的防御機制導致了瀏覽器不解析惡意插入的XSS代碼(直接訪問提示文件下載)。但凡事都有例外,在IE的進化過程中就曾出現通過一些技巧,可以繞過Content-Type防御解析HTML的事件,例如在IE6、7等版本請求的URL文件后加一個/x.html就可以解析HTML(http://127.0.0.1/getUsers.php/x.html?callback=<script>alert(/xss/)</script>),具體可參考http://hi.baidu.com/hi_heige/item/f1ecde01c4af3ed61ef04646。
b. 過濾callback以及JSON數據輸出
這種機制是比較傳統的攻防思維,對輸出點進行XSS過濾——又是一個看上去很完美的解決方案,但往往都“事與愿違”。2011年,一個utf7-BOM就復活了n個XSS漏洞。這種攻擊方式主要存在于IE中(新版IE已修復),當我們在callback點輸出+/v8這樣的utf7-BOM時,IE瀏覽器會把當前執行的編碼認為是utf7,因此我們通過utf7提交的XSS代碼會被自動解碼并執行。例如:
其中:
URLdecode為:
+/v8為utf7-BOM,其后為我們注入通過utf-7編碼后的XSS代碼:
<htm><body><script>alert(1);
</script></body></htm>。
利用utf7-BOM是一種非常有代表性的通用方法,除了升級IE進行防御,開發者也可直接指定Content-Type的編碼(Content-Type: application/json; charset=utf-8)。然而盡管如此,仍有繞過這些防御措施的可能。
上文提到的a、b兩種防御缺一都可能出現問題,那么我們使用“a+b方案”是否就萬無一失了呢?一切皆有可能,我們拭目以待。
其他文件格式(Content-Type)與JSON
【MHTML與JSONP】
2011年,IE曾出現一個通過MHTML協議解析跨域的漏洞:MHTML Mime-Formatted Request Vulnerability(CVE-2011-0096,https://technet.microsoft.com/library/security/ms11-026)。而當時的一種常見攻擊方式就是利用JSONP調用機制中的callback函數名輸出點:
它充分利用了callback輸出點直接輸出MHTML文件格式,然后利用<iframe>調用MHTML標簽解析并執行HTML及JavaScript代碼,這也是一個通用性的XSS漏洞(UXSS),隨后微軟緊急推出了解決方案及漏洞補丁程序。在微軟推出安全補丁前,這個漏洞已影響Google等大型網站,當時Google為了防御這類攻擊啟用的措施是,在JSON輸出callback時,在文件開頭增加了多個換行符,讓遠程MHTML調用時解析失敗。
在攻擊角度來說,它充分利用了計算機體系的各種文件格式識別機制。在這個思維的引導下,之后還出現過多次由文件格式加載帶來的安全問題,例如CSS文件格式加載導致的類“JSON劫持”,JavaScript加載及各種文件格式編碼帶來的安全問題等。歷史進程往往會出現各種驚人的相似,JSONP與文件格式的傳奇還在上演。
【FLASH與JSONP】
該來的終究會來,只是沒想到相似的場景上演得這么快。就在最近的一次Flash安全更新(security bulletin APSB14-17)中修復了一個安全漏洞:
These updates include additional validation checks to ensure that Flash Player rejects malicious content from vulnerable JSONP callback APIs (CVE-2014-4671).
這個漏洞因影響了Google、Facebook、Tumblr等大網站而備受媒體關注。其攻擊技術與JSONP的callback點息息相關。這個問題主要發生在HTML通過<embed>、<object>調用遠程Flash文件時,會直接忽視Content-Type,而JSONP的callback輸出一般都在文件開頭,那么完全可以通過callback點輸出一個swf的文件,然后遠程HTML調用并運行swf文件。例如:
這是早在2012年就提出的通過callback輸出的swf文件流,其實際效果是在被攻擊的網站上存放了一個惡意swf文件,HTML遠程調用這個swf文件,可直接導致CSRF攻擊。
細心的朋友可能發現,上面代碼callback輸出的swf文件流中存在各種特殊字符,通過前文提到的“b. 過濾callback以及JSON數據輸出”方案可以直接攔截,對于Goolge、Facebook這樣久經考驗的大網站來說,防御不在話下。
在Flash更新“security bulletin APSB14-17”發布后,該漏洞發現者給出了漏洞細節,其中一個亮點,就是作者實現了一個純alphanumeric輸出swf文件的方法:
因此,對于純alphanumeric輸出來說,那些針對XSS的過濾顯然可以直接忽略,這個漏洞也證明前文我們提到的“a+b方案”能被直接繞過。
防御
通過上面的攻防對抗演練,很多開發者可能會感覺有點悲劇,各種防御機制好像都有辦法繞過。這里我想到一個真理:沒有絕對的安全。那么我們防御的意義在哪里呢?我認為防御的意義就是雖然沒辦法讓程序最安全(絕對安全),但可以讓它更安全。提高攻擊者的技術成本和門檻是安全防御的一個主要并重要的思路。回到具體的JSONP防御上,可以總結如下幾點。
作者簡介:周景平,知道創宇首席安全官,曾是一名擁有5年多從業經驗的外科醫生,2012年加入知道創宇,轉行安全。網絡ID:Superhei(黑哥)
本文選自程序員電子版2014年8月刊,該期更多文章請查看這里。2000年創刊至今所有文章目錄請查看程序員封面秀。歡迎訂閱程序員電子版(含iPad版、Android版、PDF版)。
swf怎么轉換成mp4格式?各位小伙伴們有沒有遇到過想要打開swf文件卻需要安裝flash插件的情況呢?其實,swf文件是flash軟件或者animate軟件導出的flash軟件的專屬格式,主要應用于動畫設計領域,在網頁html設計中非常常見,但是對于非設計專業的小伙伴們來說可能會有些陌生。通常情況下,我們需要使用特定軟件才能打開這種格式的視頻文件。但是如果你想要更方便地觀看這類文件,就可以將它們轉換成兼容性更強的mp4格式。
不知道各位小伙伴會不會將swf格式轉換成mp4格式的操作,又會不會在操作的時候感到比較麻煩呢?那剛好,今天小編來幫大家解決這個問題,我們有詳細的操作方法,完全可以幫助大家解決swf文件怎么轉換成mp4的問題,下面就跟著小編一起來學習一下swf格式轉mp4格式的方法和具體操作吧!希望對大家有所幫助。
swf怎么轉換成mp4格式方法一:軟件工具【優速視頻處理大師】
工具下載地址:https://download.yososoft.com/YSVideos/YSVideos_TTY.exe
步驟1:首先需要打開電腦中的“優速視頻處理大師”軟件,并選擇所需的【格式轉換】功能。如果還沒有安裝這款軟件,需要先下載并完成安裝。
步驟2:點擊軟件中的【添加文件】按鈕,將需要轉換的swf視頻文件上傳到軟件中。文件上傳成功后,在軟件右側的格式下拉框中選擇需要轉換的視頻格式為“mp4”。
步驟3:設置完成后,點擊【開始轉換】按鈕,啟動軟件的格式轉換程序。在轉換結束后,系統會自動彈出輸出文件夾,方便用戶查看轉換后的文件。
swf怎么轉換成mp4格式方法二:使用在線轉換工具Convertio
第一步:上傳SWF文件并選擇輸出格式為MP4。
第二步:單擊“開始轉換”按鈕,在轉換完成后下載生成的MP4文件。
swf怎么轉換成mp4格式方法三:使用Zamzar
第一步:訪問Zamzar官網,然后上傳需要轉換的SWF文件。選擇輸出格式為MP4,并設置視頻參數、分辨率、質量和文件大小等選項。
第二步:輸入您的電子郵件地址,以便在轉換完成后接收通知。單擊“轉換”按鈕,在轉換完成后通過電子郵件下載生成的MP4文件。
swf怎么轉換成mp4格式方法四:使用FFmpeg
安裝FFmpeg軟件。運行命令行窗口,輸入命令:“ffmpeg -i input.swf output.mp4"。等待轉換過程完成,并檢查生成的MP4文件是否符合要求。
swf怎么轉換成mp4格式方法五:直接改文件后綴
打開電腦,找到需要轉換格式的swf格式視頻,選中該視頻文件后鼠標右鍵點擊重命名,將“.swf”后綴改為“.mp4”即可。
上面就是swf文件怎么轉換成mp4視頻的5個方法啦,不是很簡單嘛,學起來也非常容易。只需要按照這幾個步驟操作,就能快速地轉換視頻格式,方便省時。如果你有需要的話,也可以嘗試一下哦。好了,我們下期再見啦!
wf 是國外某公司的動畫設計軟件 Flash 專用格式。白話一點,swf 文件是 Flash 軟件或者 animate 軟件導出時的一種特殊的視頻格式,最常應用的場景是網頁 html 設計中,現在用得不多。
所以很多軟件不兼容此格式,無法播放這類格式的視頻。下面小編教大家三種方法將 swf 格式轉換成 mp4 格式。
推薦指數:☆☆☆☆☆
目前市面上有各種各樣的視頻轉碼軟件,既有付費的,也有免費的工具,無論是付費還是免費的,小編覺得最主要的是能否轉換,轉換之后是否會影響到視頻的質量,如視頻分辨率、音視頻是否同步等。下面以野蔥視頻轉換器為例,為大家講解一下。
這是一款多功能的視頻格式轉換軟件,它支持各種格式的視頻音頻文件轉換,并且操作簡單,即使是零基礎的電腦小白也能夠在短時間內學會操作,快速上手!下面就讓我們來看看該軟件具備什么特色吧!
1、支持豐富的文件格式
MP4、AVI、MKV、FLV、WMV、M4V、MOV等上百種視頻格式,并且支持自定義分辨率,如1080P、720P、4K等;
2、操作簡單、轉換效率高
借助這款工具如何實現格式轉換?四步操作就能夠幫你搞定:【選擇功能-上傳文件-設置參數-轉換完成】。另外這款軟件還支持批量轉換,能夠一次上傳多個視頻進行轉換操作,提高效率的同時也節省了不少時間。
3、功能豐富
除了視頻格式轉換之外,它還支持視頻分割合并、視頻轉GIF、視頻水印、視頻優化、視頻壓縮等功能。經常需要編輯視頻文件的小伙伴們有福了,用它就能夠實現很多操作哦!
推薦指數:☆☆☆
有一些小伙伴覺得電腦操作比較麻煩,目前市面上同樣有一些視頻轉碼的平臺可以在線處理,只是多數是國外的網站,可以轉換速度比較慢。
步驟 1:瀏覽器打開 Online-Convert,選擇對應的功能;
步驟 2:點擊中間那個云朵的箭頭,上傳需要轉換的視頻文件,下方是一些參數的設置,大家可以根據自己的需求選擇對應的參數;
步驟 3:視頻轉換完成后,會自動保存到本地,一般會在本地的「下載」中。
推薦指數:☆☆☆
VLC media Player 是一款國外的開源跨平臺多媒體播放器,可以兼容絕大多數市面上的視頻文件格式,由于存在一定技術門檻,所以不太適合小白用戶。
步驟 1:運行軟件 VLC media Player,進入軟件后點擊「Media」-「Convert/Save」;
步驟 2:點擊右側的「add」按鈕添加需要轉換的視頻文件,上傳成功后,左側的界面內會羅列出相關的視頻信息;
步驟 3:添加成功后設置好輸出格式、存儲路徑等相關參數,點擊「Start」即轉換。
以上就是分享給大家的「swf怎么轉換成mp4格式」三種方法,以及詳細的swf轉換成mp4的詳細操作步驟,你們都學會了嗎~
*請認真填寫需求信息,我們會在24小時內與您取得聯系。