Google Maps Javascript API 的安全性

Security with Google Maps Javascript API

提问人:Jobel 提问时间:4/15/2018 更新时间:5/1/2018 访问量:105

问:

我正在开发一个使用 PHP 和客户端 Javascript 的 Web 应用程序,其中实现了 Google Maps Javascript API。

这个网络应用程序的目的是能够为旅程预订司机,例如......

为了计算旅程的距离,我使用了距离矩阵 API,但我问我如何保护回调免受作弊?

查看我的代码

   service.getDistanceMatrix(
            {
                origins: [route[origin]],
                destinations: [route[destination]],
                travelMode: 'DRIVING',
                avoidTolls: true,
            }, callback());

        function callback(response, status) {
                var dist = response.rows["0"].elements["0"].distance.value;
                var duration = response.rows["0"].elements["0"].duration.value;
        }
);

在这里,用户可以轻松更改“dist”变量的值!这将用于计算旅程的价格。
即使我直接使用AJAX调用将数据发送到服务器,他们也可以修改此调用的参数并设置他们想要的任何内容。

在这种情况下,我可能使用了错误的开发解决方案。
如果我使用了错误的解决方案,或者是否存在保护我的应用程序的方法,请告诉我。
提前感谢您的回答。

JavaScript PHP 安全性 google-maps-api-3 客户端

评论


答:

2赞 SphynxTech 4/16/2018 #1

首先,Javascript 始终可以由用户编辑。例如,该语言已被创建用于为页面网络制作动画、显示照片、视频或与服务器交互。它只提供了一种动态和动画网页的方法,而不是所有的商业方面。

为了从用户那里获得正确的信息,您必须使用 php。数据可靠,可以直接在服务器中使用。


如果你想找到用户的位置,我可以在php中给你这段代码:

<?php
$user_ip = getenv('REMOTE_ADDR');
$geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip"));
$country = $geo["geoplugin_countryName"];
$city = $geo["geoplugin_city"];
?>

注意:这段代码很简单,但不是很准确。如果您想了解更多详细信息,可以查阅 Stack Overflow 的页面。


现在,如果要估计两个位置之间的距离,请使用以下代码:

function GetDrivingDistance($lat1, $lat2, $long1, $long2)
{
    $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=pl-PL";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $response_a = json_decode($response, true);
    $dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
    $time = $response_a['rows'][0]['elements'][0]['duration']['text'];

    return array('distance' => $dist, 'time' => $time);
}

您可以像这样使用此功能:

$coordinates1 = get_coordinates('Tychy', 'Jana Pawła II', 'Śląskie');
$coordinates2 = get_coordinates($city, $country);
if ( !$coordinates1 || !$coordinates2 )
{
    echo 'Bad address.';
}
else
{
    $dist = GetDrivingDistance($coordinates1['lat'], $coordinates2['lat'], $coordinates1['long'], $coordinates2['long']);
    echo 'Distance: <b>'.$dist['distance'].'</b><br>Travel time duration: <b>'.$dist['time'].'</b>';
}

注意:我在 Stack Overflow 的这个页面上找到了这段代码。

如果您有任何问题或意见,请告诉我。

评论

0赞 Jobel 4/16/2018
非常感谢您的回答!这正是我想要的。如果我有一些问题,我会告诉你。