Chiunque in questa discussione abbia suggerito di guardare le intestazioni è in qualche modo sbagliato. Qualunque cosa nella richiesta (HTTP_REFERER, HTTP_X_REQUESTED_WITH) può essere falsificata da un utente malintenzionato che non è del tutto incompetente, inclusi i segreti condivisi [1].
Non è possibile impedire alle persone di effettuare una richiesta HTTP sul proprio sito. Quello che vuoi fare è assicurarti che gli utenti debbano autenticarsi prima di fare una richiesta ad alcune parti sensibili del tuo sito, tramite un cookie di sessione. Se un utente fa richieste non autenticate, fermati lì e dai loro un HTTP 403.
L'esempio esegue una richiesta GET, quindi suppongo che tu sia interessato ai requisiti delle risorse della richiesta [2]. Puoi eseguire alcuni semplici controlli di integrità nelle intestazioni HTTP_REFERER o HTTP_X_REQUESTED_WITH nelle tue regole .htaccess per impedire che i nuovi processi vengano generati per richieste ovviamente false (o per i crawler di ricerca stupidi che non ascolteranno a robots.txt), ma se l'hacker falsi quelli, ti consigliamo di assicurarti che il tuo processo PHP si chiuda il prima possibile per richieste non autenticate.
[1] È uno dei problemi fondamentali delle applicazioni client/server. Ecco perché non funziona: supponiamo che tu abbia un modo per l'app client di autenticarsi sul server, che si tratti di una password segreta o di un altro metodo. Le informazioni di cui l'app ha bisogno sono necessariamente accessibili all'app (la password è nascosta lì da qualche parte, o qualsiasi altra cosa). Ma poiché viene eseguito sul computer dell'utente, significa che hanno anche accesso a queste informazioni: tutto ciò di cui hanno bisogno è guardare la fonte, o il binario, o il traffico di rete tra la tua app e il server, e alla fine capiranno il meccanismo con cui l'app si autentica e la replica. Forse lo copieranno anche. Forse scriveranno un trucco intelligente per fare in modo che la tua app risolva il problema (puoi sempre inviare un falso input dell'utente all'app). Ma non importa come, hanno tutte le informazioni richieste, e non c'è modo di impedirgli di averlo che non impedisce anche alla tua app di averlo.
[2] Le richieste GET in un'applicazione ben progettata non hanno effetti collaterali, quindi nessuno che le esegue sarà in grado di apportare modifiche al server. Le tue richieste POST devono sempre essere autenticate con la sessione più il token CSRF, per consentire solo agli utenti autenticati di chiamarle. Se qualcuno attacca questo, significa che ha un account con te e che vuoi chiudere quell'account.
Quindi, fondamentalmente, vuoi che lo script sia accessibile tramite AJAX, ma non se inserisco l'URI? –
sì è esattamente così – jriggs
C'è un motivo per cui non puoi usare il .htaccess descritto nel link che hai postato? –