=Start=
缘由:
最近在写一个前端展示页面,用到了DataTables进行表格展示,发现如果使用不当的话可能存在安全问题(一个搞安全的自己写的东西出了安全问题,想想就觉得丢人……),所以在解决了之后整理记录一下,方便以后参考。
正文:
参考解答:
本文将讨论与DataTables直接相关的Web安全攻击,以及如何应对这些攻击的方法。网络安全是一个非常广泛的话题,在这里涵盖所有的话题是不可能的。有关Web和软件安全性的更多一般信息,请参阅更全面、优秀的OWASP站点。
和DataTables直接相关的Web安全问题主要有2类:
- XSS(跨站脚本攻击)
- CSRF(跨站请求伪造攻击)
其它的漏洞,比如:未授权访问、越权、SQL注入,主要是和使用了DataTables的网站后台相关,所以这里暂不讨论。
预防XSS攻击(有两种方法):
- 【输入层面】禁止提交任何有害数据;
- 【输出层面】使用渲染函数对所有不受信任的输出进行编码。
在使用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攻击(一种方法):
- 使用有效的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版本
参考链接:
- http://www.chenjianjx.com/myblog/entry/datatables-to-prevent-xss-attack
- https://datatables.net/manual/security
- https://datatables.net/manual/data/renderers
=END=
《 “预防DataTables使用中的安全问题” 》 有 8 条评论
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 引发的跨域问题
跨域发请求。
`
1. Warning: Invalid JSON response
https://datatables.net/manual/tech-notes/1
`
错误原因:响应数据不是有效的JSON数据库。
`
AwesomeXSS – 优秀的 XSS 资源收集仓库
https://github.com/UltimateHackers/AwesomeXSS
前端安全知识
http://blog.404mzk.com/qian-duan-an-quan-zhi-shi.html
如何让前端更安全?——XSS攻击和防御详解
https://mp.weixin.qq.com/s/6ChuUdOm7vej8vQ3dbC8fw
运营商劫持
https://js8.in/2017/08/04/Web%E5%89%8D%E7%AB%AF%E9%A1%B5%E9%9D%A2%E5%8A%AB%E6%8C%81%E5%92%8C%E5%8F%8D%E5%8A%AB%E6%8C%81/
XSS Fuzzer – XSS Payloads 在线生成工具
https://xssfuzzer.com/
XSS 测试用例集合
https://brutelogic.com.br/knoxss.html
在输入格式有限的情况下如何进行XSS利用
https://brutelogic.com.br/blog/xss-limited-input-formats/
跨域方式及其产生的安全问题
https://xz.aliyun.com/t/4470
`
前言
同源策略
概念
作用
跨域数据传输的方式
document.domain
window.name
location.hash
PostMessage
JSONP
CORS
参考
`
全面分析前端的网络请求方式
https://mp.weixin.qq.com/s/enzhVDrG1Op6oomecbXcMw
`
一、前端进行网络请求的关注点
大多数情况下,在前端发起一个网络请求我们只需关注下面几点:
传入基本参数( url,请求方式)
请求参数、请求参数类型
设置请求头
获取响应的方式
获取响应头、响应状态、响应结果
异常处理
携带 cookie设置
跨域请求
二、前端进行网络请求的方式
form表单、 ifream、刷新页面
Ajax – 异步网络请求的开山鼻祖
jQuery – 一个时代
fetch – Ajax的替代者
axios、request等众多开源库
三、关于网络请求的疑问
Ajax的出现解决了什么问题
原生 Ajax如何使用
jQuery的网络请求方式
fetch的用法以及坑点
如何正确的使用 fetch
如何选择合适的跨域方式
四、Ajax的出现解决了什么问题
五、原生Ajax的用法
六、jQuery对Ajax的封装
七、jQuery的替代者
八、fetch的使用
九、fetch polyfill源码分析
十、fetch的坑点
十一、对fetch的封装
十二、跨域总结
`