Publié à l'aide de Google Docs
jQuery傳送json給php接收, php再傳送json回jQuery
Mise à jour automatique effectuée toutes les 5 minutes

[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