1

我正在使用 AmCharts Wordpress 插件在 Wordpress 页面上生成图表。为了让图表加载其形状和(外部)数据,AmCharts 在生成图表时使用 Javascript 在客户端加载。但是,此 javascript 还包含用于检索外部数据的 API 的 URL。

这意味着任何人都可以轻松查看网站源代码并看到此链接。这是一个风险,因为现在任何人都可以操纵 URL 并下载我们包含数据的完整数据库。

我在下面添加了 JavaScript 代码的第一部分。我喜欢隐藏的 URL 部分是https://api.xxxxxxx.com/

这有什么可能吗?有哪些可用选项?

谢谢你的帮助!

 try {    
    // Themes begin

    var chart = am4core.create("amchart1", am4charts.XYChart);
    var from = Math.round(+new Date() / 1000) – 2629743;
    var to = Math.round(+new Date() / 1000) + 2629743;

    chart.dataSource.url = 'https://api.xxxxxxx.com/' + from + '/' + to;

    chart.dataSource.events.on(“parseended”, function(ev) {
    // parsed data is assigned to data source's data property
    var data = ev.target.data;
    for (var i = 0; i < data.length; i++) {
       if(data[i]["realtime_value"] == 0)
          delete data[i]["realtime_value"];
    }

    console.log(‘data’, data);

    });

    // create date axis

...
4

2 回答 2

1

感谢你的帮助。赞赏。最后,似乎唯一真正安全的选择是首先使用 SELECT 查询从数据库表中获取您的数据,然后创建一个数组,您可以使用 amCharts 兼容格式对其进行 JSON 编码。可能就这么简单:

<script>

<?php
  $sth = mysqli_query("SELECT ...");
  $rows = array();
  while($r = mysqli_fetch_assoc($sth)) {
    $rows[] = $r;
  }
  print "var data = " . json_encode($rows) . ";";
?>

console.log('data from server', data);

</script>

您的实际输出应如下所示:

<script>
var data = [{
  "category": "1",
  "value": 5
}, {
  "category": "4",
  "value": 10
}];
console.log('data from server', data);
</script>

您的所有用户将在源代码中看到的是这个 JSON 数组。没有 URL,没有服务器详细信息。

于 2019-03-14T08:33:27.920 回答
1

我不熟悉 WordPress 插件或它的工作原理,所以所有这些都完全忽略了 WP 插件。

我的第一个想法是抓住数据服务器端并在页面加载时将其输出。通过这种方式,API url被混淆了,并且用户被保存了另一个 HTTP 调用,因为数据已经存在于页面上。

如果这不是一个选项,而不是直接提供 API 调用,而是在您的服务器上创建一个脚本,作为 API 的反向代理。您的客户端调用将获取到您的服务器的 URL,这取决于您希望如何保护它到任何程度。

例如chart.dataSource.url = 'https://your.site/reverse-proxy/' + from + '/' + to;。然后在https://your.site/reverse-proxy/您检查和清理from&to输入时,从'https://api.xxxxxxx.com/' + from + '/' + to(例如 via curl)获取数据,然后使用适当的 JSON 标头将其发送回客户端。

这些想法中的任何一个对你有用吗?

于 2019-03-09T06:37:39.047 回答