Неясный URL внешних данных AmCharts - PullRequest
1 голос
/ 08 марта 2019

Я использую плагин AmCharts Wordpress для создания графиков на странице Wordpress. Чтобы график загружал свою форму и (внешние) данные, AmCharts использует Javascript для загрузки на стороне клиента при создании графика. Однако этот javascript также содержит URL-адрес API, используемого для извлечения внешних данных.

Это означает, что любой может легко просмотреть исходный код веб-сайта и просмотреть эту ссылку. Это риск, так как теперь любой может манипулировать 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

...

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Спасибо всем за помощь.Оценил.В конце концов, кажется, что единственный реальный безопасный способ - это сначала извлечь его. Извлечь данные из таблицы БД с помощью запроса SELECT, а затем создать массив, который можно кодировать JSON в формате, совместимом с amCharts.Может быть так просто:

<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-адресов, нет сведений о сервере.

1 голос
/ 09 марта 2019

Я не знаком с плагином 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 (например, через curl) и отправляете их обратно клиенту с соответствующими, например, Заголовки JSON.

Какая из этих идей работает для вас?

...