2014-01-06 3 views
-1

До этого момента я использовал следующий метод для отправки данных формы в файл PHP (через Ajax). Проблема с этим состоит в том, что «скрытые» входы все еще можно посмотреть в исходном коде, чтобы показать данные, которые я не хочу видеть пользователей:Отправить данные формы без скрытых входов

HTML:

<form> 
    <input name="user_field"> 
    <input name="user_id_field" hidden> 
    <button type="submit">Submit</button> 
</form> 

JQuery/Ajax :

$(document).ready(function() { 
    $(document).on("submit", "form", function(event) { 
     event.preventDefault(); 
     $.ajax({ 
      url: 'php/verification.php', 
      type: 'POST', 
      dataType: 'json', 
      data: $(this).serialize(), 
      success: function(data) { 
       alert(data); 
      } 
     }); 
    }); 
}); 

PHP:

<?php 
    $user = $_POST['user_field']; 
    $user_id = $_POST['user_id_field']; 

    // verification code and echo back to document 
?> 

Мой вопрос, как сделать большинство веб-сайтов отправить данные формы без использования скрытой INP UTS? Я слышал, как работает сеанс, но я не знаю, как это сделать.

Спасибо.

+1

Если данные все равно отправляются на сервер, их можно изменить. Узнайте о сеансах: http://www.php.net/manual/en/book.session.php – epascarello

+4

разумные данные не должны быть доступны на стороне клиента –

+0

Я согласен с AWOlff, вы никогда не должны отправлять разумные данные клиенту, поскольку он может просматривать и манипулировать. Если вы не можете работать с сеансами (например, потому что вам нужна некоторая балансировка нагрузки _easy_), вы можете попробовать (но, если возможно, избегать, если это возможно) для шифрования этих данных. –

ответ

3

На пользователей первоначальный Логин, создать сеанс и идентификатор пользователя для оставшейся части сессии:

router.php

session_start(); 
    /* once user has authenticated */ 
    $_SESSION['user_id_field'] = $userid; 

subsequentpages.php

session_start(); 
    /* assign user id to local variable */ 
    $userid = $_SESSION['user_id_field']; 
    ... do your stuff 

Каждый страница создает экземпляр сеанса и назначает локальную переменную, доступную только на этой странице. ,

+0

И они скрыты как неотредактированные Пользователь? – Bagwell

+0

Его не невозможно, но маловероятно. Вредоносный скрипт может попытаться захватить идентификатор сеанса, а затем изменить данные. Но что касается формы, идентификатор пользователя не будет нигде в выводе скрипта (если вы не распечатаете его). – rwhite35

+2

Сессии - это назначенные на стороне сервера значения, которые невозможно просмотреть каким-либо образом **, если ** вы специально не повторяете значения в PHP. Или, что пользователь фактически взломал сервер. Кроме того, использование сеансов является безопасным, но файлы cookie не являются «разными животными» в целом. @Bagwell –

0

AFAIK невозможен, поскольку любые данные, отправленные в браузер, доступны пользователю. Единственный способ сделать то, что вы хотите, это зашифровать данные.

Вот код я использую для этого:

define('CRYPT_KEY', 'some_secret_key'); 

function dataEncrypt($data) { 
    $crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, CRYPT_KEY, $data, 'ecb'); 
    $base64 = base64_encode($crypt); 
    return $base64; 
} 

function dataDecrypt($data) { 
    $crypt = base64_decode($data); 
    $str = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, CRYPT_KEY, $crypt, 'ecb'), "\0\4"); 
    return $str; 
} 

CRYPT_KEY ваша собственная случайная строка

UPDATE:

Чтобы использовать mcrypt_encrypt и mcrypt_decrypt вы должны установить пакет php5-mcrypt. В Ubuntu-подобных системах это можно сделать по этой команде:

sudo apt-get install php5-mcrypt 
Смежные вопросы