Che non esiste alcuna garanzia che l'utente non sia in grado in qualche modo di accedere ai dati restituiti dal server.Cosa intendi che non funziona al 100%?
Puoi utilizzare l'header Referrer oppure implementare una soluzione tipo one-time-password. In entrambi i casi un utente esperto sarà in grado di aggirare la protezione senza grossi problemi.Hai qualche metodo da proporre?
Per "aumentare" la sicurezza puoi utilizzare una tecnica chiamata "security by hiding" in cui, invece di restituire un file vuoto nel caso di chiamata diretta, restituisci uno script valido, ma pieno di codice inutile (es. un centinaio di funzioni tipo MM_openWindow oppure una libreria ajax, etc.). In questo modo per l'utente sarà più complicato capire da dove arriva il codice che gli interessa.