Newsgroup: it.comp.www.php
Titolo: controllo su URL

Salve
Forse è una domanda stupida, ma mi servirebbe capire come è possibile
fare una determinata cosa.
Vorrei controllare l'URL che viene passata in un sito (PHP) e vedere
se all'interno esistono stringhe del tipo "http://" o
"https://" (escludendo ovviamente la chiamata principale) questo per
evitare in un modo molto spiccio che si compiano attacchi di remote
file inclusion.
Nel software non vengono passate in get o post queste stringhe, quindi
le vorrei stoppare a prescindere.
Il tutto andrebbe messo in testa al file che gestisce il sito.
Qualcuno può darmi una mano?

 modo molto spiccio che si compiano attacchi di remote file inclusion.
La soluzione e` piu` semplice di quanto pensi: non fare include di 
variabili passate dall'utente. Mai. Piuttosto memorizza le URL in 
database e fatti passare l'id.
Bye.


ottimo consiglio, purtroppo però in questo caso devo mettere mano ad
un sito che non ho fatto io ed è piuttosto complesso, e il modo più
spiccio e immediato che ho per intervenire sarebbe stoppare quel tipo
di richieste.
E' possibile farlo?

 file inclusion.
Forse non ho capito bene il problema, ma una cosa tipo
@ini_set( 'allow_url_fopen', 0 );
messa all'inizio di ogni pagina potrebbe risolvere il tuo problema?
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Ritengo che resteresti sorpreso se all'improvviso una vacca
cominciasse a parlare in inglese. Credimi, pero`, alla decima
volta te la prenderesti con lei perche' non ha l'accento di Oxford.

 E' possibile farlo?
per le variabili get puoi farlo a livello di webserver con rewriting 
dell'url
per le post, devi fare validazione dei singoli campi che ti arrivano

 E' possibile farlo?
Si`, ti basta prendere la query string e analizzarla con strpos per 
vedere se contiene quei pezzi. Ricordati di urldecode, naturalmente.
Bye.


Mi potresti fare un esempio veloce?
Il problema è che ci sono quasi un centinaio di variabili definite, e
forse anche di più, quindi fare il controllo su ogni singola variabile
è davvero un casino (metti diverse centinaia di files).
Quando dici "prendere la query string" intendi l'intero URL convertito
in string dopo urldecode?
Mi potresti dare una dritta su come fare?
grazie

 Mi potresti fare un esempio veloce?
if(strpos($_SERVER['QUERY_STRING'],'http://') !== FALSE || strpos($_SERVER
['QUERY_STRING'],'https://') !== FALSE) { die('vaffanculo'); }
:)



Ottimo!
Ti ringrazio molto

 dell'url
qualcosa tipo questo (all'interno di altre istruzioni, quindi OR)
RewriteCond %{QUERY_STRING} aiuto_come_si_scrive [NC,OR]
non sono molto pratico e non so come è la corretta notazione da usare
per inserire
*http://*
mi puoi dare una mano per sistemarlo?
Usando la funzione che mi hai suggerito sotto, è meglio metterlo anche
qui?


a proposito... $_SERVER['QUERY_STRING'] deve essere passata per
urldecode o è già decoded?

 wrote:

/*. void .*/ function CheckFishers()
{
        if( $_SERVER['REQUEST_METHOD'] !== 'GET' )
                return;
 
        foreach( $_GET as $v ){
                if( ! is_array($v) ){
                        if( substr((string)$v, 0, 4) === 'http://' ){
                                sleep(15);
                                header("HTTP/1.1 666 Fishing request detected");
                                exit(0);
                        }
                }
        }
}
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it

On 11 Mar, 14:27, Umberto Salsi <sa...@icosaedro.italia> wrote:

grazie anche a te
come mai hai messo un sleep di 15 secondi?


Suppongo per dare l'impressione che stia elaborando qualcosa o più semplicemente
per dar fastidio al furbo di turno :)

 header("HTTP/1.1 666 Fishing request detected"); exit(0);
HAHAHA! Lo status code diabolico non l'avevo notato! :D
Bye.


Pensavo che esistesse davvero :)

 come mai hai messo un sleep di 15 secondi?
Se il server ha risorse da buttare via, un bello sleep(15) va giunto bene
per far penare un po' lo scanner malevolo rallentandone il lavoro.
Errata:
if( substr((string)$v, 0, 4) === 'http://' ){
Corrige:
if( substr((string)$v, 0, 7) === 'http://' ){
