0

Google マップを自分のウェブサイトに統合する必要があるプロジェクトに取り組んでいます。現在、私のデータ (緯度/経度など) は MySQL テーブルにあります。MySQL で PHP クエリが実行され、XML ファイルが動的に生成されます。この XML ファイルは、リクエスト元の HTML ページで使用され、JavaScript を使用して Google マップにこれらのポイントがプロットされます。

この XML ファイルを要求する HTML コード スニペットは次のとおりです。

    downloadUrl("generatexml.php", function(data) {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("marker");
            for (var i = 0; i < markers.length; i++) {
              var name = markers[i].getAttribute("name");
              var address = markers[i].getAttribute("address");
              var type = markers[i].getAttribute("type");
              var point = new google.maps.LatLng(
                  parseFloat(markers[i].getAttribute("lat")),
                  parseFloat(markers[i].getAttribute("lng")));
              var html = "<b>" + name + "</b> <br/>" + address;
              var icon = customIcons[type] || {};
              var marker = new google.maps.Marker({
                map: map,
                position: point,
                icon: icon.icon
              });
              bindInfoWindow(marker, map, infoWindow, html);
            }
          });

上記の関数 downloadUrl は次のように定義されます。

function downloadUrl(url, callback) {
      var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;

      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          request.onreadystatechange = doNothing;
          callback(request, request.status);
        }
      };

      request.open('GET', url, true);
      request.send(null);
    }

さて、問題は、誰かがディレクトリwww.mydomain.com/generatexml.phpを入力すると、MySQL データから生成された XML ファイルをブラウザで見ることができるとします。これは私のウェブサイトを殺すことができるものです! 誰かが私のデータを簡単に使用でき、データ収集のすべての努力が無駄になります。私はこの Web サイトを非営利目的で使用しますが、誰かが XML を介してこのデータを盗み、販売する可能性があります。これは望ましくありません。

では、このファイルを非表示にして、誰かが HTML ページを開いたときに、要求している HTML ページがそれを使用できるようにする方法はありますか?

4

1 に答える 1

0

このファイルは、クライアント側の JavaScript がマップをレンダリングするために必要になるため、保護する方法はありません。

データを保護したい場合は、このサーバー側をレンダリングし、詳細を XML ファイルで公開しないようにする必要があります。

また、値をエンコードせずに XML を手動で構築しているため、コード スニペットがXSSに対して脆弱である可能性があることにも気付きました。

例えばvar html = "<b>" + name + "</b> <br/>" + address;

" name" または " address" にタグ文字 (" <" など) が含まれている場合、XML が分割され、ドキュメントに何かが挿入される可能性があります (データのソースによって異なりますが、すべてのデータを信頼できないものとして扱うことをお勧めします。

于 2013-11-13T09:53:26.743 に答える