2016-12-07 2 views
0

Я разрабатываю JavaScript-игру. Мне нужно вставить некоторые данные (например, оценка, время, уровень и т. Д.) В базу данных.Проблемы с безопасностью при отправке переменной с Javascript на PHP

сделать это я могу использовать JavaScript в следующем:

function jsFunction() { 
    var jsScore = 1000; 
    window.location.href = "file.php?score=" + jsScore; 
} 

И в PHP файл я мог бы использовать $_GET['score'];

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

Как я могу сделать это более безопасным способом?

+1

Любая информация, поступающая от клиента, не может быть неотъемлемо надежной. Вы должны иметь возможность проверить в серверном коде, что это значение приемлемо. – David

+0

@ Давид благодарит вас за ваше время. О проверке на стороне сервера, которую я слышал раньше, но у меня нет идей, как это должно быть сделано. Как я могу проверить, например, счет на стороне сервера? Не могли бы вы дать мне несколько советов? – Infinity

+0

Поскольку это довольно широкий вопрос, я могу дать только широкий ответ. Но в основном серверный код должен отслеживать значения, которые вы не хотите, чтобы пользователь мог изменять. Клиентский код может использовать эти значения для удобства, но «источник правды» должен быть серверным. Так, например, расчет «оценка», вероятно, будет выполняться на стороне сервера. Клиентский код может отправлять события на сервер, а серверный код возвращает результаты этих событий (например, обновленный балл). – David

ответ

-2

Попробуйте отправить данные в сообщении с помощью ajax. Это не будет отображать данные в URL, а также безопасно, как данные передаются в post.Here является код

var score = '1000'; 
    var time = '10'; 
    $.ajax({ 
      url: 'file.php', 
      type: "POST", 
      data: {score: score, time: time,}, 
      success: function(posData) { 
       // success code here 
      }, 
     }); 

В file.php вы можете получить все параметры в

print_R($_POST); 
+1

Это так же небезопасно, как и запрос GET. Значения могут быть изменены пользователем так же легко. Ваши утверждения об обратном являются крайне неверными. – David

+0

Весь файл Javascript можно редактировать через браузер. – Infinity

+0

По крайней мере, это безопасно, чем прохождение URL-адреса throug, где все могут видеть и редактировать! – rushil

0

Может быть, посылая данные через пост AJAX было бы более уместным. Технически пользователь все равно может редактировать его с помощью консоли dev, но он гораздо менее заметен.

<script> 
function jsFunction() { 
    var jsScore = 1000; 
    $.post("file.php", { score: jsScore}) 
    .done(function(data) { 
    alert("Data Loaded: " + data); 
    }); 
} 
</script> 
+0

Как вы говорите, пользователь * может * изменять значения. Без труда. Кроме того, почему здесь используется jQuery? – David

+0

Привет, Дэвид, верните, что пользователь все еще редактирует данные, копаясь в консоли, я просто заявлял, что этот метод будет менее заметным, поскольку он не требует редактирования URL-адреса в браузере. И, во-вторых, это было по привычке, конечно, я должен упомянуть для OP, для чего потребуется jQuery. Разумеется, согласитесь с вашим объяснением относительно проверки на стороне сервера. – Hunter

-1

Вы можете использовать jquery библиотеку и отправить AJAX запрос на страницу PHP. как показано ниже.

function jsFunction() { 
    var jsScore = 1000; 
    $.ajax({ 
    method: "POST", 
    url: "file.php", 
    data: { score: jsScore } 
    }).done(function(response){ 
    //you can perform some activity after score saved etc.. 
    }).fail(function(response){ 
    //you can perform some activity if score do not saved etc.. 
    }) 
} 

, то вы можете получить доступ к счету, используя $_POST['score']; в PHP.

+1

(1) Почему рекомендация jQuery, что это имеет отношение к вопросу? (2) Вы не используете значение 'jsScore'. – David

+0

hmm ... сначала сделал ajax, чем окружил его функцией, поэтому. я сделаю изменения. – Vedant

+1

Так что, если пользователь заменит это 'var jsScore = 1000;' на 'var jsScore = 999999;'? – Infinity

Смежные вопросы