我正在制作C#中的Chart.js JavaScript代码,并想知道XSS的潜力。
我将以下JS代码作为较大的HTML字符串的一部分倾倒:
var ctx = document.getElementById('myChart').getContext('2d');
var c = JSON.parse('{"type":"bar","data":{"labels":[...]],"datasets":[{},{}, etc]},"options":{"scales":{"yAxes":[{},{}]}}');
var myChart = new Chart(ctx, c);
在执行var myChart = new Chart(ctx, c)
?
c
的内容或者,是否有可能强迫该线通过更改的c
变量重新评估?在我看来,在理论上至少可以在JSON中添加IIFE,如果您可以重新分配它。
我的用例是:
- 用户连接到VPN
- 域名中的用户类型,该名称返回单个HTML页面
- HTML页面包含JavaScript,以在VPN C#服务器上向服务器提出请求
因此,我已经在此特定域上启用了C#服务器上的CORS。
我认为不使用用户输入中的eval
函数的XSS可能性,但只想确保。这是我的新领域。
XSS在您的页面上执行用户提供(或攻击者提供(代码时发生。
如果您eval((用户输入未正确逃脱,但在像您这样的代码中肯定会发生,如果JSON包含未正确逃脱的用户输入。看起来像这样:
var ctx = document.getElementById('myChart').getContext('2d');
var c = JSON.parse('{"type":"ba"}');alert('oh, look, I'm a nasty script!');//r","data":{"labels":[...]],"datasets":[{},{}, etc]},"options":{"scales":{"yAxes":[{},{}]}}');
var myChart = new Chart(ctx, c);
在此示例中,提供的"类型"为:ba"}');alert('oh, look, I'm a nasty script!');//r
。因为将其写入JSON字符串时并没有逃脱,所以特殊构造的值可以结束字符串并执行自己的JavaScript。
这与JSON解析无关。您始终必须确保将其写入页面上时正确逃脱任何用户提供的数据。