Можно защитить от прямого просмотра скрипта так:
if ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ){
// Обрабатываем запрос от скрипта
} else {
header( 'Content-Type: text/html' );
die( '<div>Идём лесом!</div>' );
}
Но если уж совсем нужно будет, то заголовки можно подделать. Таким образом можно только от любопытных глаз защититься.