将JSON字符串解释为浏览器中的JavaScript对象时,XSS是否有潜力



我正在制作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,如果您可以重新分配它。

我的用例是:

  1. 用户连接到VPN
  2. 域名中的用户类型,该名称返回单个HTML页面
  3. 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解析无关。您始终必须确保将其写入页面上时正确逃脱任何用户提供的数据。

相关内容

  • 没有找到相关文章