# Mi annoio: anonymizer in rails (anonyrails)

**URL:** <https://www.ruby-forum.com/t/mi-annoio-anonymizer-in-rails-anonyrails/155227>\
**Category:** IT\
**Created:** [December 9, 2008, 5:13pm UTC](https://www.ruby-forum.com/t/mi-annoio-anonymizer-in-rails-anonyrails/155227 "2008-12-09T17:13:58Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [December 9, 2008, 5:13pm UTC](https://www.ruby-forum.com/t/mi-annoio-anonymizer-in-rails-anonyrails/155227/1 "2008-12-09T17:13:58Z")

</div>

Ciao a tutti, visto che oggi non riesco a scrivere una riga una di  
tesi mi stavo cimentando in un programma in rails… ANONYRAILS

Non sono un esperto, quindi vi sottopongo umilmente il mio codice  
alla ricerca di spunti per: andare avanti, lasciar perdere o cambiare  
progettazione

Il programmino che sto scrivendo e’ un CGI proxy, in pratica l’idea  
e’ semplicissima:

- un controller (Hide) e una regola in config/routes.rb

In config/routes.rb ho piazzato sta regola:

map.connect ‘:myurl’, :controller =\> ‘hide’, :action =\>  
‘index’, :requirements =\> { :myurl =\> /.\*/ }

E in class HideController \< ApplicationController ho questa ‘index’  
action

def index  
url = URI.parse(params[:myurl])  
mypage = Net::HTTP.get\_response(  
url.host, url.path  
)  
render :text =\> mypage.body  
end

Si lo so e’ molto naif… ora come ora e’ in grado di rispondere  
solo a chiamate del tipo:

[http://0.0.0.0:3000/http://www.google.it/index.html](http://0.0.0.0:3000/http://www.google.it/index.html)

Se mai decidessi di andare avanti con sto giochino, mi chiedevo come  
gestire gli URL sfruttando il codice gia presente in rails

Io non sono laureato in informatica quindi di solito con il codice  
uso la tecnica “picchia il mulo” imparata e veterinaria: la tecnica  
consiste nel tirar botte al codice fino a quando non fa (piu o meno)  
quello che vorresti … 😜

Quindi qual’e’ il modo migliore per:

1. prendere tutto cio che sta’ in URL dopo il SERVER\_NAME + Porta  
(dopo [http://0.0.0.0:3000/](http://0.0.0.0:3000/))

2. dividere DOMINIO e PATH e PARAMETRI (ora sto usando URI.parse) e  
passarli a Net::HTTP

3. Rimappare immagini e css (che ora vengono “chiesti” al mio  
applicativo in rails:  
Vedi Questo log (preso dall’output di mongrel)

Processing HideController#index (for 127.0.0.1 at 2008-12-09  
16:55:44) [GET]  
Parameters: {“myurl”=\>“images/nav\_logo3.png”}

```
Non capisco perche' in :myurl (definito in config/routes.rb)

```

trovo questo link che fa parte del dominio www.google.it… qualcuno  
sa spiegarmelo?

1. Javascript ? possibili soluzioni per rimappare il codice  
javascript dal sito target attraverso il mio server rails?

Perche’ lo faccio:

Il grande goal e’ arrivare a fare proxy chaining attraverso diverse  
istanze di anonyrails:

[http://anonyrails1/anonyrails2/anonyrails3/http://www.google.it/](http://anonyrails1/anonyrails2/anonyrails3/http://www.google.it/)  
index.html

Poi spargero’ i miei server rails in giro per il mondo in computer  
compromessi… con un programma dal nome “scapistrano” (TODO!)

Ed alla fine il mondo sara’ mio…

muahahahahahah

vebbeh, scherzo.

Tucano

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [December 9, 2008, 7:09pm UTC](https://www.ruby-forum.com/t/mi-annoio-anonymizer-in-rails-anonyrails/155227/2 "2008-12-09T19:09:42Z")

</div>

> Io non sono laureato in informatica quindi di solito con il codice  
> uso la tecnica “picchia il mulo” imparata e veterinaria: la tecnica  
> consiste nel tirar botte al codice fino a quando non fa (piu o meno)  
> quello che vorresti … 😜

allevare codice a botte, concetto interessante. certe volte ci facciamo  
troppe pippe con il design. step 1, farlo funzionare.

Poi spargero’ i miei server rails in giro per il mondo in computer

> compromessi… con un programma dal nome “scapistrano” (TODO!)
> 
> Ed alla fine il mondo sara’ mio…
> 
> muahahahahahah
> 
> vebbeh, scherzo.

don’t. conquistare il mondo con capistrano mi sembra una meta piu’ che  
nobile 🙂

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [December 10, 2008, 3:14pm UTC](https://www.ruby-forum.com/t/mi-annoio-anonymizer-in-rails-anonyrails/155227/3 "2008-12-10T15:14:58Z")

</div>

Se ho ben capito quel che vuoi fare (una catena di proxy http?) credo  
che dovrai riscrivere anche gli header http, in particolare l’header  
Location ritornato dal server. A questo proposito, c’Ã¨ giÃ il mod\_proxy  
di apache che fa praticamente tutto quel che serve, magari in  
congiunzione a mod\_rewrite.

Non ho nulla da ridire perÃ² sul fatto che riscrivere del codice da zero  
sia un metodo migliore per imparare un certo dominio applicativo  
rispetto a studiare la documentazione di qualcosa che esiste. Infatti  
quando voglio imparare davvero qualcosa prima scopro come si fa con il  
meglio che trovo in giro (lo state of the art), poi mi metto a fare  
qualche esperimento con del mio codice ed infine torno quasi sempre ad  
usare quel che hanno giÃ prodotto altri perchÃ© inevitabilmente dopo mesi  
o anni di sviluppo Ã¨ meglio di quel che ho fatto io in poche ore o  
giorni. PerÃ² a quel punto inizio a rendermi conto di come funziona  
davvero il sw che andrÃ² ad usare e quali sono i problemi da affrontare e  
quindi lo so usare meglio.

Vai quindi avanti a fare l’anonymizer in Rails e chissÃ che non ne esca  
fuori qualcosa di meglio di quel che si potrebbe fare con altre  
tecnologie. Un consiglio: per gli esperimenti usa Firefox insieme ad  
estensioni come Firebug e LiveHTTPHeaders per tracciare la comunicazione  
tra browser e proxy; vedere gli header e tutte le richieste effettuate  
ti sarÃ d’aiuto.

Per la tua domanda numero 3: se il browser fa una richiesta al tuo  
server Rails per l’HTML, farÃ a lui anche tutte quelle per js, immagini,  
css ed altro che sono riferiti dall’HTML; e questo mi pare che lo sai e  
cosÃ¬ vorresti riscrivere tutte le url di quei contenuti per bypassare  
Rails. Temo perÃ² che sia un compito improbo e probabilmente impossibile  
da portare a termine con successo (pensa alle url generate da  
javascript). Dovresti mettere davanti a Rails un altro server (Apache?)  
a cui far gestire come proxy tutti i mime-type diversi dall’html, ma  
questo non renderebbe inutile il proxy Rails?

Paolo

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [December 10, 2008, 5:33pm UTC](https://www.ruby-forum.com/t/mi-annoio-anonymizer-in-rails-anonyrails/155227/4 "2008-12-10T17:33:24Z")

</div>

Il giorno 10/dic/08, alle ore 15:14, Paolo M. ha scritto:

> Se ho ben capito quel che vuoi fare (una catena di proxy http?) […]

Ti faccio un esempio con del software disponibile:

Prendi [http://anonymouse.org](http://anonymouse.org), e nel’input text della pagina inserisci  
l’indirizzo di un’altro anonymizer … 🙂

tipo [http://www.shadowsurf.com/](http://www.shadowsurf.com/) e ti ritrovi con un URL come questo:

[http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.shadowsurf.com/](http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.shadowsurf.com/)

Ora proviamo a fare chaining ed andare su google… l’URL diventa cosi:

[http://anonymouse.org/cgi-bin/anon-www.cgi/http://www2.shadowsurf.com/cgi-bin/nph-shadowsurf.cgi/010110A/x-proxy/start](http://anonymouse.org/cgi-bin/anon-www.cgi/http://www2.shadowsurf.com/cgi-bin/nph-shadowsurf.cgi/010110A/x-proxy/start)

… un URL orribile no?

A me invece piacerebbe poter fare un proxy chaining “REST” (mi scuso  
se sto usando questa definizione in modo errato), tipo:

[http://anoynimizer1/http://anonymizer2/http://anonymizer3/http://www.google.it/](http://anoynimizer1/http://anonymizer2/http://anonymizer3/http://www.google.it/)

sarebbe fighissimo! (ditemi se esiste gia’ qualcosa di simile!)

> (Apache?)  
> a cui far gestire come proxy tutti i mime-type diversi dall’html, ma  
> questo non renderebbe inutile il proxy Rails?

Sigh sono d’accordo: il compito e’ arduo

Mi son messo a spiare quello che (credo) fanno i CGI-proxy disponibili  
in rete  
(a parte scavallare le passsword… che lo fanno di sicuro …)

Anonymouse per esempio innietta nella pagina un tag “base”: esempio

\<base  
href=“[http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.yahoo.com/\_ylh=X3oDMTFnaGtyajVzBF9TAzI3MTYxNDkEcGlkAzEyMjg5MTg5NTkEdGVzdAMwBHRtcGwDdGFibGUuaHRtbA--/](http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.yahoo.com/_ylh=X3oDMTFnaGtyajVzBF9TAzI3MTYxNDkEcGlkAzEyMjg5MTg5NTkEdGVzdAMwBHRtcGwDdGFibGUuaHRtbA--/)  
" target=”\_top"\>  
Poi modifica i tag di tutte le immagini, action dei forms, etc…  
\<img  
src="[http://anonymouse.org/cgi-bin/anon-www.cgi/http://l.yimg.com/a/i/ww/beta/y3.gif](http://anonymouse.org/cgi-bin/anon-www.cgi/http://l.yimg.com/a/i/ww/beta/y3.gif)  
" width=“232” height=“44” alt=“Yahoo!” title=“Yahoo”\>  
a anche nel codice javascript… !  
Esempio (da google:  
[Google [Anonymoused]](http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.google.it/))  
f.src=“[Google [Anonymoused]](http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.google.it/)  
#”  
Insomma un lavoraccio, dovrei fare la stessa cosa, aggiungendo a tutti  
i path che trovo la mia “catena di proxy rails” come prefisso…

Ora passiamo al mio tentativo di smanettone… 🙂  
Questo e’ il mio controller: [http://pastie.org/335826](http://pastie.org/335826)  
per farlo girare, basta aggiungere a config/route.rb:  
map.connect ‘:myurl’, :controller =\> ‘hide’, :action =\>  
‘index’, :requirements =\> { :myurl =\> /.\*/ }

In pratica ho aggiunto qualcosa di veramente grezzo che sostituisce  
tutti i pattern  
/src=“(.\*?)”/  
aggiungendo “[http://0.0.0.0:3000/nomehost](http://0.0.0.0:3000/nomehost)”.  
con questa schifezza (e’ una prova, siate buoni) sono riuscito a  
visualizzare il logo di google (chiamando l’url  
[http://0.0.0.0:3000/http://www.google.it/index.html](http://0.0.0.0:3000/http://www.google.it/index.html))  
Domande per i volenterosi che mi vogliono rispondere (vedi codice at  
[http://pastie.org/335826](http://pastie.org/335826))

1. ho inserito il codice che modifica gli url in un metodo private del  
controller, corretto?
2. il metodo viene chiamato da un “after\_filter”, e’ un corretto uso  
dei filtri?
3. Se usate il controller puntando ad un’immagine, l’immagine viene  
renderizzata come testo! praticamente un more su un file binario via  
web … (esempio:  
[http://0.0.0.0:3000/http://www.google.it/intl/it\_it/images/logo.gif](http://0.0.0.0:3000/http://www.google.it/intl/it_it/images/logo.gif))  
; eppure quando rails fa la richiesta riferita alla pagina index.html  
il logo e’ visualizzato correttamente. Non e’ strano?

Qui il log di mongrel:  
Processing HideController#index (for 127.0.0.1 at 2008-12-10 17:15:22)  
[GET] Parameters: {“myurl”=\>“[Google](http://www.google.it/index.html)”}  
Completed in 63ms (View: 0, DB: 0) | 200 OK  
[[http://0.0.0.0/http://www.google.it/index.html](http://0.0.0.0/http://www.google.it/index.html)  
]  
Processing HideController#index (for 127.0.0.1 at 2008-12-10 17:15:22)  
[GET] Parameters:  
{“myurl”=\>"[http://www.google.it/intl/it\_it/images/logo.gif](http://www.google.it/intl/it_it/images/logo.gif)  
"}  
Completed in 80ms (View: 0, DB: 0) | 200 OK  
[[http://0.0.0.0/http://www.google.it/intl/it\_it/images/logo.gif](http://0.0.0.0/http://www.google.it/intl/it_it/images/logo.gif)  
]  
Processing HideController#index (for 127.0.0.1 at 2008-12-10 17:15:22)  
[GET] Parameters: {“myurl”=\>“images/nav\_logo3.png”}  
Errno::ECONNREFUSED (Connection refused - connect(2)): ← QUESTA IL  
MIO super oneline parser non lo becca 😉

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [December 11, 2008, 8:36pm UTC](https://www.ruby-forum.com/t/mi-annoio-anonymizer-in-rails-anonyrails/155227/5 "2008-12-11T20:36:31Z")

</div>

Tucano wrote:

> Il giorno 10/dic/08, alle ore 15:14, Paolo M. ha scritto:
> 
> > Se ho ben capito quel che vuoi fare (una catena di proxy http?) […]
> 
> Ti faccio un esempio con del software disponibile:
> 
> Prendi [http://anonymouse.org](http://anonymouse.org), e nel’input text della pagina inserisci  
> l’indirizzo di un’altro anonymizer … 🙂
> 
> tipo [http://www.shadowsurf.com/](http://www.shadowsurf.com/) e ti ritrovi con un URL come questo:
> 
> [http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.shadowsurf.com/](http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.shadowsurf.com/)

Ok, non avevo capito quasi niente 🙂  
Carino anonymouse, perÃ² dalle prove che ho fatto ho visto che ha  
problemi con le chiamate ajax, il che non mi meraviglia dato che spesso  
e volentieri lÃ¬ non Ã¨ questione di url ma si dovrebbe andare a  
modificare il codice javascript, una roba da AI.

> Ora proviamo a fare chaining ed andare su google… l’URL diventa cosi:
> 
> [http://anonymouse.org/cgi-bin/anon-www.cgi/http://www2.shadowsurf.com/cgi-bin/nph-shadowsurf.cgi/010110A/x-proxy/start](http://anonymouse.org/cgi-bin/anon-www.cgi/http://www2.shadowsurf.com/cgi-bin/nph-shadowsurf.cgi/010110A/x-proxy/start)
> 
> … un URL orribile no?
> 
> A me invece piacerebbe poter fare un proxy chaining “REST” (mi scuso  
> se sto usando questa definizione in modo errato), tipo:
> 
> [http://anoynimizer1/http://anonymizer2/http://anonymizer3/http://www.google.it/](http://anoynimizer1/http://anonymizer2/http://anonymizer3/http://www.google.it/)
> 
> sarebbe fighissimo! (ditemi se esiste gia’ qualcosa di simile!)

Concordo, ma come hai giÃ capito non conosco questo genere di servizi.  
Provo perÃ² a rispondere ad alcune delle tue domande

> 1. ho inserito il codice che modifica gli url in un metodo private del  
> controller, corretto?

Giusto, meglio mantenere privati i metodi che non si vuole vengano  
chiamati dal pubblico.

> 1. il metodo viene chiamato da un “after\_filter”, e’ un corretto uso  
> dei filtri?

Direi di sÃ¬, anche se non amo molto i filtri perchÃ© tendono a nascondere  
all’occhio del codice. Certo che quando fanno risparmiare duplicazioni  
infinite di codice sono veramente utili. Nel tuo caso avrei messo tutto  
nel metodo index.

> 1. Se usate il controller puntando ad un’immagine, l’immagine viene  
> renderizzata come testo! praticamente un more su un file binario via  
> web … (esempio:  
> [http://0.0.0.0:3000/http://www.google.it/intl/it\_it/images/logo.gif](http://0.0.0.0:3000/http://www.google.it/intl/it_it/images/logo.gif))  
> ; eppure quando rails fa la richiesta riferita alla pagina index.html  
> il logo e’ visualizzato correttamente. Non e’ strano?

Controlla gli header http: il mime type ritornato da Rails Ã¨ corretto?  
Scommetto di no perchÃ© non vedo il codice che copia verso il client gli  
header ricevuti dal server.

A presto!  
Paolo

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [December 13, 2008, 6:32pm UTC](https://www.ruby-forum.com/t/mi-annoio-anonymizer-in-rails-anonyrails/155227/6 "2008-12-13T18:32:47Z")

</div>

> From: Tucano [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> To: removed\_email\_address@domain.invalid  
> Sent: Friday, 12 December, 2008 9:42:42  
> Subject: Re: [ruby-it] Mi annoio: anonymizer in rails (anonyrails)

> Torno a gennaio per finire l’anonyrails (beh in realta’ dovro’ finire  
> prima la testi)

ma una volta le vacanze di tre mesi in cambogia-tailandia-laos non di  
facevano _dopo_ aver finito la tesi? 🙂

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [December 12, 2008, 9:43am UTC](https://www.ruby-forum.com/t/mi-annoio-anonymizer-in-rails-anonyrails/155227/7 "2008-12-12T09:43:11Z")

</div>

Caro Paolo sono onorato di avere un po di feedback al mio progetto  
“didattico” … 🙂

Lo lascio fermo per un mese perche’ oggi parto.

Anche io quando “volevo diventare un hacker” (vedi aliosha: diario di  
un hacker, giorno 23 ), ho telefonato per sbaglio al cambogiano Chea  
Vichea: Pare che il suo numero di telefono sia quello usato di default  
per la connessione a Internet.

Ora vado a trovarlo: mi ha trovato un lavoro come bracciante nelle  
risaie.

Diario di un hacker (per chi non lo conosce);  
[http://genius.aliosha.org/archivio/2004/06/04/diario-hacker/](http://genius.aliosha.org/archivio/2004/06/04/diario-hacker/)

… a parte gli scherzi, parto stasera per una traversata di vietnam-  
cambogia-thai.

Per la serie siamo tutti tecnocrati: seguite i miei spostamenti (con  
foto dei posti piu’ belli) via twitter!

[http://twitter.com/tucanourbano](http://twitter.com/tucanourbano)

Ciao!!!

Torno a gennaio per finire l’anonyrails (beh in realta’ dovro’ finire  
prima la testi)

Il giorno 11/dic/08, alle ore 20:36, Paolo M. ha scritto:

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 9, 2009, 8:40am UTC](https://www.ruby-forum.com/t/mi-annoio-anonymizer-in-rails-anonyrails/155227/8 "2009-01-09T08:40:28Z")

</div>

Il giorno 13/dic/08, alle ore 18:32, gabriele renzi ha scritto:

> ma una volta le vacanze di tre mesi in cambogia-tailandia-laos non  
> di facevano _dopo_ aver finito la tesi? 🙂

Infatti ho fatto giusto un mesetto scarso… 😛

solo per prepararmi psicologicamente alla scrittura della tesi!

Chea Vichea stava bene… se qualcuno e’ stufo di ruby e  
dell’informatica e desidera andare a sminare la cambogia… ho preso  
contatti!

Ciao!
