预防DataTables使用中的安全问题

=Start=

缘由:

最近在写一个前端展示页面,用到了DataTables进行表格展示,发现如果使用不当的话可能存在安全问题(一个搞安全的自己写的东西出了安全问题,想想就觉得丢人……),所以在解决了之后整理记录一下,方便以后参考。

正文:

参考解答:

本文将讨论与DataTables直接相关的Web安全攻击,以及如何应对这些攻击的方法。网络安全是一个非常广泛的话题,在这里涵盖所有的话题是不可能的。有关Web和软件安全性的更多一般信息,请参阅更全面、优秀的OWASP站点。

和DataTables直接相关的Web安全问题主要有2类:

  • XSS(跨站脚本攻击)
  • CSRF(跨站请求伪造攻击)

其它的漏洞,比如:未授权访问、越权、SQL注入,主要是和使用了DataTables的网站后台相关,所以这里暂不讨论。

预防XSS攻击(有两种方法):
  1. 【输入层面】禁止提交任何有害数据;
  2. 【输出层面】使用渲染函数对所有不受信任的输出进行编码。

在使用DataTables接收从ajax传过来的数据进行展示时,最有可能出现XSS漏洞,所以,这里使用针对【输出】进行编码的方法来预防XSS漏洞:

<script>
    $( document ).ready(function() {
        $('#someTable').DataTable({
            "processing"true,
            "serverSide"true,
            "ajax": {
                "url""/someUrl",
                "type""POST"
            },
            "columns": [
                 "data""c1" },
                 "data""c2" },
                 ...
            ],
            "columnDefs": [
                {
                  "targets""_all"//针对所有列
                  "render""$.fn.dataTable.render.text()"//都使用render函数编码
                }
            ],
        });
    });
</script>
注意事项:
  • $.fn.dataTable.render.text 这个功能是在 1.10.10 这个版本加上的,早先版本不支持,参考链接
预防CSRF攻击(一种方法):
  1. 使用有效的token;

设置方法(有三种):

// 设置一个全局header(这确保了来自页面的所有Ajax请求都有CSRF token)
$.ajaxSetup( {
    headers: {
        'CSRFToken': TOKEN
    }
} );
// 将token作为ajax配置的header进行提交
$('#myTable').DataTable( {
    ajax: {
        url: '...',
        headers: {
            'CSRFToken': TOKEN
        }
    }
} );
// 将token作为请求数据的一部分进行提交
$('#myTable').DataTable( {
    ajax: {
        url: '...',
        data: function ( d ) {
            d.CSRFToken = TOKEN;
        }
    }
} );

 

如何查看当前页面加载的jQuery/DataTables版本?
  • $().jquery #查看jQuery版本
  • $.fn.dataTable.version #查看DataTables版本
参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3777.html

《预防DataTables使用中的安全问题》上有2条评论

  1. 7. Warning: Ajax error
    https://datatables.net/manual/tech-notes/7

    DataTables warning: table id=xxx - Ajax error. For more information about this error, please see http://datatables.net/tn/7

    当 DataTables 使用 ajax 选项来加载数据时,如果服务器给出的是除有效的HTTP 2xx响应以外的任何其他响应,则都可能会触发此常规错误。此时可以通过Chrome控制台调试错误。

    最常见的错误原因有:
    404 - Not Found.
    检查URL的请求参数,看是否因为请求参数错误导致的404 Not Found。

    500 - Internal Error.
    服务器在响应请求时遇到错误。检查服务器的错误日志,了解发生此错误的原因。

    因 Access-Control-Allow-Origin 引发的跨域问题
    跨域发请求。

发表评论

电子邮件地址不会被公开。 必填项已用*标注