2011-12-22 3 views
0

В настоящее время у меня есть:JQuery Ajax с помощью POST в PHP скрипт вне вебсервера

$("#upvote").click(function(){ 
    var up = parseInt(document.getElementById('voteScore').innerHTML); 
    up++; 
    document.getElementById('voteScore').innerHTML = up; 
    $.ajax("include/mysql_lib.php?op=upvote&v1=<?php echo $id; ?>"); 
}); 

Есть две проблемы, у меня есть это с. Во-первых, я использую GET для отправки переменных, что заставляет меня нервничать. Во-вторых, скрипт mysql_lib.php находится прямо в моем веб-корне. Я бы предпочел использовать его в директории protected моего хостинг-провайдера вместо public.

Возможно ли это?

+1

Я думаю, что страница должна быть доступна через http, вы можете использовать идентификатор сеанса для защиты скрипта 'mysql_lib.php'. Проверьте существующий сеанс в этом файле и выйдите, если он не существует. – Cyclonecode

+0

@ Krister, но какая разница сделала бы безопасность? –

ответ

1

Я бы предпочел использовать его в защищенной директории моего хостинг-провайдера, а не публично.

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

Вы должны убедиться, что там нет ничего, что можно сделать с mysql_lib.php, что разрушительно, как op=delete или что-то, и нет никакой возможности произвольно доступа к ресурсам, один не должен видеть (например, путем изменения параметра id).

Кроме того, чтобы избежать игр, вы можете наложить некоторые ограничения на то, как часто ресурс может поддерживаться одним клиентом (это сложная проблема, хотя здесь много хорошего чтения в Stack Overflow.)

Во-первых, я использую GET для отправки переменных, что заставляет меня нервничать.

Если вы используете POST или GET doesn't make a difference security-wise, but using POST would be more fitting, так как вы меняете состояние на сервере. Вы можете use POST с jQuery's Ajax.

0

Самое лучшее, что я думаю, это создать «слой» контроллер между вашим вызовом и mysql_lib, чтобы быть в состоянии сделать элементы управления, которые вы хотите, и вызывать только те методы, которые вам нужно от mysql_lib

Вы можете также проверьте заголовки, чтобы узнать, был ли вызов вызван AJAX-вызовом или нет (имейте в виду, что это не совсем точно и легко исчезает).

function json_requested() { 
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
      $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && 

      isset($_SERVER['HTTP_ACCEPT']) && 
      $_SERVER['HTTP_ACCEPT'] == 'application/json'; 
} 

if($this->json_requested()) { 
// Do things 
} 

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

Это довольно простой способ, чтобы остановить спамеров

Теперь, когда пользователь пишет сообщение, эта крошка передается обратно на стороне сервера. Если пользователь пишет сообщение до 30 минут, эта крошка будет проверена, и пользователь закричит. (30 минут должны позаботиться о 99,99% случаев). В ответ сервер api отправляет обратно новую крошку, которую следует отправить обратно со следующего вызова AJAX.

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