我在Laravel网络应用上使用了jQuery Datatables。我使用了packagist chumper/datatable
来处理Datatables服务器处理。
不幸的是,我发现了严重的安全问题,即XSS(跨站点脚本)。 服务器返回JSON数据,客户端将数据加载到表而不转义它们。
如何在将数据加载到表中之前让客户端转义数据?
答案 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编码)。