2016-11-14 51 views
1

很晚到遊戲 -編碼一個對象而不是每個屬性

我剛剛開始思考我的網站上的XSS。不幸的是,在幾個地方我創建了我通過Ajax傳遞的對象:

var params = {}; 
params.firstName = $("#firstName").val(); 
params.lastName = $("#lastName").val(); 

$.ajax({url:url, data:params}).done(); 

任何人都可以用可執行JS編寫。現在,從我讀過,我可以輕鬆地做這個改變這種情況:

var params = {}; 
params.firstName = encodeURIComponent($("#firstName").val()); 
params.lastName = encodeURIComponent($("#lastName").val()); 

$.ajax({url:url}, data:params).done(); 

但不是通過每一個創建對象和encodeURIComponent方法包裝各個領域的地方去---有什麼辦法直接在參數上而不是在每個屬性上直接轉義字符?

感謝您的任何有用的提示。

更新:當內容類型:application/x-www-form-urlencoded; charset = UTF-8然後表單數據被自動編碼。

+3

我認爲jQuery的實際執行此爲您 – aw04

+1

出於安全雖然,逃避所有這些字符的服務器 - 方,而不是客戶端。在客戶端上轉義它使得XSS變得更加困難,但它仍然完全可能並且不那麼困難。 – nicovank

+0

@nicovank - 是的,非常好的一點。所有的端點也將得到保護。我只是把它作爲一個額外的措施,因爲我認爲UI應該對XSS採取一些措施。 – fumeng

回答

-1

像這樣的東西會工作:

function encodeParams(data) { 
    Object.keys(data).forEach(function(key) { 
     data[key] = encodeURIComponent(data[key]); 
    }); 

    return data; 
} 

你可以使用像這樣:

var params = encodeParams({ 
    firstName: $('firstName').val(), 
    lastName: $('lastName').val() 
}); 

ajax(...) 
相關問題