Newsgroup: it.comp.www.php
Titolo: script php chiamati solo da ajax

Ciao a tutti
ho uno script che deve essere chiamato solo dal mio programma ajax il quake 
gli passa dei parametri con il metodo post.
Nel caso che sia chiamato da solo non deve rispondere
Come faccio?
Grazie


Ma esattamente "Nel caso che sia chiamato da solo" cosa vorrebbe dire 
secondo te?
M


che se il file php si chiama pinco.php e io lo chiamo da tastiera invece che 
lo chiami ajax vorrei che pinco php si accoregesse che è stato chiamato da 
tastiera invece che da ajax
Attualmente io verifico le variabili trasmesse .
Se sono post presuppongo che siano inviate da ajax in caso contrario ovvero 
se sono GET da tastiera.
Però mi dicono che si riesce ad inviarle post lo stesso con altri sistemi.
Quindi vorrei sapere se esiste un metofo migliore per capire se le ha 
richieste il mio programma ajax dal mio sito o no 

 richieste il mio programma ajax dal mio sito o no
..e non sono neanche sistemi molto misteriosi, un form normalissimo và
bene.
Risposta breve: no, non puoi farlo.
Risposta lunga: si, se sviluppi il tutto tramite mvc.
All'inizio del file pippo.php (quello che dovrà essere chiamato solo
da ajax) metti una cosa tipo
if(!defined("PINCO")){
die("non puoi accedere direttamente a questo file");
}
Dopodichè, nei tuoi script, invece di puntare direttamente a pippo.php
punti a un controller che prima inizializza la costante PINCO, poi
carica (ed esegue) il file pippo.php.
Praticamente questo è il metodo che usa Kohana per assicurarsi che i
controller non siano usati direttamente ma solo dietro il framework:
http://www.dealtaker.com/blog/2009/11/20/kohana-php-3-0-ko3-tutorial-part-1/
(cerca nella pagina "defined('SYSPATH')" e vedi dove ne parla).
Fondamentalmente poi farlo anche senza mettere su una struttura mvc,
ti basta puntare tutti gli script ajax allo script ajax.php, dandogli
un parametro extra con il file da caricare, poi ajax.php fà tutti i
controlli necessari e se tutto è ok invoca il 'pippo.php'
Notare però, che non risolvi la cosa realmente, potrò sempre fare un
form che punta direttamente ad ajax.php

dimenticavo: se ci spieghi perchè vuoi fare una cosa del genere magari
ti aiutiamo meglio

richieste il mio programma ajax dal mio sito o no 
Ci sono vari sistemi, ma nessuno è garantito al 100%. Proprio nessuno.
Se il tuo sistema si basa sul fatto che quello script AJAX "non possa"
essere chiamato da nessuno, se non dal tuo script, hai un errore nell'
analisi del problema.
Distinguere fra GET e POST è facile, veloce e ti "protegge" contro gli
errori in buona fede e anche contro gli smanettoni piu' niubbi.
Pero', se quello script e' appetitoso, uno smanettone abbastanza vispo
aggira qualsiasi sistema tu possa inventarti.
Purtroppo per te, il codice HTML e JS eseguito dal tuo browser è anche
visibile al 100% allo smanettone. Quindi non puoi, che so, inserire un
controllo tipo challenge/response.
Puoi magari inventarti qualche tipo di covert channel: per esempio, la
chiamata AJAX fa vedere una animazione "please wait" (il classicissimo
spinner), che carichi con
	spinner.src = spinnersrc + '?' + time.Seconds();
	callAjax();
...a quel punto, lo script AJAX puo' controllare se, in sessione, c'e'
una chiamata allo spinner nei due secondi precedenti. Perche' anziche'
essere una immagine, lo spinner e' uno script, che invia si' una .GIF,
ma nel frattempo si segna anche il momento dell'ultima chiamata.
Uno *che non se lo aspetta* guarda solo la chiamata AJAX, ne riceve in
risposta qualcosa di fuorviante come "invalid form variable", e rimane
bloccato li'.
La percentuale di falsi allarmi dovrebbe essere bassa, se studi bene i
timing, o perfino nulla.
Pero', se uno invece se lo aspetta, ti frega come niente. Questa è una
forma di security through obscurity, che notoriamente non funziona - o
non a lungo.
Leonardo
-- 
Enough, enough!  But, stranger, ere we part,
Glancing farewell to each nefarious bier,
This warning would I beg you take to heart:
There is an end to e'en the worst career!


Scusa se mi permetto, ma se vuoi mettere in piedi un'architettura così 
ti conviene capire il ciclo di vita di una richiesta HTTP, cosa che 
ovviamente al momento non ti è chiara
In aggiunta a quello che ti consiglia Daniel si può cercare di far buon 
uso dei cookies, ma nulla ti mette al riparo
L'unica alternativa per il momento sono i webSocket presenti nelle 
specifiche html5, ma per il momento non sono ancora una scelta 
praticabile (tranne che su Chrome)
Magari abbinati ad un WebWorker
Marco

 le ha richieste il mio programma ajax dal mio sito o no
jQuery imposta un header aggiuntivo quando fa chiamate AJAX.
E mi pare lo facciano anche altri framework, tipo Dojo.
Zend Framework, per esempio, lo sfrutta, e ti basta fare
if ($this->getRequest()->isXmlHttpRequest()) { ... }
per intercettarlo.
Se stai usando jQuery, usa quello, altrimenti implementa un metodo simile.
Bye.

 simile.
sì, anche io nei miei programmi gestisco tale header, in questo modo:
function _is_ajax()	{
 return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER
['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));
}
 
ma niente vieta di settare l'header anche in altro modo, certo è una 
precauzione in più  e solo qualcuno che voglia realmente romperti i 
cosiddetti si mette a fare sti giochetti :)