• No se han encontrado resultados

Filtrat de pàgines web

N/A
N/A
Protected

Academic year: 2020

Share "Filtrat de pàgines web"

Copied!
59
0
0

Texto completo

(1)Treball final de carrera Filtrat de pàgines Web. David Sánchez Silva ETIS. Consultor: Maria Isabel March Hermo 12/01/2014. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 1.

(2) Dedicatòria. Dedico aquest projecte a la meva família, en especial a la meva dona i al meu fill que sempre han estat ajudant-me i donant-me ànims per que tirés endavant la carrera. Sou el més important de la meva vida, us estimo.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 2.

(3) Resum. L’objectiu d’aquest projecte final de carrera es la implementació d’un programa que permeti el filtrat de pàgines web sobre el protocol HTTP. El tipus de filtrat bàsic que s’ha de poder aplicar es o bé per URL o bé per contingut de la web, a més de permetre l’enregistrament de les connexions en un log. Des de un principi l’aplicació s’ha concebut per a processar les peticions que corren sobre el port 80 que és el que utilitza el protocol HTTP. La implementació del protocol HTTPS, encara que es va considerar en un principi, es va descartar ja que suposava incrementar la feina de forma considerable i no estava contemplat dintre dels objectius bàsics del projecte. Per portar a terme aquests objectius m’he valgut dels coneixements adquirits durant la carrera, en la qual vaig cursar assignatures a on vaig poder aprendre les bases de la programació en Java, que és el llenguatge de programació en el qual està implementada l’aplicació. Aquest llenguatge es va escollir, entre d’altres motius que comentaré més endavant, per que és un llenguatge fortament lligat amb Internet. L’objectiu d’aquesta memòria és, entre d’altres coses, el de mostrar al lector les diferents fases per les quals ha passat el desenvolupament de l’aplicació tant a nivell de l’anàlisi i disseny, com de la implementació, arribant fins al testeig final. Així com també guiar a l’usuari a la hora de instal·lar, configurar i executar l’aplicació amb èxit.. Sabadell, 12 de gener del 2014. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 3.

(4) ÍNDEX. 1. Introducció ...........................................................................................................................6 1.1. Justificació del TFC ......................................................................................................6 1.2. Objectiu .........................................................................................................................7 1.3. Enfocament i mètode seguit .........................................................................................7 1.4. Planificació del projecte ................................................................................................9 1.5. Desviació temporal respecte a la planificació original del projecte i canvis realitzats en els objectius finals........................................................................................................ 11 1.6. Productes obtinguts ................................................................................................... 11 1.7. Descripció dels capítols de la memòria..................................................................... 12 2. Conceptes teòrics ............................................................................................................. 13 2.1. Què és un proxy? ...................................................................................................... 13 2.2. El protocol HTTP ....................................................................................................... 16 2.3. Capçaleres ................................................................................................................. 18 3. Anàlisi i disseny de l’aplicació .......................................................................................... 21 3.1. Diagrama de classes ................................................................................................. 21 3.2. Diagrama de casos d’us ............................................................................................ 27 3.3. Diagrama d’estats ...................................................................................................... 28 4. Implementació de l’aplicació ............................................................................................ 29 4.1. Llenguatge de programació Java .............................................................................. 29 4.2. Entorn de desenvolupament...................................................................................... 30 4.3. WindowBuilder ........................................................................................................... 30 4.5. JSoup ......................................................................................................................... 32 4.6. Problemes i solucions durant la implementació de l’aplicació .................................. 32 4.7. Possibles millores a l’aplicació .................................................................................. 33 5. Proves de l’aplicació ......................................................................................................... 35 6. Instal·lació i configuració de l’aplicació ............................................................................ 39 6.1. Màquina Virtual Java (JVM) ...................................................................................... 39 6.1.1. Instal·lació ........................................................................................................... 40 6.1.2. Variable PATH .................................................................................................... 41 6.2. Configuració del navegador web ............................................................................... 45 6.2.1. Internet Explorer ................................................................................................. 45 6.2.2. Mozilla Firefox ..................................................................................................... 47 6.2.3. Google Chrome................................................................................................... 49 6.3. Descripció del funcionament de l’aplicació ............................................................... 52. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 4.

(5) 7. Conclusions ...................................................................................................................... 57 8. Glossari ............................................................................................................................. 58 9. Bibliografia ........................................................................................................................ 59. ÍNDEX DE FIGURES. 2.2. El protocol HTTP 2.2.1. Transacció bàsica HTTP ......................................................................................... 16 3. Anàlisi i disseny de l’aplicació 3.1.1. Diagrama de classes ............................................................................................... 22 3.2.1. Diagrama de casos d’ús .......................................................................................... 28 3.3.1. Diagrama d’estats ................................................................................................... 29. 4. Implementació de l’aplicació 4.3.1. WindowBuilder......................................................................................................... 31 6. Màquina Virtual Java 6.1.1.1. Instal·lació JVM figura 1 ....................................................................................... 40 6.1.1.2. Instal·lació JVM figura 2 ....................................................................................... 41 6.1.2.1. Configuració variable PATH figura 1 .................................................................... 42 6.1.2.2. Configuració variable PATH figura 2 .................................................................... 42 6.1.2.3. Configuració variable PATH figura 3 .................................................................... 43 6.1.2.4. Configuració variable PATH figura 4 .................................................................... 44 6.1.2.5. Configuració variable PATH figura 5.................................................................... 44. 6.2. Configuració del navegador web 6.2.1.1 Configuració Internet Explorer figura 1 ................................................................. 45 6.2.1.2 Configuració Internet Explorer figura 2 ................................................................. 46 6.2.1.3 Configuració Internet Explorer figura 3 ................................................................. 47 6.2.2.1 Configuració Firefox figura 1 ................................................................................. 47 6.2.2.2 Configuració Firefox figura 2 ................................................................................. 48 6.2.2.3 Configuració Firefox figura 3 ................................................................................. 49 6.2.3.1 Configuració Google Chrome figura 1 .................................................................. 50 6.2.3.2 Configuració Google Chrome figura 2 .................................................................. 50 6.2.3.3 Configuració Google Chrome figura 3 .................................................................. 51 6.2.3.4 Configuració Google Chrome figura 4 .................................................................. 51 6.2.3.5 Configuració Google Chrome figura 5 .................................................................. 52. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 5.

(6) 6.3. Descripció del funcionament de l’aplicació 6.3.1. Pantalla principal ..................................................................................................... 53 6.3.2. Menú general........................................................................................................... 54 6.3.3. Menú filtres .............................................................................................................. 54 6.3.4. Menú logs ................................................................................................................ 55. 1. Introducció Durant els darrers anys Internet s’ha convertit en una eina indispensable a la vida de moltes persones, tant a la vida personal com a la laboral. Ja ningú dubta de les possibilitats que ofereix a nivell de comunicacions, ja que permet posar en contacte a persones de tot el món d’una manera tant eficaç que era impensable fa uns anys enrere, a més de ser una font d’informació immensa. Aquest creixement imparable de la xarxa a nivell mundial ha fet que sigui extremadament fàcil accedir a continguts que podrien ser poc apropiats per a segons quines persones, o segons quines edats. El problema també s’ha fet patent a nivell d’empresa, ja que per motius de rendiment laboral a moltes empreses els ha sorgit la necessitat de poder bloquejar continguts no apropiats a l’àmbit laboral, com podrien ser les xarxes socials, per posar un exemple. D’aquest problema va sorgir la necessitat de crear aplicacions que fossin capaços de bloquejar l’accés als recursos no desitjats. Una aplicació capaç de proporcionar aquesta funcionalitat és un proxy. Aquest projecte final de carrera intenta donar una solució al problema, amb una aplicació que és capaç de filtrar els continguts d’Internet ja sigui per URL o per contingut de la pàgina web. Encara que l’aplicació implementada no es pot comparar amb les solucions comercials més avançades espero que suposi un punt de partida que em permeti un major perfeccionament de l’aplicació en un futur.. 1.1. Justificació del TFC. Quan es van exposar els diferents TFC que podíem triar vaig escollir aquest sense dubtar, ja que el meu cas particular (sóc pare de família), fa que tingui especial interès per aquest tipus de qüestions. Com ja s’ha comentat anteriorment Internet és una font d’informació excepcionalment gran, aquest fet fa que tingui molts continguts inapropiats per a determinades edats els quals s’han de poder filtrar per que no hi tinguin accés els nens, per exemple.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 6.

(7) També va influir en la elecció d’aquest TFC el fet que durant la carrera vaig tenir especial predilecció per les assignatures de xarxes i programació, i el coneixement que vaig obtenir m’ha sigut de gran utilitat a la hora de poder portar a terme la implementació de l’aplicació, Exposades les motivacions que em van portar a realitzar aquest TFC concloc dient que espero poder realitzar una aplicació que sigui fàcil d’utilitzar i que doni suport a tots els requeriments necessaris per a poder portar a terme el filtrat amb garanties.. 1.2. Objectiu L’objectiu és dissenyar una aplicació la qual sigui capaç de bloquejar l’accés a determinades webs que continguin determinades paraules clau o bé bloquejar la web per URL. Aquesta aplicació estarà tipus proxy estarà situada entre el navegador i Internet, quan l’usuari faci una petició a Internet el programa comprovarà si la URL o bé la paraula existeixen en una llista negre i, si és el cas, no permetrà l’accés. En comptes d’això retornarà una advertència que dirà que l’accés a aquesta web no està permès. La comprovació de les llistes negres es farà mitjançant dos fitxers de text que emmagatzemaran les URL’s i les paraules clau les quals es vol bloquejar. El servidor proxy emmagatzemarà logs que permetran saber quines webs han estat bloquejades o no, la IP del host local que ha iniciat la connexió i la del host extern al qual ens hem connectat, el nom de la URL a la qual ens hem connectat, a més de la hora a la qual s’ha fet la petició. El programa també tindrà opcions que es podran modificar com ara el port que utilitzarà el servidor proxy, connectar o desconnectar el proxy, emmagatzemar la informació als logs o no fer-ho, filtrar els logs de diferents maneres com ara per IP interna, per IP externa, per webs denegades i també per webs acceptades.. 1.3. Enfocament i mètode seguit. La realització del projecte es pot dividir en una sèrie de fases que procedirem a analitzar tot seguit:. FASE 1. Aquesta va ser la fase de recollida de tota la informació rellevant per a portar a terme el projecte. Primer vaig buscar informació sobre què és realment un proxy, quines classes hi ha i quin tipus era realment el que jo necessitava per a programar un proxy HTTP. Després. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 7.

(8) de recavar la informació necessària vaig trobar que el tipus de proxy que s’adequava a les meves necessitats és un proxy web. Una vegada recollida la informació rellevant sobre proxies vaig començar a investigar sobre el protocol HTTP, com podia capturar una petició del navegador y com havia de manegar aquesta informació en el proxy. Aquesta investigació em va portar a buscar informació sobre les capçaleres HTTP, que són els paràmetres que envien informació vital al client o al servidor sobre la transacció en curs. Així doncs una vegada vaig investigar sobre el protocol HTTP vaig analitzar quin seria un bon candidat per a implementar l’aplicació i després de donar-li voltes i comparar els avantatges i els desavantatges dels principals llenguatges que s’utilitzen avui en dia vaig arribar a la conclusió de que el llenguatge que utilitzaria seria Java, ja que és un llenguatge d’alt nivell, constantment actualitzat, multi plataforma gràcies al JVM, íntimament lligat a Internet i que és àmpliament utilitzat a tot el món. Quan vaig decidir el llenguatge de programació ideal vaig començar a investigar quines classes de Java serien les adequades per ajudar-me a rebre, processar i retornar les peticions HTTP. Vaig arribar ràpidament a les classes Socket i ServerSocket, els sockets són els punts de comunicació mitjançant un procés pot enviar o rebre informació. Una vegada fet tot això vaig procedir a buscar proxies open source per fer-me una idea del funcionament general, tanmateix aquesta cerca no va donar els fruits desitjats, ja que la majoria dels que vaig trobar o bé eren de pagament o bé no realitzaven el que jo necessitava.. FASE 2 Una vegada vaig buscar tota la informació necessària vaig procedir a fer l’anàlisi i el disseny de la futura aplicació, respecte a la part de l’anàlisi vaig procedir a fer la captura de requisits del sistema (funcions, dimensions, usuaris i restriccions), una vegada recavades aquestes dades es procedeix a fer un anàlisi de les classes que serien necessàries junt amb les funcions que hauria de tenir cadascuna i les seves relacions, tot això s’arrodoneix amb un diagrama de casos d’ús i amb un d’estats que ajudaran a entendre millor la funcionalitat de l’aplicació. Una vegada vaig tenir l’anàlisi fet vaig procedir al disseny de l’aplicació en la qual vaig decidir quina interfície havia de tenir l’aplicació i de quina manera emmagatzemaria la informació (si amb base de dades o bé en fitxers). D’aquesta fase d’anàlisi van sortir les especificacions finals que havia de tenir l’aplicació. Una vegada recavades totes aquestes dades vaig començar la implementació del proxy en Java, mirant de documentar la memòria al mateix temps que anava avançant en la pròpia aplicació. El primer que vaig fer va ser buscar la millor manera de crear la interfície gràfica, després d’estar buscant un temps vaig trobar WindowBuilder, que és un ajudant per crear interfícies gràfiques que simplifica bastant la feina, ja que permet la creació de formularis a l’estil Visual Basic. Una vegada instal·lat el software necessari vaig procedir a crear la interfície gràfica de l’aplicació (la finestra principal, la dels filtres, la del log i la de configuració general).. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 8.

(9) Així doncs uns vegada vaig tenir l’aplicació creada (almenys en aparença), vaig començar a implementar la classe proxy, que és el cor de l’aplicació i la que em va donar més feina. El primer que vaig fer va ser implementar la funció proxy bàsica, rebent la sol·licitud HTTP, processant-la i retornant-la al navegador, una vegada vaig tenir això fet vaig procedir a implementar la funció de filtrat mitjançant es comprovava que la URL en qüestió a la que es volia tenir accés estava en una llista negra o no ho estava, o bé si el contingut de la pàgina web contenia cap paraula prohibida (això es va implementar mitjançant la biblioteca JSoup). Una vegada fet això vaig procedir a implementar el sistema de LOG, mitjançant el qual totes les peticions queden registrades en un fitxer (tant les acceptades com les denegades). Per acabar vaig implementar el sistema de configuració del programa, mitjançant el qual es pot activar/desactivar el proxy, activar/desactivar el LOG o bé canviar el número de port del servidor.. FASE 3 Aquesta fase és la de testeig final de l’aplicació per a la correcció de possibles errors, afegir els comentaris necessaris en el codi per fer-lo més comprensible i posar en pràctica el joc de proves adient per a garantir el correcte funcionament de l’aplicació. També vaig fer els arranjaments finals de la memòria per a garantir una documentació correcta.. 1.4. Planificació del projecte. Tasca 1: Temporització: 2 setmanes (30 de setembre al 13 d’octubre). Descripció: Recollida i classificació de tota la informació que pugui ser rellevant per dur a terme el projecte: 1.1 - Buscar informació sobre proxys open source. 1.2 - Clarificar la funcionalitat que haurà de tenir el servidor proxy. Objectius: - Aprofundir els coneixements sobre els servidors proxy i tenir una visió clara de la funcionalitat del programa. Fites: - Obtenir informació rellevant que ajudi per al posterior anàlisi del projecte. Tasca 2: Temporització: 2 setmanes (del 14 al 27 d’octubre). Descripció: Anàlisi i disseny del servidor proxy.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 9.

(10) Objectius: - Establir els requisits que haurà de tenir el servidor proxy. - Obtenir l’anàlisi del programari en funció dels requisits i de la funcionalitat que se li vol donar. - Obtenir el disseny de l’aplicació a implementar basant-nos en l’anàlisi del punt anterior. Fites: - Obtenir l’anàlisi i el disseny de l’aplicació documentant les decisions preses. - Obtenir els diagrames necessaris per a la realització del projecte.  Diagrama de classes (per a descriure l’estructura del sistema).  Diagrama de casos d’ús (mostrar operacions disponibles en el sistema).  Diagrama d’estats (mostrar tots els possibles recorreguts d’una petició al servidor proxy).. Tasca 3: Temporització: 8 setmanes (28 d’octubre al 22 de desembre). Descripció: Implementació del servidor proxy. Objectius: - Implementar les següents funcions bàsiques al servidor proxy (les funcions finals podrien ser més en funció del temps de que disposi):  Llista negre de URL’s (aquelles a les que no es tindrà accés) i llista negra per contingut de la web (filtrar per paraules restringides) 2 setmanes.  Emmagatzematge de totes les pàgines web visitades, IP’s que s’han connectat a Internet, mostrar les webs que s’han bloquejat per cada IP... (logs) 2 setmanes.  Llista negre d’arxius, imatges o protocols (bloquejant les imatges de les web també consumim menys ample de banda) 2 setmanes.  Permetre a l’usuari la configuració del proxy per establir les llistes negres o IP’s que no poden tenir accés a Internet 2 setmanes. Fites: - Creació del servidor proxy. - Document sobre la implementació (decisions, tècniques emprades...). Tasca 4: Temporització: 1 setmana (del 23 al 29 de desembre). Descripció: Jocs de proves. Objectius: - Generar els jocs de proves adients per garantir el correcte funcionament del servidor, i per comprovar que es cobreixen els requisits establerts. Fites: - Documentació sobre els jocs de proves. Tasca 5: Temporització: 2 setmanes (del 30 de desembre al 12 de gener). Descripció: Arranjaments finals de la memòria i preparar la presentació del servidor proxy que s’ha creat.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 10.

(11) Objectius: - Síntesi de la memòria presa durant el projecte. - Crear una presentació del servidor proxy creat. Fites: - Memòria del projecte. - Presentació del servidor proxy.. 1.5. Desviació temporal respecte a la planificació original del projecte i canvis realitzats en els objectius finals. Durant la realització del projecte hi van haver certs canvis temporals i d’objectius que passo a comentar: Tasca 3 La implementació del servidor proxy es va allargar més del que vaig suposar en un primer moment, degut a això l’aplicació no estava llesta per la data fixada inicialment (22 de desembre), la implementació es va allargar fins al dia 2 de gener. Respecte als objectius fixats inicialment al final no es va portar a terme la llista negra d’arxius, imatges o protocols, principalment degut a que la llista negra per URL i per contingut de la web (per paraula) ja em va portar molt de temps.. Tasca 4 Degut a que la implementació del proxy va acabar el dia 2 de gener el joc de proves va ser testejat del dia 2 al 7 de gener.. Tasca 5 Degut al retard en la implementació de les tasques 3 i 4 la preparació de la presentació del proxy es realitzarà després de la presentació de la memòria i del programa (a partir del dia 12 de gener).. 1.6. Productes obtinguts Aquest apartat detallarà breument (ja que s’analitzen en detall en els següents apartats) el contingut dels productes obtinguts durant la implementació de la aplicació, així com el propòsit de cadascun.. Classes. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 11.

(12) . . . . . Server.java: Aquesta és la classe Server, la qual conté el cor de l’aplicació. S’encarrega de enviar i rebre les peticions HTTP, analitza la URL i també el contingut de la pàgina web a més de crear un registre de LOG que conté la informació relativa a cada connexió que s’ha acceptat o s’ha denegat. Window1.java: Aquesta classe conté la pantalla principal de l’aplicació, i és la encarregada de permetre’ns accedir a la pantalla de configuració del proxy, a la pantalla dels logs i a la pantalla dels filtres per URL i per contingut. A més a més conté una finestra que ens permet veure en temps real el contingut del fitxer de LOG, que es va actualitzant constantment. Window2.java: Aquesta classe conté la pantalla a on podem afegir les URL’s que vulguem bloquejar, o bé les paraules clau que s’hauran de buscar en el contingut de la pàgina web per procedir a bloquejar-la si fos necessari. Window3.java: Aquesta classe conté la finestra del LOG, a on podem mostrar-lo sencer, o bé podem filtrar-lo per accessos permesos o denegats. També permet filtrar el contingut per IP interna o bé externa, a més a més de mostrar també les IP’s de la nostra xarxa interna que s’han connectat en algun moment a través de proxy i mostrar la data i hora a la que ho van fer. Window4.java: Aquesta classe conté la finestra amb les opcions generals del proxy, permet activar-lo o desactivar-lo, activar o desactivar els logs, o bé canviar el port del servidor proxy.. Fitxers    . CONFIG.txt: Aquest fitxer conté els valors de la configuració general del proxy, si està activat o no, si els logs estan activats o no i el numero de port. proxyLOG.txt: Aquest fitxer és l’encarregat d’emmagatzemar el registre de tots els accessos que s’han produït a través del proxy, tant acceptats com denegats. URLBlackList.txt: Aquest fitxer emmagatzema les URL’s que volem bloquejar. WORDBlackList.txt: Aquest fitxer s’encarrega d’emmagatzemar la llista de paraules clau que no poden sortir en el contingut de les pàgines web.. 1.7. Descripció dels capítols de la memòria Abans d’entrar en matèria procedirem a explicar breument el contingut de cadascun dels capítols de la memòria, ajudant d’aquesta manera a fer-nos una idea més clara del que vindrà a continuació:. 2. Conceptes teòrics: Descriurem els conceptes fonamentals necessaris per a poder comprendre el funcionament d’un proxy i del protocol HTTP. 3. Anàlisi i disseny de l’aplicació: Procedirem a detallar l’anàlisi i el disseny de la aplicació, des de el punt de vista de les classes necessàries, quines funcions incorporen i quines relacions tenen. També inclourem diagrames de classes, casos d’ús i d’estats per proporcionar una millor comprensió de funcionament de l’aplicació.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 12.

(13) 4. Implementació de l’aplicació: Es justificarà la elecció del llenguatge escollit per a la codificació del projecte, a més de donar detalls de tipus més tècnic aclarint les decisions preses a la hora de implementar una funció d’una manera o d’un altra. També s’explicaran els problemes que van sorgir i quina solució se’ls hi va donar. Per finalitzar analitzarà les possibles millores que es podrien portar a terme a l’aplicació en el futur. 5. Proves de l’aplicació: Es mostraran les proves que es van portar a terme per a comprovar el correcte funcionament de l’aplicació a la hora de filtrar per URL o per contingut, així com per a emmagatzemar els resultats en el LOG. 6. Instal·lació i configuració de l’aplicació: Explicarem el procediment per a instal·lar l’aplicació així com per a la seva configuració. També detallarem la instal·lació i configuració d’altres elements bàsics com són el JVM (Màquina Virtual Java) i els navegadors web. 7. Conclusions: En aquest apartat donarem les conclusions a les quals hem arribat després de tota la feina portada a terme, detallarem si el resultat final ha sigut satisfactori. 8. Glossari: Recull de tots els termes utilitzats poc coneguts o de difícil interpretació, acompanyats de la seva definició. 9. Bibliografia: Recull d’enllaços d’Internet dels quals vaig extreure la informació necessària per a portar a terme aquest projecte.. 2. Conceptes teòrics. 2.1. Què és un proxy?. El projecte al qual fa referència aquesta memòria és un programa que realitza un filtrat de les pàgines web per URL o contingut, en altres paraules un proxy. En informàtica un proxy és un dispositiu o una aplicació (com en el cas que ens ocupa), que està situat entre el dispositiu que intenta connectar-se (per exemple un PC), i el servidor al qual intenta connectar-se. D’aquesta manera és el proxy el que realment rep la petició, el que la processa i el que retorna un resultat o altre al navegador web. Començarem descrivint les possibles funcionalitats del proxy: . . . . Millora de la velocitat de càrrega de les pàgines web, ja que si aquest implementés una memòria cau que emmagatzemés les pàgines aquestes podrien ser retornades en el cas de que s’estigués demanant una web que ja ha sigut requerida en alguna ocasió. Reducció del tràfic, ja que si (una altra vegada), utilitzéssim un proxy amb memòria cau aquest podria retornar les que ja té emmagatzemades directament, amb el consegüent alleugeriment de la càrrega del servidor al qual s’estan fent les peticions. Amagar al servidor web la identitat de la màquina que sol·licita contingut, el servidor només podria veure la IP del proxy que sol·licita el contingut, però no podria veure la IP de la màquina que ha iniciat la petició. Implementar filtratge de contingut, ja que el proxy es capaç de bloquejar accessos a determinades URL o a pàgines web que contenen una o vàries. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 13.

(14) . paraules “clau” , que es busquen a la pàgina abans de mostrar-la, si es troba la paraula en qüestió la web no es mostra. Un proxy pot arribar a modificar els continguts de la pàgina web que es vol mostrar, per exemple podria buscar les paraules que continguessin la lletra ‘a’ i podria canviar aquestes lletres per ‘b’, encara que pot tenir molt més usos, com per exemple canviar les imatges que es mostren.... Tot seguit farem un petit resum amb els avantatges i desavantatges quan utilitzem un proxy, sigui del tipus que sigui. Els principals avantatges que ens pot donar un proxy són:     . Control: Com que és el proxy el que fa el treball real també pot modificar els drets dels usuaris. Estalvi: El proxy és l’únic element que necessita els recursos per realitzar aquesta funcionalitat, ja que és l’encarregat de realitzar les connexions. Filtrat: El proxy permet bloquejar les URL’s les quals no volem que els usuaris tinguin accés, o bé continguin contingut ofensiu, per exemple. Modificacions: El proxy és capaç de realitzar modificacions sobre les peticions i retornar la web al navegador realitzant modificacions sobre les imatges, contingut... Velocitat: Si el proxy implementa una memòria cau aquesta pot servir per alleugerar la càrrega sobre el servidor web ja que pot carregar les pàgines web que ja hagin sigut visitades alguna vegada de la seva pròpia memòria cau, fent la connexió bastant més ràpida.. Els principals desavantatges que ens pot donar un proxy són:  .  . . Càrrega: El proxy és el responsable de rebre i retornar les peticions de molts usuaris, i això pot resultar en un problema de càrrega pel mateix proxy. Intromissió: El proxy és un pas de més en el procés de connexió, i pot comportar un problema de seguretat, encara més si és un proxy-cau i emmagatzema les pàgines web. Anonimat: En alguns casos la identificació pot ser necessària, i el proxy pot donar problemes en aquest sentit. Incoherència: Si el proxy implementa una memòria cau emmagatzema les pàgines, es pot donar el cas de que el proxy retorni una pàgina web no actualitzada amb les últimes dades, si per exemple les dades de la web original van ser actualitzades just un moment abans de que el proxy anés a retornar la web de la seva memòria cau. Irregularitat: El fet de que un proxy representi a més d’un usuari pot donar problemes en els casos en que es pressuposa una comunicació directa entre un emissor i un receptor.. Hi ha dos tipus de proxy: . Proxy local  Està situat a la mateixa màquina que fa les peticions, d’aquesta manera el client pot controlar el tràfic i pot establir les regles de filtrat que consideri necessàries.. . Proxy extern. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 14.

(15) . No està situat a la mateixa màquina que fa les peticions, es solen usar per bloquejar continguts, implementar cachejos, control de tràfic.... Podem dividir els tipus de proxy segons les funcionalitats que proporcionen. . . . . . . . Proxy de memòria cau  Conserva una còpia en local del contingut visitat, d’aquesta manera pot accelerar la resposta de les futures peticions. Proxy transparent  Combina un servidor proxy amb un tallafocs, de manera que les connexions són interceptades i desviades cap al proxy sense necessitat de configuració per part del client. Proxy SOCKS  El servidor SOCKS no utilitza el protocol HTTP, sinó que utilitza el protocol específic SOCKS. El client és a la vegada client HTTP i client SOCKS. El client li diu al proxy SOCKS què és el que vol i el proxy es comunica amb el servidor web extern, obté els resultats i els envia de nou al client. Aquest tipus de proxy ja no s’utilitza pràcticament. Proxy invers  És un proxy situat en un o varis servidors web, tot el tràfic que rep aquest servidor és analitzat pel proxy. Proxy NAT  Aquest proxy utilitza una tècnica per re-escriure les direccions IP origen o destí dels paquets IP, i les substitueix per altres. L’accés mitjançant el proxy NAT proporciona una certa seguretat ja que no hi pot haver connexió directa entre l’exterior i la xarxa privada, fent que els equips no estiguin exposats a atacs directes des de l’exterior. Proxy obert  Aquest proxy accepta connexions de qualsevol ordinador, estigui o no connectat a la seva xarxa. Al aplicar-li una configuració oberta a tot Internet pot passar a convertir-se en una eina maliciosa, per exemple es podria usar per el re-enviament de correus massius d’spam. Proxy web  Es tracta d’un proxy per a una aplicació específica: l’accés a la web amb els protocols HTTP i HTTPS, i accessòriament FTP. A part de la utilitat general d’un proxy pot proporcionar una memòria cau compartida per a les pàgines web i continguts descarregats.. Per crear l’aplicació m’he basat en l’últim tipus que hem comentat, el proxy Web. Les seves característiques són:  . Dóna accés als protocols HTTP, HTTPS i FTP (si convé). Pot millorar el temps de resposta de les connexions treballant com un proxy-caché (memòria cau), emmagatzemant les webs que visita a la memòria cau local, d’aquesta manera quan es realitza una petició web primer es comprova si la memòria cau conté aquesta mateixa web, si la conté (i no ha variat en res) llavors es retorna la que conté la memòria cau, amb el l’estalvi de temps que comporta.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 15.

(16) 2.2. El protocol HTTP. Com ja hem comentat abans, aquest projecte de proxy el realitzarem utilitzant el protocol HTTP (port 80), aquest protocol és el que s’utilitza a cada transacció a la World Wide Web. HTTP va ser desenvolupat pel World Wide Web Consortium i la Internet Engineering Task Force, col·laboració que va culminar al 1999 amb la publicació d’una sèrie de RFC, el més important dels quals seria el RFC 2616 que especifica la versió 1.1. HTTP defineix la semàntica i la sintaxis dels elements de software per comunicar-se, és un protocol orientat a transaccions i segueix l’esquema petició-resposta entre client i servidor. Al client que efectua la petició se’l coneix com a l’agent d’usuari, a la informació transmesa se la coneix com a recurs i se la identifica mitjançant una URL. HTTP és un protocol d’estat, això vol dir que no guarda informació sobre les connexions existents, per resoldre aquest problema s’utilitzen les cookies, que és informació que un servidor pot emmagatzemar en el client. Comunicacions per la xarxa, les transaccions HTTP: La següent figura mostra una transacció bàsica HTTP:. 2.2.1. Transacció bàsica HTTP. Ilustración 1. A on es pot veure una transacció simple HTTP que un client fa cap a un servidor, una vegada acceptada la petició el servidor retorna la informació al client.. Passem a detallar el funcionament de les transaccions HTTP: Una transacció està formada per un encapçalat, seguida per una línia en blanc i seguidament les dades. Un encapçalat és un bloc de dades que precedeixen a la informació que es vol enviar, aquest encapçalat especifica l’acció requerida del servidor, el tipus de dada retornada o bé el codi d’estat. Una vegada el servidor ha rebut la petició aquest retorna al client:. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 16.

(17)   . Un codi d’estat el qual indica si la petició va ser correcta o no. La informació pròpiament dita. Informació sobre l’objecte que es retorna.. El protocol HTTP ha sofert diverses revisions des la primera versió, passem a detallar les versions amb els canvis que van aportar:   . . 0.9: Aquesta versió està obsoleta, només suportava el comando GET, no suporta capçaleres i, a més, tampoc suporta POST. HTTP/1.0: Aquesta és la primera revisió del protocol i corregeix les carències de la anterior versió 0.9. Encara s’usa àmpliament, sobretot en servidors proxy. HTTP/1.1: Aquesta és la versió actual, les connexions persistents estan activades per defecte, i també permet al client enviar vàries peticions a la vegada per la mateixa connexió (pipelining). HTTP/1.2: El primer esborrador es va presentar al 1995, HTTP Extension Framework, es va publicar al febrer del 2000. Encara és experimental.. HTTP disposa de 8 mètodes per a indicar l’acció que es desitja que s’efectuï sobre el recurs especificat, també anomenat mètodes de petició, les quals són: . HEAD: Demana una resposta idèntica a la que correspondria a la petició GET, la diferència és que aquesta resposta no inclou el cos de la resposta. Això és útil per obtenir la meta-informació de les capçaleres de resposta, sense haver de transportar tota la informació..  . GET: Demana una representació del recurs especificat, normalment una URL. POST: Inclou dades que seran enviades junt amb el cos de la petició, això pot servir per exemple per enviar les dades d’usuari i contrasenya quan es requereix identificació. PUT: Carrega un arxiu especificat a un servidor, és més eficient que POST. DELETE: Esborra el recurs especificat. TRACE: S’utilitza amb fins de diagnòstic i comprovació, el que fa és que sol·licita al servidor que enviï un missatge de resposta totes les dades que rebi de la petició original. OPTIONS: Retorna tots els mètodes HTTP que el servidor suporta per una URL específica. CONNECT: S’utilitza per saber si es té accés a un host, aquest mètode es sol utilitzar molt per les connexions HTTPS..   .  . Els codis de resposta que podem rebre del servidor una vegada hem fet una petició són aquests: . 1xx Missatges  100 111 Connexió refusada. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 17.

(18) . 2xx Operació realitzada amb èxit  200 OK  201-203 Informació no oficial  204 Sense contingut  205 Contingut per recarregar  206 Contingut parcial. . 3xx Redirecció  301 Mudat permanentment  302 Trobat  303 Altres  304 No modificat  305 Utilitzi un proxy  307 Redirecció temporal. . 4xx Error per part del client  400 Sol·licitud incorrecta  401 No autoritzat  402 Pagament requerit  403 Prohibit  404 No trobat  409 Conflicte  410 Ja no està disponible  412 Ha fallat la precondició. . 5xx Error per part del servidor  500 Error intern  501 No implementat  502 Passarel·la incorrecte  503 Servei no disponible  504 Temps d’espera de la passarel·la esgotat  505 Versió de HTTP no suportada. 2.3. Capçaleres. Les capçaleres HTTP són els paràmetres que envien informació vital al client o al servidor sobre la transacció en curs, en aquest apartat farem un llistat que inclourà les més utilitzades quan fem una petició.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 18.

(19)                                . Accept: Content-Types que s’accepten a la resposta Accept-Charset: Llista dels tipus de caràcters que s’acceptaran. Accept-Encoding: Llista de les codificacions que s’acceptaran. Accept-Language: Llista dels llenguatges que s’acceptaran. Accept-Datetime: Versió acceptable en el temps. Authorization: Credencials que s’utilitzaran per la autentificació HTTP. Cache-Control: Especifica les directives que s’hauran de seguir obligatòriament en el procés de petició i resposta. Connection: El tipus de connexió que el User-Agent preferirà. Cookie: Una cookie que prèviament haurà enviat el servidor. Content-Length: La longitud del cos de la petició en octals. Content-MD5: La suma del contingut del cos de la petició codificat en MD5. Content-Type: El MIME (indica el tipus de dades que conté el fitxer) del cos de la petició. Date: La data i la hora quan la petició va ser feta. Expect: Indica que determinats comportaments del servidor són requerits pel client. From: La direcció de email del client que fa la petició. Host: El nom del domini del servidor i el port al qual aquest servidor està escoltant. If-Match: Només realitza la acció si la entitat subministrada pel client coincideix amb la mateixa entitat del en el servidor. If-Modified-Since: Retorna un “304 Not Modified” si el contingut de la petició no ha canviat. If-None-Match: Fa el mateix que If-Modified-Since. If-Range: Si la entitat no ha canviat envia la part que falta, del contrari envia tota la nova entitat. If-Unmodified-Since: Només envia la resposta si la entitat no ha sigut modificada en un temps determinat. Max-Forwards: Limita el número de vegades que un missatge pot ser enviat a través de proxies o de passarel·les. Origin: Li demana al servidor la capçalera “Access-Control-Allow-Origin” Pragma: Capçaleres específiques de la implementació que poden tenir diversos efectes en qualsevol lloc al llarg de la cadena de petició-resposta. Proxy-Authorization: Credencials d’autorització per a connectar-se a un proxy. Range: Requereix només una part d’una entitat, s’especifica en bytes. Referer: Aquesta és l'adreça de la pàgina web anterior del qual s'ha seguit un enllaç a la pàgina sol·licitada actualment. TE: La transferència de codificacions que l'agent de l'usuari està disposat a acceptar. Upgrade: Pregunta al servidor per a actualitzar a un altre protocol. User-Agent: La cadena d'agent d'usuari de l'agent d'usuari Via: Informa al servidor de proxy a través del qual es va enviar la sol·licitud. Warning: Un advertència general sobre possibles problemes amb el cos de l'entitat.. A mode d’exemple passarem a mostrar la petició que envia el client i la que retorna el servidor quan es realitza una transacció HTTP, en aquest cas he fet la prova amb www.google.es.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 19.

(20) Petició HTTP que envia el client quan estableix la connexió a “www.google.es”: GET http://www.google.es/ HTTP/1.1 Host: www.google.es User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: PREF=ID=29b07edde02d25a7:U=80619837a8963129:FF=0:LD=es:TM=1389308886:LM= 1389450429:S=h9p_7qM1SNnw1bE8; NID=67=v559O-6h7CZ1-RLYhbwylbrzolpmuwaHJkwwTpMkewwe_W2TkJQh2kBGJsRw4YQ9Pn_jMHCbwBmbOLSOUa8 PIRyUw_PDoMMdya_mNuWiBRs8FguwF_AdMDB3uJ7Grnur1e9IPTh2vbLUI9_zbk6bsrI6 BEJ2J0Ljoix6pUzIcRjJZHDFTh8Ilws9avjmfehT6k; SID=DQAAAKwAAADEjQYddgkxFs5mDawB4WLf-eNoG-4MbiRwLJsavkjAhEAJ_idb_bYyFQPchhahBh1SsPy8tr5ljYk4f8Xx_NMHCbRmqXhnl0v36z_BTuTIHr0ZhOAaoZm9e_dY3uyCuyrqLh3NK2cZ9upXL0C_GKYWT 8RGnAa8Pyql0p3pBo2YpNE58Tyhuden-zYeYIJ7viZuwBXodkvi0x_oVkglD1b3m2hVJ1S7zzW7hJ3cjEQ; HSID=AaZmEs0kngahznyvc; APISID=DHxrzRxVRb_6e0DN/A79fDpPrcqLLuM8tl; GZ=Z=0 Connection: keep-alive Procedeixo a comentar línia per línia el seu objectiu (en ordre descendent): 1. GET demana la representació de la URL http://www.google.es, i indica que s’està usant el protocol HTTP/1.1 2. Host indica el nom del domini del servidor al qual ens volem connectar, en aquest cas www.google.es. 3. User-Agent dóna dades del navegador que estem utilitzant, d’aquesta manera les pàgines web poden, per exemple, comprovar la versió del nostre navegador i informar-nos si necessitem una versió superior per a accedir a certes característiques. 4. Accept indica el tipus de dades que s’acceptaran per a la resposta. 5. Accept-Language indica el tipus de llenguatge que s’acceptarà per a la resposta, en aquest cas s’accepta espanyol i anglès. 6. Accept-Encoding indica que el navegador accepta els formats de compressió de continguts gzip i deflate (és el tipus de compressió més utilitzada). 7. Cookie indica la ultima cookie que el servidor va emmagatzemar en el client, en cas de que algun cop n’hagués emmagatzemat alguna. 8. Connection amb el valor keep-alive indica que es pot realitzar més d’una petició per la mateixa connexió establerta.. Resposta HTTP que retorna el servidor: X-Frame-Options [SAMEORIGIN] Transfer-Encoding [chunked] Date [Tue, 14 Jan 2014 20:55:31 GMT] P3P [CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."] X-XSS-Protection [1; mode=block] Expires [-1] Alternate-Protocol [80:quic] Set-Cookie [NID=67=vXflmEBLgH_Q0y1KmkFd20VNVjQZCnKquUVY2DsNG8BcCwGh18z5msz9eEC aNePPNbup-_l2k4Oy4L_ctvwUBpd3k5XuH1EYnos6bNbU0zCKnS7iobEkJRT9qlgHBZzZ;. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 20.

(21) expires=Wed, 16-Jul-2014 20:55:31 GMT; path=/; domain=.google.es; HttpOnly, PREF=ID=c722c368d44f6143:FF=0:TM=1389732931:LM=1389732931:S=ZTKBSsBcqxhl VIOz; expires=Thu, 14-Jan-2016 20:55:31 GMT; path=/; domain=.google.es] Content-Type [text/html; charset=ISO-8859-1] Server [gws] Cache-Control [private, max-age=0]. Procedeixo a comentar línia per línia el seu objectiu (en ordre descendent): 1. X-Frame-Options amb valor SAMEORIGIN indica que el navegador bloquejarà la renderització només si l’origen de nivell superior està en un context de navegació que és diferent a l’origen de contingut que conté la directiva X-Frame-Options 2. Transfer-Encoding amb valor chunked indica que la resposta s’enviarà a trossos, ja que no es coneix la longitud total de la resposta, quan es rep el tros amb valor zero vol dir que la transmissió s’ha acabat. 3. Date indica la data i hora en la qual es va enviar la resposta. 4. P3P pretén informar als usuaris de les polítiques dels proveïdors en el referent a privacitat. Aquesta capçalera està en desús. 5. X-XSS-Protection amb valor 1; mode=block activa la protecció XSS, que està desconnectada per defecte. Aquesta capçalera només pot ser interpretada per Internet Explorer. 6. Expires conté una data a partir de la qual el recurs s’ha de considerar dubtós, en aquest cas té el valor -1, que vol dir que està desactivat. 7. Alternate-Protocol és una capçalera experimental que no s’utilitza. 8. Set-Cookie especifica el nom del cookie que el servidor envia al client perquè aquest l’emmagatzemi en local. 9. Especifica el format de les dades que s’envien amb la petició. 10. Server amb valor gws especifica el nom del servidor, que en aquest cas és “google web server”. 11. Cache-Control amb valors private, max-age=0 indica que la pàgina web no es pot emmagatzemar en la memòria cau, ja que té un valor 0 (que indica el màxim de segons que es podria emmagatzemar aquesta pàgina en la memòria cau). 3. Anàlisi i disseny de l’aplicació. 3.1. Diagrama de classes. A continuació mostrarem el diagrama de classes de l’aplicació el qual mostra les classes amb els seus atributs, funcions i relacions (si n’hi ha):. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 21.

(22) 3.1.1. Diagrama de classes. Il·lustració 1. El programa conté les classes Window1, Window2, Window3, Window4, Server i la classe privada ClientTask, a continuació procediré a explicar el funcionament de cadascuna.. Window1 Aquesta classe és la que s’encarrega de mostrar la pantalla principal del programa, passo a detallar les responsabilitats de la classe:   . Mostrar la pantalla principal del programa. Arrencar el servidor proxy. Carregar la llista de logs de la pantalla principal.. Mostrar la pantalla principal del programa. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 22.

(23) Mitjançant la interfície gràfica WindowBuilder (que de fet és utilitzada a totes les classes WindowX) el programa crea una sèrie d’objectes (botons i una llista) que permeten la interacció de l’usuari amb el programa.. Arrencar el servidor proxy Des de el mètode main de la classe Window1 es fa una crida al mètode Server (el qual passarem a comentar tot seguit), el qual arrenca el servidor encarregat de rebre les sol·licituds HTTP. Des d’aquest moment el servidor proxy ja és operatiu.. Carregar la llista de logs de la pantalla principal en temps real La pantalla principal també carrega la llista de totes les connexions fetes fins la data (tant acceptades com denegades), per tal de realitzar això primer comprova que realment existeix un fitxer de log i si existeix procedeix a carregar la llista, si no és així el crea. Una vegada carregada la llista va comprovant automàticament si hi ha logs nous, si és així els va incloent a la llista.. Window2 Aquesta classe és la que s’encarrega de mostrar la pantalla dels filtres per URL i per contingut, passo a detallar les responsabilitats de la classe:    . Crear i carregar la llista negra per URL. Crear i carregar la llista negra per contingut. Actualitzar la llista negra per URL. Actualitzar la llista negra per contingut.. Crear i carregar la llista negra per URL Comprova que el fitxer “URLBlackList.txt” existeix, i si és així procedeix a carregar el contingut a la llista corresponent. Si el fitxer no existeix procedeix a crear-lo.. Crear i carregar la llista negra per contingut Comprova que el fitxer “WORDBlackList.txt” existeix, i si és així procedeix a carregar el contingut a la llista corresponent. Si el fitxer no existeix procedeix a crear-lo.. Actualitzar la llista negra per URL. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 23.

(24) Al clicar sobre el botó “actualitzar” procedeix a recórrer la llista amb les URL’s que contingui i procedeix a actualitzar el fitxer “URLBlackList.txt” amb aquesta llista.. Actualitzar la llista negra per contingut Al clicar sobre el botó “actualitzar” procedeix a recórrer la llista amb les paraules que contingui i procedeix a actualitzar el fitxer “WORDBlackList.txt” amb aquesta llista.. Window3 Aquesta classe és la que s’encarrega de mostrar el LOG i filtrar-lo per contingut si fos necessari, passo a detallar les responsabilitats de la classe:    . Mostrar el LOG (complet, sense filtrar). Filtrar el LOG filtrat per URL bloquejades o permeses Filtrar el LOG filtrat per IP pública o privada. Mostrar les IP’s dels usuaris que han establert connexió alguna vegada a través del proxy.. Mostrar el LOG (complet, sense filtrar) Es procedeix a obrir i mostrar el fitxer “proxyLOG.txt” sense cap filtrat.. Filtrar el LOG filtrat per URL bloquejades o permeses Es procedeix a buscar en el fitxer “proxyLOG.txt” la paraula “PERMÈS” o “DENEGAT” segons vulguem veure les connexions denegades o permeses. Si alguna línia coincideix llavors es procedeix a crear un nou fitxer auxiliar “LOG.txt” en el qual es van inserint les línies que vagin coincidint, una vegada fet es procedeix a mostrar aquest fitxer “LOG.txt”, i una vegada que el resultat s’ha mostrat el fitxer auxiliar s’esborra.. Filtrar el LOG filtrat per IP pública o privada Una vegada que s’ha inserit una IP vàlida (el sistema s’encarrega de comprovar si ho és) i es clica Intro, es procedeix a crear un nou fitxer auxiliar “LOG.txt” en el qual es van inserint les línies que continguin aquesta IP (ja sigui pública o privada), una vegada fet es procedeix a mostrar aquest fitxer “LOG.txt”, i una vegada que el resultat s’ha mostrat el fitxer auxiliar s’esborra. Si la IP que s’està buscant no existeix el sistema procedeix a informar de que la IP buscada no es troba en el LOG.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 24.

(25) Mostrar les IP’s dels usuaris que han establert connexió alguna vegada a través del proxy Es procedeix a buscar en el fitxer “proxyLOG.txt” totes les IP’s internes que han establert connexió alguna vegada a través del proxy. Una vegada trobades es mostra el resultat per pantalla.. Window4 Aquesta classe és la que s’encarrega de la configuració general del sistema, passo a detallar les responsabilitats de la classe:    . Mostrar configuració actual. Activar o desactivar servidor proxy. Activar o desactivar generació de LOG. Modificar número de port del servidor.. Mostrar configuració actual Al mostrar-se la finestra comprova el contingut del fitxer “CONFIG.txt” i carrega els valors als botons visuals.. Activar o desactivar servidor proxy Al activar o desactivar el botó es procedeix a actualitzar el primer camp del fitxer “CONFIG.txt” amb un “Y” si s’ha activat o amb un “N” si s’ha desactivat.. Activar o desactivar generació de LOG Al activar o desactivar el botó es procedeix a actualitzar el segon camp del fitxer “CONFIG.txt” amb un “Y” si s’ha activat o amb un “N” si s’ha desactivat.. Modificar número de port del servidor Al canviar el número de port i clicar Intro es procedeix a actualitzar el tercer camp del fitxer “CONFIG.txt” amb el número del nou port.. Server La classe Server és l’eix central del programa, és la que decideix quin contingut s’ha filtrar i quin no, passo a detallar les responsabilitats de la classe:  . Arrencar el servidor proxy. Filtrar les sol·licituds HTTP per URL o bé per contingut.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 25.

(26)  . Generació de logs. Generar configuració per defecte del proxy.. Arrencar el servidor proxy La classe Server executa el procés ServerSocket en un thread (un fil), fent d’aquesta manera que corri en segon pla. Una vegada corrent el servidor queda a la espera de noves connexions.. Filtrar les sol·licituds HTTP per URL o bé per contingut El mètode checkURL() és l’encarregat de comprovar que la URL a la qual es vol accedir no estigui dintre del fitxer “URLBlackList.txt”, aquesta comprovació és la primera que es fa una vegada que ha arribat la sol·licitud HTTP i n’hem extret el host. El mètode checkWORD() és l’encarregat de comprovar que el contingut de la web a la qual es vol accedir no conté cap de les paraules clau que conté el fitxer “WORDBlackList”, ho fa mitjançant JSoup, que és una llibreria capaç d’extreure tots els textos d’una pàgina web i una vegada extrets es comparen amb la llista de paraules clau. Aquesta comprovació és la segona que es fa, va darrera de checkURL().. Generació de logs Quan l’accés ha estat permès o bé ha estat denegat queda un registre (sempre que els LOG estigui activat a les opcions generals) en el fitxer “proxyLOG.txt”. Les dades que queden emmagatzemades són: La data i la hora, el host, la IP privada i la IP pública.. ClientTask Aquesta és una classe privada que s’utilitza des de la classe Server, cada vegada que un nou socket (una nova connexió al port escollit) es connecta al ServerSocket es crea una nova instància de ClientTask, passo a detallar les responsabilitats de la classe: . Processar cada nova sol·licitud HTTP. Processar cada nova sol·licitud HTTP Quan arriba una nova sol·licitud HTTP aquesta és validada, se li apliquen els respectius filtres per URL i per contingut i, si el resultat és negatiu (la pàgina web ha passat els dos filtres) llavors el LOG registra que l’accés ha estat permès i el contingut de la web es retorna al navegador.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 26.

(27) En cas de que el resultat hagi estat positiu (la pàgina web no ha passat algun dels dos filtres), llavors el LOG registra que l’accés ha estat denegat i es retorna un missatge al navegador informant de que l’accés ha sigut denegat.. 3.2. Diagrama de casos d’us Un diagrama de casos d’ús és una descripció dels passos o les activitats que han de realitzar-se per a portar a terme algun procés. Els personatges que participen en un cas d’ús es diuen actors. Procedeixo a mostrar el gràfic de casos d’ús que mostra les accions que l’actor (en aquest cas qualsevol usuari que faci ús de l’aplicació) pot portar a terme.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 27.

(28) Il·lustració 2 3.2.1. Diagrama de casos d’ús. 3.3. Diagrama d’estats Un diagrama d’estats mostra el conjunt d’estats pels quals passa un objecte durant la seva vida en una aplicació en resposta a events, junt amb respostes i accions.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 28.

(29) Procedeixo a mostrar el diagrama d’estats de l’aplicació que mostra els diferents estats pels quals pot transcórrer l’aplicació des del moment que rep una petició HTTP fins que retorna un resultat per pantalla (sigui el que sigui).. 3.3.1. Diagrama d'estats. Il·lustració 3 4. Implementació de l’aplicació. 4.1. Llenguatge de programació Java. A la hora d’implementar l’aplicació vaig estar estudiant diverses possibilitats a la hora d’escollir el llenguatge de programació ideal que em permetés implantar un servidor proxy amb èxit. Un dels motius que em va fer optar per Java es que és un llenguatge amb el que ja havia treballat anteriorment durant la carrera (posseïa certs coneixements bàsics). Òbviament aquesta només va ser una de les raons que em van portar a aquesta decisió, les principals son aquestes: . És un llenguatge portable: Això vol dir que una vegada s’ha compilat l’aplicació aquesta hauria de funcionar sobre qualsevol plataforma que disposi de la JVM. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 29.

(30) . . (explicació detallada de què és aquesta màquina virtual al punt 6.1), com podria ser Windows, OSX o bé Linux. Prevalença mundial: Aquest llenguatge de programació és un referent a nivell mundial, això ens assegura que el sistema serà suportat pel fabricant durant els pròxims anys. Alta seguretat: Java és capaç d’oferir un entorn d’aplicacions avançat que és idoni per a les aplicacions en xarxa.. 4.2. Entorn de desenvolupament. Una vegada va estar decidit el llenguatge de programació vaig procedir a instal·lar l’Eclipse el qual ja havia utilitzat més d’una vegada durant la carrera, aquest programa és un IDE (entorn de desenvolupament), el qual facilita la feina a la hora de la implementació ja que facilita un editor de codi, un compilador, un depurador i un constructor d’interfície gràfica (aquest últim no sempre està disponible de sèrie). Una vegada explicat el que és un IDE procedirem a detallar les que crec que són les principals característiques de l’Eclipse:  .   . Diferenciació de la sintaxis per a una major diferenciació i comprensió de les parts del codi. Implementa un assistent per a la escriptura de codi, el qual et pot ajudar si alguna cosa en el codi està malament com per exemple si falten llibreries, si es fa referència a una variable que no existeix o bé si un bucle no acaba mai. De totes formes té moltes més aplicacions. Conté un assistent de cerca de text, el qual es pot utilitzar per buscar alguna paraula en el codi, o bé per modificar una paraula per una altra automàticament. També implementa una eina de depuració de codi, la qual permet al programador la cerca d’errors que d’altra manera serien més difícils de trobar. Per últim incorpora la possibilitat d’executar el codi sense sortir de l’aplicació, la qual cosa ens estalvia temps ja que et permet provar diferents maneres d’implementar el codi gairebé en temps real.. Com ja he comentat aquestes són les característiques que a mi personalment m’han sigut de més utilitat, però he de comentar que aquest entorn de desenvolupament n’incorpora moltes més bastant més complexes.. 4.3. WindowBuilder. A la hora de crear la interfície gràfica vaig sospesar vàries idees, però al final em vaig decantar per WindowBuilder degut a la seva potència i simplicitat d’ús. Aquest ajudant per a crear interfícies gràfiques permet la creació de formularis en els quals podem afegir components visuals com ara checkbox, lists, combos, botons... La llista és molt extensa.. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 30.

(31) Una vegada hem afegit els components que necessitem en el formulari podem accedir al codi que s’ha auto generat a la classe i realitzar les modificacions que necessitem. Podem canviar fàcilment de la vista disseny a la vista del codi clicant sobre les pestanyes “Source” i “Design”, a continuació posem un exemple de la vista disseny:. 4.3.1. WindowBuilder. Il·lustració 4. 4.4. Classes socket i serverSocket Per a la implementació d’aquest proxy he utilitzat sockets, en concret he utilitzat les classes Socket i ServerSocket. Els sockets no són més que un sistema de comunicació entre processos de diferents màquines de una xarxa, el socket és el punt de comunicació mitjançant un procés pot enviar o rebre informació. Van ser popularitzats per la Berckley Software Distribution, de la universitat nordamericana de Berckley. Els sockets utilitzen els protocols TCP i UDP, i utilitzen una sèrie de primitives per establir el punt de comunicació. Classe ServerSocket: És una classe que serveix per atendre les peticions de connexions, un servidor funciona com un bucle infinit a on es crida al mètode accept de la classe ServerSocket mentre queda a la espera d’una nova connexió. Quan aquesta connexió es produeix retorna un objecte de tipus Socket que utilitza el servidor per comunicar-se amb el client. Classe Socket:. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 31.

(32) Mitjançant la classe Socket es poden crear connexions de flux entre dos ordinadors mitjançant el protocol TCP. Aquesta classe és capaç de transmetre qualsevol tipus de dades, i aquesta és una de les claus per la qual s’utilitza tant.. 4.5. JSoup Per a realitzar el procés de filtrat per paraules s’ha d’analitzar tot el text que conté la pàgina web, cosa que pot arribar a ser complicada. Després d’analitzar el tema amb deteniment i de provar diverses opcions vaig arribar a aquesta solució; Jsoup és una biblioteca que permet extreure la informació dels llocs web rebutjant el codi HTML, en aquest cas la informació que extreu és tot el text de cadascuna de les pàgines web que el proxy examina. Una vegada que tenim el text aquest es compara amb la llista de paraules prohibides del filtre de paraules, si es troba cap coincidència llavors es retorna un booleà (true) que informa al proxy que s’ha trobat alguna paraula de la llista i aquest procedeix a rebutjar la petició del navegador. En cas contrari retorna un altre booleà (false), que indica que no ha trobat cap coincidència, llavors el proxy accepta la petició del navegador. Codi java que realitza la comprovació utilitzant JSoup: while((l=inf.readLine())!=null){ try { Document doc = Jsoup.connect(url).get(); Elements ele = doc.body().select("*"); for (Element t : ele) { if (t.text().trim().toLowerCase().matches(".*\\b" + l.trim().toLowerCase() + "\\b.*")) return true; } } catch (Exception ex){ } } Les línies de codi clau són aquestes: Document doc = Jsoup.connect(url).get(); Elements ele = doc.body().select("*"); La primera realitza la connexió de Jsoup sobre la URL requerida. La segona línia procedeix a obtenir el text de la pàgina web descartant el codi HTML.. 4.6. Problemes i solucions durant la implementació de l’aplicació. Durant la implementació del programa van sorgir algunes complicacions que passo a detallar tot seguit:. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 32.

(33) Problemes per a retornar les pàgines web al navegador Vaig sofrir un problema que al principi em va descol·locar bastant, i es que una vegada capturada la sol·licitud HTTP de vegades l’aplicació no era capaç de retornar-la al navegador, o de vegades o feia i d’altres no. Investigant la incidència vaig arribar a la solució, el problema era que el BufferedOutputStream que retorna la informació al navegador no executava un flush() al finalitzar cada càrrega de dades, aquest mètode és necessari per assegurar que les dades que es puguin quedar en el buffer s’enviïn al navegador ,i no quedi res dintre del BufferedOutputStream.. HTTP Error 302 - Moved temporarily En algunes pàgines web, com per exemple “google.es” rebia aquest error quan intentava retornar la web al navegador, és un error que em va fer perdre bastant temps i que vaig trigar a trobar una solució. El problema era que la URL a la qual intentava connectar era automàticament redireccionada cap a una altra URL, cosa que el codi original no contemplava. Ho vaig poder arreglar implementant aquest codi que comprova l’estatus de la connexió (si ha sigut correcta o no, i quin codi dóna en cas que no ho sigui) . int status = ((HttpURLConnection) connection).getResponseCode(); Bàsicament tots els codis que comencin per 3xx significa que hi ha redirecció, llavors hem de prendre la nova URL i establir la connexió de nou per assegurar que tot funcioni correctament.. Analitzar el contingut de la pàgina web A la hora d’analitzar el contingut de la pàgina web per comprovar si contenia cap paraula de la llista negra tenia problemes per obtenir tots els textos, després de perdre bastant de temps en solucions que no van resultar tant efectives com jo hauria desitjat vaig arribar a la solució que va resultar ser JSoup. El funcionament de JSoup ja ha sigut explicat i té un apartat propi (el 2.5.5.), tot i així no podia deixar de comentar-lo en aquest apartat degut al temps que em va portar donar amb una solució efectiva com aquesta.. 4.7. Possibles millores a l’aplicació. La tasca principal ha sigut implementar una aplicació que treballés sobre el protocol HTTP. Tot i que la tasca principal ha sigut coberta han quedat alguns punts de possible millora que passo a esmentar:. TFC - Filtrat de pàgines Web. David Sánchez Silva. Pàgina 33.

Referencias

Documento similar