[jQuery 部份]jQuery 傳送 json 給 php
var car = new Array('toyota','BenZ','mazada',"<script>alert(1);</script>");(這裡刻意放一個XSS陷阱,稍後會提到它)
var json = JSON.stringify(car); (將陣列轉換成json格式)
$.ajax({
url: 'index.php/ajax_load/content_loading/',
type: "POST",
dataType: "json", (一定要加上)
contentType: "application/json; charset=utf-8", (可加可不加)
data: json, (傳送 json 變數)
error: function(xhr) {
alert('request error!'); (錯誤提示, 發生錯誤時會執行此)
},
beforeSend: function(){
$('#loading').show(); (啟動ajax loading圖示)
},
success: function(response) {
$('#content').append(response); (接收php回傳的資料, 並且印出來, 回傳的 response 為陣列)
},
complete: function(){
$('#loading').hide(); (關閉ajax loading圖示)
}
});
[PHP部份] PHP 接收 jQuery 傳送來的 json 資料, 再擲回 json 給 jQuery
//header("Content-Type: application/json", true); (可加可不加)
BUG版 :
$value = json_decode(file_get_contents('php://input')); (取得JSON傳輸的值, 並且解析)
echo json_encode($value); (轉換json格式傳送到jQuery)
=>結果顯示 :
因為一開始我在陣列裡放了一個可造成XSS的語法(假設它為攻擊指令), 結果攻擊確實地執行了
所以我們要修正這個漏洞; 我使用 codeigniter , 所以我借助它提供的安全性函式來處理XSS
過濾版 :
$value = json_decode(file_get_contents('php://input'));
$data = $this->security->xss_clean($value); (過濾XSS語法)
echo json_encode($data);
=>結果顯示:
XSS語法確實地被過濾掉了:D