Newsgroup: it.comp.lang.javascript
Titolo: [Segnalo articolo] JavaScript Triggers,by Peter-Paul Koch

JavaScript Triggers
by Peter-Paul Koch (è quello di 
quirksmode.org
)
http://www.alistapart.com/articles/scripttriggers/
Questo articolo sembra rispondere al mio maccheronico quesito non 
risolto di qualche giorno fa. Sembra molto interessante, magari a 
qualcuno potrà servire.
Happy reading.



Letto tutto, molto interessante. Sono tutte prove che avevo già fatto, e
alla fin fine arriva alla mia conclusione: non c'è verso di espandere il
dtd e farlo validare dal validator di w3...
Invece il barbatrucco di usare class per impostare gli attributi
"aggiuntivi" potrebbe non esser malaccio, ma occhio a non abusarne perché
temo rallentamenti (per ogni classe andrà a cercarla, immagino...).
Esisterà un "rem" nel tag class, del tipo 
 class="miaclasse /*required=true*/" ? 
Non credo...
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 
http://www.alistapart.com/articles/scripttriggers/
[cut]
Eh, ha scoperto l'acqua calda. :)
-- 
ZER0
~ The Tangent Universe collapsed 5939 days, 5 hours, 47 minutes and 35 seconds ago.
on air ~ "Gianluca Grignani - Che ne sarà di noi"

 "aggiuntivi" potrebbe non esser malaccio, 
Mappercaritadidio. Lo dice l'autore stesso dell'articolo che non e' una
gran cosa.
-- 
ZER0
~ The Tangent Universe collapsed 5939 days, 5 hours, 52 minutes and 8 seconds ago.


 gran cosa.
Così a naso non mi sembrava malaccio...però penso che un ipotetico browser
sia autorizzato a verificare, in teoria, l'esistenza della classe
indicata...
[OT]
Hai ricevuto la mia mail di ieri?
[/OT]
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 
già,  niente di nuovo.

Tobia ha scritto:

Azz, per me è illuminante, se non altro per la soluzione al mio problema 
segnalato qualche gg fa. Mi chiedo come mai nessuno ha risposto alla mia 
richiesta se è una tecnica cosa che tutti usano quotidianamente.

 richiesta se è una tecnica cosa che tutti usano quotidianamente.
Mi sa' che mi devo esser perso il post in questione. Se mi passi il msg-id
gli do' un occhiata.
-- 
ZER0
~ The Tangent Universe collapsed 5939 days, 8 hours, 33 minutes and 40 seconds ago.


 richiesta se č una tecnica cosa che tutti usano quotidianamente.
molti leggono i messaggi solo certi giorni perchč altri magari sono 
fuori sede, o semplicemente leggono solo quelli che reputano 
interessanti dal subject
grazie del link cmq č utile a molti.

 gli do' un occhiata.
In realtà non avendo idea di cosa cercare ho posto il quesito in maniera 
aboninevole: invece di trigger o parlato di funzioni di callback.
Ciao

 aboninevole: invece di trigger o parlato di funzioni di callback.
Credo che "trigger" li chiami solo lui (inteso come l'autore
dell'articolo); suppongo piuttosto che con quel termine volesse indicare la
"logica" dell'approccio.
Cmq non avendo fornito il msg id del tuo precedente post, suppongo che tu
non abbia piu' bisogno d'aiuto.
-- 
ZER0
~ The Tangent Universe collapsed 5940 days, 4 hours, 19 minutes and 46 seconds ago.


 
No no, mi rifarò viso appeno mi chiarisco le idee e saprò circostanziare 
meglio il quesito. Il msg è questo 
http://tinyurl.com/7259u

> richiesta se è una tecnica cosa che tutti usano quotidianamente.
personalmente pur non conoscendo esattamente questa tecnica, la trovo poco
pulita... cioè non mi piace e non la userei...
xò il concetto alla base è interessante da conoscere...
quindi ho apprezzato molto il link :) 

Magilla wrote:

Mi fa piacere che se ne parli. ppk è davvero un esperto in materia, e dalle
violente critiche che aveva mosso ad un articolo comparso su ala (mi pare
quello sul javascript image replacement) non mi aspettavo che potesse
tornare a scriverci, soprattutto con un articolo che sta facendo molto discutere.
Personalmente non ci vedo niente di male, soprattutto se si riesce a creare
una dtd per validare i documenti con attributi personalizzati (insieme all' articolo
in questione, ne è proprio uscito uno sulle dtd custom).
Non vedo niente di male neanche nell' uso delle classi, che oltre a fornire
una presentazione particolare per alcuni elementi (per es. campi obbligatori per i form
e link esterni al sito che si aprono in una nuova finestra, come ho già usato in due
articoli che ho scritto) forniscono anche un aggancio a javascript.
Quasi parallelamente all' articolo sui triggers, è uscito oggi su Pro un articolo
molto bello che si spinge ancora oltre: fornire una libreria per validare agilmente
pseudo-attributi sui campi di form.
Validazione client-side: un approccio dichiarativo:
http://pro.html.it/articoli/id_573/idcat_11/pag_1/pag.html
Saluti,
  Alessandro Fulciniti


-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 quello sul javascript image replacement) 
Questo invece mi interessa: dove posso trovare le critiche di cui parli?


 Questo invece mi interessa: dove posso trovare le critiche di cui parli?
L' articolo, scritto da Chris Heilmann, č questo:
http://www.alistapart.com/articles/javascriptreplacement/
Il commento di ppk sull' articolo da qui in poi:
http://www.alistapart.com/discuss/javascriptreplacement/2/
L' articolo di risposta di ppk qui: 
http://www.quirksmode.org/oddsandends/again_fir.html
Due parole a difesa di Chris Heilmann, uno dei piů belli articoli che
abbiama mai letto sul javascript č suo: 
http://www.onlinetools.org/articles/unobtrusivejavascript/
Un vero e proprio "manifesto" del javascript basato su dom e separato da contenuto e presentazione.
Poi, gli "errori" li facciamo tutti (come dice mio padre: solo chi non lavora non sbaglia)...
e capisco benissimo la situazione dato che č capitato anche a me giusto questo mercoledě:
la terza parte dell' articolo sul template con css e php, dopo un commento e un thread sul forum
di 
html.it
 č stata sospesa fino a revisione, dato che non avevo considerato la questione sicurezza...
Ciao a presto,
    Alessandro

 di 
html.it
 è stata sospesa fino a revisione, dato che non avevo considerato la questione sicurezza...
Sono curioso: e' possibile leggere il commento in questione?


 Sono curioso: e' possibile leggere il commento in questione?
Essendo stato tolto l' articolo, è stato tolto anche il commento.
In sostanza diceva qualcosa del tipo:
titolo: "Come farsi defacciare il sito"
corpo: "il codice dell' esempio di pagina 2 è una vergogna. Lasciamo PHP a chi ne capisce"
Qui invece trovi il thread sul forum di 
html.it
:
http://forum.html.it/forum/showthread.php?s=&threadid=782588
In cui dicono tra le altre cose "quell' articolo è ai limiti dello scandaloso".
La questione è che non sapevo che sia include che file_exists nelle versioni recenti di php
potessero accettare anche con file remoti su un altro server, e nello script che ho presentato
non veniva fatta nessuna verifica prima di includere la pagina passata via get. Ora dovrei aver
sistemato, e sto scrivendo la rettifica.
Ciao,
   Alessandro

 Ora dovrei aver sistemato, e sto scrivendo la rettifica.
Capisco. Grazie per la spiegazione.
Dato che ho scritto la struttura (il codice e' tutt'ora da ottimizzare
pesantemente) per un "template engine" come amano chiamarli, e si basa
anch'esso sulla "triade" php/css/xhtml, avevo curiosita' nel sapere i
problemi di sicurezza che ti avevano fatto notare.. ma da quanto mi dici
stiamo parlando di due approcci completamente diversi.
-- 
ZER0://coder.gfxer.web-designer/
~ Plagiarism is copying from one source;
research is copying from two or more
(Wilson Mizner)

 sistemato, e sto scrivendo la rettifica.
io sono del parere che gli esempi sono appunto esempi, e non possono
contemplare TUTTO. Fossi in te metterei una nota che segnala la
vulnerabilita' in questione come "cattiva pratica di programmazione" e
metterei a tacere questi pignoli
solidarieta'
-- 
l'importante e' non smettere mai di porsi domande

 solidarieta'
idem.
-- 
ZER0
~ The Tangent Universe collapsed 5944 days, 2 hours, 48 minutes and 46 seconds ago.

 solidarieta'
Grazie mille! A presto,
    Alessandro

     if($p!=basename($p) || $p=="index" || !file_exists($p.".php"))
In questo modo pero' impedisci che la pagina passata via get possa stare in
qualche subdirectory, limitando la flessibilita' del meccanismo generale.
Invece che basename(), perche' non utilizzi parse_url() ?
Penso che potrebbe essere piu' indicato, tra l'altro in quel modo - volendo
- potresti trappare il tentativo di deface/hack e rispondere con un
messaggio appropriato.
-- 
ZER0://coder.gfxer.web-designer/
~ I feel like I'm diagonally parked in a parallel universe.

     if($p!=basename($p) || $p=="index" || !file_exists($p.".php"))
In questo modo pero' impedisci che la pagina passata via get possa stare in


 messaggio appropriato.
Ciao ZER0, la questione flessibilità  a questo punto è secondaria... lo script dev'
essere il più semplice e sicuro possibile. Non conosco parse_url() ... preferirei mantenermi
sicuro piuttosto che rischiare altre critiche o rinviare ancora la pubblicazione...
In una mailing list si è parlato anche che bisognerebbe proteggere il sito da eventuali
inclusioni maligne *interne* (es. un ipotetica pagina di upload). Le cose, ammettendo
anche le inclusioni su cartelle differenti da una predefinita o da una sottocartella
si complicano non poco credo. Inoltre, il tempo stringere... e sembra proprio che sia:
- flessibilità direttamente proporzionale alla complessità
- flessibilità inversamente proporzionale alla sicurezza
E dato che di php non sono un mostro.... Grazie dell' hint comunque.
Ciao,
    Alessandro

>>     $p=$_GET['page'];
Ciao ZER0, se posso chiederti ancora una cosa.. invece dell' assegnazione semplice, vorrei
eliminare da $_GET['page'] slash, backslash, punti e spazi. La cosa più veloce è farlo con le
regexp, solo che non le conosco. Questo è quello che ho scritto dopo aver cercato di capire
un po' con google... ma non sono sicuro che sia giusta:
    $p=preg_replace("/\.|\s|\\|\//","",$_GET['page']);
E' corretta?
Grazie mille,
    Alessandro

 E' corretta?
Conosco poco il php, ma direi che per quello che ci riguarda implementa 
le regexp come javascript.
Quindi: va bene, ma potresti eliminare gli or in favore delle parentesi 
quadre:
/[\/\.\s\\]/
Poi tieni conto che \s non identifica lo spazio, ma una serie di 
caratteri identificabili come spazi bianchi. Lo spazio in senso stretto 
si scrive cosi' com'e': uno spazio.
In javascript (in php controlla) \s significa spazio, tabulazione, 
carriage return, line feed, form feed, tabulazione verticale:
[ \t\r\n\f\v]

 eliminare da $_GET['page'] slash, backslash, punti e spazi.
Puoi fare di meglio, l'eliminazione (replace) di per se' non e' un
approccio corretto, in questo genere di cose. E' piu' corretto verificare
il tipo e la forma dei dati passati; almeno io personalmente faccio cosi'.
Se il parametro e' un intero allora ti aspetti che il valore sia un numero
intero, e controlli che abbia tale forma.. E cosi' via.
Tu vuoi verificare che il sia un file, senza estensione. Allora, per
semplificare, puoi controllare che il parametro sia composto unicamente da
una serie di caratteri di tua scelta.
Ad esempio:
$p=$_GET['page'];
if (isset($p)){
	if (!preg_match("/^[A-Za-z0-9\-_]+$/", $p)) {
		die("Bel tentativo.");
	}
}else{
	die("Occorre specificare la pagina come parametro.");
}
In questo modo verifica che $p sia settato, e che sia esattamente una
sequenza di caratteri alfanumerici, maiuscoli o minuscoli, includendo anche
il trattino e l'underscore.
Ovviamente poi modificare la lista come piu' ti aggrada.
-- 
ZER0://coder.gfxer.web-designer/
~ Ci siamo fatti una scopata cosi' eccezionale che anche i vicini hanno
fumato una sigaretta.

 le regexp come javascript.
Oddio, detta cosi' potrebbe essere fraintesa la tua frase.
E' preferibile affermare che sia php che js implementano le regexp con la
sintassi perl.
-- 
ZER0://coder.gfxer.web-designer/
~ Una mente perversa e' un peccato sprecarla.
(A dirty mind is a terrible thing to waste)

 il trattino e l'underscore.
Grazie Zero. In effetti un test č senz'altro meglio di un'assegnazione. A questo punto posso solo
filtrare il parametro, evitando di usare basename, che ho letto dia dei problemi su certe versioni
di php, e potrebbe dare problemi su inclusioni di file su altri siti ma che risiedono sullo stesso
server (hard disk). Il codice che ho scritto sopra diventerebbe:
<? include("header.php");
include("menu.php");
$p="main";              //pagina di default per i contenuti centrali
if(isset($_GET['page'])){      //pagina passata via parametro
    $p=$_GET['page'];
    if(!preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php"))
        $p="error";     //pagina di errore
    }
include($p.".php");
include("footer.php"); ?>
Cosě dovrebbe andare. Grazie ancora,
    Alessandro