Безопасность с Google Maps Javascript API

Я работаю над веб-приложением, использующим PHP и клиентский Javascript, в котором реализован API-интерфейс Google Maps Javascript.

Цель этого веб-приложения — зарезервировать водителя для поездки, например ….

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

Я могу использовать неправильное решение для разработки в такой ситуации.
Пожалуйста, дайте мне знать, если я использую неправильное решение или существуют способы защиты моего приложения.
Заранее благодарю за ответы.

0

Решение

Во-первых, пользователь всегда может редактировать 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"];
?>

Замечания : этот код довольно прост, но не очень точен. Вы можете проконсультироваться этот страница переполнения стека, если вы хотите больше деталей.


Теперь, если вы хотите оценить расстояние между двумя позициями, используйте этот код:

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>';
}

Замечания : Я нахожу этот код на этот страница переполнения стека.

Скажите, если у вас есть вопросы или комментарии.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector