詳解JSON和JSONP劫持檢測程式碼以及解決方法
json劫持
json劫持攻擊又為”JSON Hijacking”,攻擊過程有點類似於csrf,只不過csrf只管傳送http請求,但是json-hijack的目的是獲取敏感資料。
一些web應用會把一些敏感資料以json的形式返回到前端,如果僅僅透過cookie來判斷請求是否合法,那麼就可以利用類似csrf的手段,向目標伺服器傳送請求,以獲得敏感資料。
比如下面的連結在已登入的情況下會返回json格式的使用者資訊:
攻擊者可以在自己的虛假頁面中,加入如下標籤:
1 |
<script src= " " ></script> |
如果當前瀏覽器已經登入了,並且cookie未過期,然後訪問了攻擊者的虛假頁面,那麼該頁面就可以拿到json形式的使用者敏感資訊,因為script標籤會自動解析json資料,生成對應的js物件。然後再透過
1 |
Object.prototype.__defineSetter__ |
這個函式來觸發自己的惡意程式碼。
IIS7網站監控可以及時防控網站風險,快速準確監控網站是否遭到各種劫持攻擊,網站在全國是否能正常開啟(檢視域名是否被牆),精準的DNS汙染檢測,具備網站開啟速度檢測功能,第一時間知道網站是否被黑、被入侵、被改標題、被掛黑鏈。精益求精的產品,缺陷為零資料提供!
它可以做到以下功能:
1、 檢測網站是否被黑
2、檢測網站是否被劫持
3、檢測域名是否被牆
4、檢測DNS是否被汙染
5、網站真實的完全開啟時間(獨家)
6、擁有獨立監控後臺,24小時定時監控域名
官方地址:
官方圖:
但是這個函式在當前的新版本chrome和firefox中都已經失效了。
jsonp劫持
jsonp是一個非官方的協議,利用script元素的開放策略,網頁可以得到從其他來源動態產生的json資料,因此可以用來實現跨域。(關於JSONP可以參考我的博文: )
web程式如果透過這種方式跨域之後,攻擊者完全可以在自己的虛假頁面中發起惡意的jsonp請求,這就引來了安全問題。比如:
1 2 3 4 5 6 |
<script> function useUserInfo(v){ alert(v.username); } </script> <script src= " " ></script> |
如果伺服器端的userinfo介面支援jsonp,那就會使虛假頁面成功執行useUserInfo函式,從而導致安全問題。
解決方法
其實json劫持和jsonp劫持屬於CSRF( Cross-site request forgery 跨站請求偽造)的攻擊範疇,所以解決的方法和解決csrf的方法一樣。
1、驗證 HTTP Referer 頭資訊;
2、在請求中新增 csrfToken 並在後端進行驗證;
關於CSRF攻擊可以參考我的博文:
PS:JSONP劫持漏洞例項
getUser.php
1 2 3 4 5 6 7 8 |
<?php header( 'Content-type: application/json' ); $jsoncallback = htmlspecialchars( $_REQUEST [ 'jsoncallback' ]); //獲取回撥函式名 //json資料 //$json_data = '["id","user"]'; $json_data = '({"id":"1","name":"Aaron"})' ; echo $jsoncallback . "(" . $json_data . ")" ; //輸出jsonp格式的資料 ?> |
Payload利用:
客戶端實現 callbackFunction 函式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<!DOCTYPE html> < html > < head > < meta charset = "utf-8" > < title >JSONP劫持測試</ title > </ head > < body > < script type = "text/javascript" > function callbackFunction(result) { alert(result.name); } </ script > < script type = "text/javascript" src = " " ></ script > </ body > </ html > |
jQuery 使用 JSONP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!DOCTYPE html> < html > < head > < meta charset = "utf-8" > < title >JSONP劫持測試</ title > < script src = " " ></ script > </ head > < body > < div id = "divCustomers" ></ div >
< script type = "text/javascript" > $.getJSON(" ", function(getUsers){ alert(getUsers.name); }); </ script > </ body > </ html > |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989270/viewspace-2737888/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- dns劫持怎麼解決 dns劫持的解決方法DNS
- JSONP用法詳解JSON
- 程式碼混淆的原理和方法詳解
- Elasticsearch使用實戰以及程式碼詳解Elasticsearch
- 漏洞檢測方法如何選?詳解原始碼與二進位制SCA檢測原理原始碼
- JSON.parse 和 JSON.stringify 詳解JSON
- [lua][openresty]程式碼覆蓋率檢測的解決方式REST
- Jmeter json格式 unicode亂碼現象解決方法JMeterJSONUnicode
- 百度快照被劫持的原因及解決方法、百度快照劫持的解決方法全
- Servlet中request請求Get和Post方法以及亂碼解決Servlet
- 詳解微信域名防封的方法以及檢測等工具的技術原理
- JSON詳解JSON
- 本機被dns劫持了的解決方法DNS
- SQL隱碼攻擊問題以及解決方法SQL
- 貼片電感器發燙常見原因以及解決方法詳解
- oracle 密碼詳解以及破解Oracle密碼
- 網站被入侵 篡改程式碼劫持快照的解決辦法網站
- 使用 SRI 解決 CDN 劫持
- javaweb中中文亂碼解決方法總結之response和request解決方法JavaWeb
- 軟體測試與程式碼安全詳解
- 頁面劫持,頁面劫持,如果被頁面劫持了該怎麼去解決,方法分享
- 網站上傳漏洞掃描與檢測 以及webshell解決辦法網站Webshell
- 【目標檢測】2萬字詳解 RCNN系列 YOLO系列 YOLOv3程式碼實現全流程詳解 pytorchCNNYOLOPyTorch
- package.json 詳解PackageJSON
- package.json詳解PackageJSON
- HTML程式碼混淆技術:原理、應用和實現方法詳解HTML
- 微信域名檢測api介面分享與使用方法詳解API
- 人臉106和240點位檢測解決方案
- Linklist程式碼實現以及程式碼解讀
- 詳解數字影像的濾波和邊緣檢測
- Kubernetes服務pod的健康檢測liveness和readiness詳解
- STM CubeMx不能生成程式碼的解決方法
- Python3內建模組之json編碼解碼方法講解PythonJSON
- 好程式設計師web前端學習路線分享Jsonp詳解程式設計師Web前端JSON
- Bash漏洞檢測及解決方案
- SecurecRT亂碼怎麼辦?詳細解決方法分享~Securecrt
- maven依賴衝突以及解決方法Maven
- 怎麼檢測瀏覽器劫持,瀏覽器劫持的方法介紹瀏覽器