数据表编码HTML

时间:2014-10-08 16:20:55

标签: jquery datatables

我在Laravel网络应用上使用了jQuery Datatables。我使用了packagist chumper/datatable来处理Datatables服务器处理。

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

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

1 个答案:

答案 0 :(得分: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元素的内容,以便td元素将数据显示为文本(HTML编码)。