[Linux-Biella] problema espressione regolare

Manfredo Enrico - Quadra Studio Web manfredo a quadrastudio.it
Mar 5 Feb 2008 01:21:40 CET


Andrea Musuruane ha scritto:
> 2008/2/4, Remotes <webmaster a remotes.it>:
>   
>> quello verrà già usato solo che in alcuni form è necessario utilizzare l'html
>> quindi non posso eliminare tutto il contenuto...
>>     
>
> Allora usa questa funzione per indicare solo i tag che permetti:
>
> http://it2.php.net/strip_tags
>
>   
Ho letto solo adesso, e cmq sono contento che qualcuna conosca ancora il 
linguaggio.
In effetti, trovo inutile reinventare la ruota.

Faccio un breve elenco delle funzioni che possono venire comode in 
questi casi.

Prima cosa, date un occhiata qui
http://www.php.net/manual/it/security.variables.php

funzioni lineari al posto di regexp
http://www.php.net/manual/it/ref.ctype.php

Eval, combinata con altre cosette può dare risultati simpatici
http://www.php.net/manual/it/function.eval.php

Checche se ne dica, session cocky ecc, se usati bene posso essere degli 
ottimi
campanelli di allarme.
http://www.php.net/manual/it/ref.session.php

Funzioni di stringa basilari per l'input utente
http://www.php.net/manual/it/function.html-entity-decode.php
http://www.php.net/manual/it/function.htmlentities.php
http://www.php.net/manual/it/function.htmlspecialchars.php
http://www.php.net/manual/it/function.nl2br.php
http://www.php.net/manual/it/function.quotemeta.php
http://www.php.net/manual/it/function.strip-tags.php

Funzioni unicode < asci > unicode evitano spiacevoli sorprese di 
formattazione
http://www.php.net/manual/it/ref.unicode.php

Con questi si può testare se ti stanno passando un url e se fosse, 
tranciarlo
http://www.php.net/manual/it/ref.url.php

Sono andato molto a memoria, riguardando l'help del PHP che per inciso 
non guardavo da almeno 2 anni (da quando qualcuno programma per me in 
PHP per intendeci)

Ci sono altri bei giochetti che adesso non mi vengono in mente, cmq vale 
sempre la regola.
"So quello che mi arriva, nel dubbio lo scarto."

Semplicisticamente (in realtà l'argomento è davvero vasto e ricco di 
varianti e anche di errori)

In genere, quando si fanno progetti PHP. il framwork viene costruito a 
"cipolla" in modo che gli strati esterni filtrino quelli interni. Ad esempio

La prima struttura gestisce le sessioni e i controlli su gli header 
HTML. I dati che sorpassano una "buccia" devono essere liberi dalle 
informazioni appena controllate.
Se i dati in arrivo non sono conformi deve cadere la connessione. Questo 
strato si occupa anche di monitorare che le richieste fatte da un 
determinato IP non falliscano (statisticamente) troppe volte in un 
periodo troppo corto di tempo

La seconda "buccia" riguarda i controlli di sicurezza dei form (quelli 
hidden, i semi di sessione ecc insomma, tutto quello che serve per 
validare che i dati che ricevono i form non siano stati alterati o 
ignettati) Se questo controllo fallisce, si resetta la sessione e si 
scartano i dati in arrivo.

La terza buccia riguarda i dati contenuti dai form. Se questi non sono 
coerenti, rigetto il form ed invio a reinseire il form dopo che avrò 
rigenerato un nuovo seme di sessione. Ovviamente se il seme non 
corrisponde. rigetto tutto allo buccia superiore, e se il caso alla 
sessione.

A questo punto il mio dato è quasi sicuro. Da qui si riaprono le 
"buccie" verso il database, file o quanto altro. Sempre la stessa 
regola. se un controllo fallisce, deve essere demandato allo strato 
superiore che deciderà cosa fare in base all'errore.




Maggiori informazioni sulla lista Linux