2013-09-08 2 views
1

Я делаю AJAX как функцию, но у меня есть проблема, что плохой пользователь может изменить значение на любого другого текущего пользователя. Итак, как я могу предотвратить эту вещь?Скрыть данные var на ajax

$live = 'user1'; 
$fol = 'user2'; 

function ajax(like){ 
    var data = 'like='+like+'&CURRENTUSER=<?php echo $live; ?>&TOFOLLOW=<?php echo $fol; ?>'; 
    $.ajax({ 
     type: 'POST', 
     url: 'ajax.php', 
     data: data, 
     success: function(e) { 
      $('#success').html(e); 
     } 
    }); 
} 

Кроме того, я хочу, чтобы переместить эту функцию Ajax в ajax.js файл, но я есть проблемы в получении значения $live и $fol пользователей, потому что эхо $ жить не работает на .js. Итак, есть ли способ сделать это, как Facebook, функция AJAX Twitter делает?

+2

Поскольку это клиентский javascript, вы не можете многое сделать! – undone

+0

Но как работает Facebook, Twitter Ajax? – user2615947

+0

И о вашем файле 'ajax.js': вы можете использовать переписывание или добавить обработчик для открытия скрипта с помощью php! – undone

ответ

2

Это решение работает на веб-сервере apache. Для интерпретации файла JS с помощью PHP, добавьте эту строку в файл .htaccess:

AddType application/x-httpd-php .js 

И поставить скрипт внутри ajax.js. Другой способ использует перезаписи URL:

RewriteEngine On 
RewriteRule ^ajax.js$ ajax.js.php [L] 

и положить ваши скрипты внутри ajax.js.php файла. Конечно, все это, если вы хотите показать свой URL как JS-файл.

в верхней части ajax.js или ajax.js.php файла, перед любым видом продукции, поставить это:

header('Content-Type: application/javascript'); 
+0

** Как я могу предотвратить неправильные пользователи, меняющие значение? Любая идея брата, которая была моим главным вопросом ** – user2615947

+0

, вы не можете. ваши ценности даны пользователю, и он может делать все, что он хочет с ними делать! – undone

+0

Но как работает facebook ajax? – user2615947

2

У меня есть проблема, что плохой пользователь может изменить значение в любой другой текущий пользователь. Итак, как я могу предотвратить эту вещь?

Конечно, вы не можете сделать это вообще.

HTTP является протоколом без - так каждый запрос, который достигает ваш сервер должен быть доверяли, период.

Вам необходимо проверить на стороне сервера, разрешено ли запрашивающему клиенту запрашивать/выполнять любое действие, которое он хочет вызвать - f.e. проверив, что идентификатор пользователя, который передается как «текущий» пользователь, на сеанс, в котором вы сохранили свою регистрационную информацию. (Так что, когда у вас есть идентификатор текущего пользователя, хранящегося там, тогда нет необходимости фактически отправлять его от клиента в первую очередь.)

Это один из самых основных принципов безопасности любого веб-сайта приложение - не доверяйте любой входящий запрос, пока у вас не будет проверено, что у клиента есть соответствующее разрешение. Поэтому запрос о том, как «скрыть» любые данные, которые отправляются клиентом, является совершенно неправильным вопросом - это будет то, что называется «безопасностью безвестности», и что не работает.

1

Для решения этой проблемы может быть множество решений.

  1. Добавить одного из следующих пользователей в сеансе до загрузки страницы, чтобы даже вам не нужно было отправлять данные в ajax. Просто нужно подтвердить действие, и все данные будут взяты из сеанса. Следовательно, хакеры не могут изменять пользователей.(Вот как я решил проблему в моем проекте)

  2. Вы можете построить такую ​​функцию, как encode() & decode(). когда вы сначала используете данные в файле encode(). Затем в конце кода используйте decode() для извлечения информации. Поскольку, если недействительные данные вышли, значит, кто-то закалил, и вы не выполните это действие. Но вы должны создать такой код() & decode() самостоятельно.

    $live = encode(user1); 
    

В конце PHP

$real_live = decode($live); 

3. запрос Ajax, когда выполнение запуска PHP вы можете иметь функцию, как

check_auth(user1,user2); 

Таким образом, даже если кто-то один используется неправильные данные ваши правила безопасности могут их фильтровать.

Надеюсь, вы сможете использовать любой из них.

+0

Wow Encode & Decode работает очень хорошо с 'base64_encode ($ str);' !! Я закодировал '$ live' и после того, как он передан на сервер' ajax.php', я расшифровал '$ live' на' ajax.php', который работает классно, и это скроет FormData ** Bro, это круто или это не хорошо ?? ** – user2615947

+0

да, это хорошо, но если кто-то узнает о вашем методе кодирования, ваши усилия пойдут впустую. Лучшим вариантом будет использование собственного написания encode() decode(), поэтому хакер не имеет шансов, это то, что делает большая организация. Но все же это будет держать вас в безопасности от большинства наивных хакеров –

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