程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 跨越訪問之JSONP實踐

跨越訪問之JSONP實踐

編輯:關於JAVA

預備知識:

1.什麼是JSONP:JSONP(JSON with Padding)是一個非官方的協議,它允許在服務器端集成Script tags返回至客戶端,通過Javascript callback的形式實現跨域訪問(這僅僅是JSONP簡單的實現形式)。

2.為什麼使用JSONP:由於 JSON 只是一種含有簡單括號結構的純文本,因此許多通道都可以交換 JSON 消息。因為同源策略的限制,我們不能在與外部服務器進行通信的時候使用 XMLHttpRequest。而JSONP是一種可以繞過同源策略的方法,即通過使用 JSON 與

()正在說:\"\"

年齡:

話語:

JavaScript代碼片段:

/**

* 刷新信息

*/

function refreshPeopleInfo(people){

$('name').innerHtml=people.name;

$('age').innerHtml=people.age;

$('talking').innerHtml=people.talking;

}

/**

* 設置信息(年齡、話語)

*/

function setPeopleInfo(){

var newPeople=new Object();

newPeople.age=$F('newAge');

newPeople.talking=$F('newTalking');

var XMLHttp = new AJax.Request(

"/JSon/people/cleverpig",

{

method: 'post',

parameters: 'json='+encodeURIComponent(Object.toJSON(newPeople)),

onComplete: function(transport){

var retObj=transport.responseText.evalJSON();

$('name').innerHtml=retObj.name;

$('age').innerHtml=retObj.age;

$('talking').innerHtml=retObj.talking;

}

}

);

}

Event.observe(

'setButton',

'click',

setPeopleInfo,

false

);

這裡簡單的功能非常明確:在頁面裝載時調用服務端URL(/json/people/cleverpig/jsonp/refreshPeopleInfo)生成的腳本來刷新people這個Div裡面的數據項,而點擊“修改”按鈕便會將我們輸入的新屬性post到服務端,並接收服務端返回的JSON字符串更新頁面顯示。

運行截屏:

JSONP的安全問題:

我們可以使用若干種方法在 JavaScript 程序中動態地生成代碼。最著名的函數之一就是 eval() 函數,該函數允許您將任意字符串做為 Javascript 代碼執行。然而,肆無忌憚地使用該函數是非常危險的。遺憾的是,一些使用廣泛的 JavaScript 庫在內部直接使用 eval() 函數。

由於 JSON 是以 JavaScript 的一個子集為基礎的,所以腳本內容會潛在地包含惡意代碼。然而,JSON 是JavaScript 的一個安全的子集,不含有賦值和調用。因此,許多 Javascript 庫使用 eval() 函數將 JSON 轉換成 JavaScript 對象。要利用這點,攻擊者可以向這些庫發送畸形的 JSON 對象,這樣 eval() 函數就會執行這些惡意代碼。可以采取一些方法來保護 JSON 的使用。這裡提供一種方法:使用 RFC 4627 中所定義的正則表達式確保 JSON 數據中不包含活動的部分。

下面 演示了如何使用正則表達式檢查 JSON 字符串:

var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(

text.replace(/"(\\.|[^"\\])*"/g, '' ''))) &&

eval(''('' + text + '')'');

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved