我通過jQuery獲取JSON格式的一些數據,然後我需要將它顯示給用戶,但是它容易受到XSS攻擊。我在這裏有什麼選擇,我應該在將數據放入數據庫之前去掉字符嗎?我正在使用的框架(Kohana)有一個漂亮的功能HTML::Chars();
,但因爲我用javascript顯示數據,所以我無法在那裏使用它。XSS向用戶顯示json時
一個選項似乎是通過每數組元素被json編碼並將HTML::Chars();
應用於它。它是唯一的選擇,如果是這樣,那麼最好的方法是什麼?
實施例:
- 用戶輸入的一些數據:
title, body
- 的數據被存儲到數據庫
- 然後一些其他用戶輸入網站,數據陣列從數據庫 採取並出口到JSON格式
- 我的jQuery腳本將json添加到我的頁面的 正文中。
代碼:
$(document).ready(function(){
$.ajax({
url: '/timeline/latest/1',
dataType: 'json',
success: function(data){
$.each(data, function(key, val) {
switch (val.type){
case 'post': // I have only made post so far
addPost(val);
break;
}
});
}
});
})
function addPost(val){
$('.content .timeline').prepend(val.title + '<br />' + val.body); // xss vulnerable
}
從數據庫獲取數據
<?php
class Controller_Timeline extends Controller{
public function Action_Latest(){
$parentID = $this->request->param('id');
$modelTimeline = new Model_Timeline();
// Here I get latest entries, big array
$latest = $modelTimeline->Latest($parentID);
// Response it and encode with JSON
$this->response->body(json_encode($latest));
}
}
我的解決辦法,到目前爲止是這樣的,之前我回聲出$最新的I通過陣列走,並應用抗XSS功能,但我不知道它有多優化:
array_walk($latest, function(&$latest){
foreach ($latest as &$key){
$key = HTML::chars($key);
}
});
如何是易受XSS攻擊? – 2012-04-26 10:47:26
如果我輸入JavaScript,它會執行它。例如:我在body字段中輸入'',它會在頁面上發出警報 – sed 2012-04-26 10:52:11
哦,我明白你的意思了,讓我給你寫信回答 – 2012-04-26 10:53:55