2014-10-08 22 views
3

我在我的Laravel网络应用程序上使用jQuery Datatables。我使用packagist chumper/datatable来处理Datatables服务器处理。Datatables encode HTML

不幸的是,我发现了严重的安全问题,即XSS(跨站点脚本)。 服务器返回JSON数据,客户端将数据加载到表中而不会转义它们。

如何让客户端在将数据加载到表中之前转义数据?

回答

2

fnCreatedRow是一个回调函数,用于在创建行之后处理表格行元素。我们可以使用这个回调函数修改行之前将行插入到HTML文档中。

我用chumper/datatable生成这样的功能:

$table = Datatable::table() 
    ->addColumn('ID', 'Username', 'Name', 'Email', 'Actions') 
    ->setUrl(URL::to('admin/users/data')) 
    ->setOptions(array('aoColumns' => array(array('sType' => 'numeric'), null, null, null, array('bSortable' => false)))) 
    ->setCallbacks('fnCreatedRow', 
     'function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
      for (var i = 1; i < 4; i++) jQuery("td:eq(" + i + ")", nRow).text(aData[i]); 
     }' 
    ) 
    ->noScript();  
return View::make('admin.users.index', compact('table')); 

我用fnCreatedRow所以td元件显示为文本(HTML编码)数据,以修改每个td元素的含量。