Accedi per seguire   
Seguaci 0
Sifro

Chat Moderata

16 messaggi in questa discussione

Ciao,

per caso qualcuno di voi conosce qualche script per implementare sul proprio sito una chat moderata? Per moderata intendo che quando un utente manda un messaggio, prima di venire pubblicato questo deve essere approvato dal moderatore...

Avete qualche idea?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Non mi sembra molto "chat" come funzionalità :)

Assomiglia piuttosto ad una bacheca moderata...

Per fare cose di questo tipo, però, bisogna utilizzare tecnologia lato server...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ciao,

per caso qualcuno di voi conosce qualche script per implementare sul proprio sito una chat moderata? Per moderata intendo che quando un utente manda un messaggio, prima di venire pubblicato questo deve essere approvato dal moderatore...

Avete qualche idea?

Ciao Sifro e Benvenuto :)

Forse non ho ben capito cosa intendi... perchè in una chat, i messaggi che vengono mandati sono molto "veloci", specialmente nella stanza pubblica, e un qualsiasi moderatore non avrebbe il tempo materiale di controllarli tutti prima che appaiano sullo schermo.

Ho fatto io stessa la moderatrice in una chat ( ed era anche una abbastanza tranqulla ) eppure avevo il mio bel da fare :P

Però ovviamente non si riusciva a prevenire, piuttosto il mio compito era curare. Nel senso che se qualche utente scriveva qualcosa contro il regolamento, si provvedeva ad ammunirlo in privato, ed invitarlo a comportarsi meglio.

Ci sono però anche altri tipi di chat. Non so nemmeno se chiamarle chat. sono siti in cui un utente scrive un pensiero, lo firma, e lo pubblica, e poi chi vuole lo può commentare.

Ho fatto la moderatrice anche lì, e la mole di lavoro era grandissima.

Infatti tutti i messaggi scritti dagli utenti venivano "immagazzinati", e mano mano, io e gli altri moderatori, provvedevamo a leggerli ed eventualmente a correggerli se andavano contro il regolamento. Solo dopo averli controllarti accuratamente, li pubblicavamo.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ok, effettivamente la parola chat non è troppo appropriata. Per farmi capire meglio vi spiego il mio obiettivo.

Questo sistema che mi piacerebbe implementare è per un sito sportivo. Ogni martedì avremo un personaggio noto che verrà in redazione e vorremmo offrire ai nostri utenti la possibilità di fare liberamente a questo personaggio delle domande.

La formula della chat non è attuabile: sarebbe un grandissimo casino, con gente che scrivere cose che non c'entrano, magari c'è chi è maleducato e insulta, chi protesta perchè non si risponde alla sua domanda...

Raccogliendo le domande via email o in qualunque altro modo, si perderebbe il fascino del "tu per tu" con il personaggio in questione.

Invece, come dico io, e con un po' di collaborazione degli utenti, si riesce a far tutto: si mostrano nella finestra della chat principale solo le risposte con relative domande.

L'impegno non è posi così gravoso: 1 oretta alla settimana si può fare :)

Ora è più chiaro?

Ciao

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Il sistema che vorresti implementare è una "chat" a due facciate.

Lato utenti si trova una pagina che permette di inviare messaggi. Ci si collega alla pagina con un nick name, e ci si trova davanti due cose:

1) dove inserire le domande

2) dove si legge l'interazione utenti/ospite

Lato amministratori ci si trova una pagina un po' più complessa:

1) dove si leggono i messaggi degli utenti

2) pulsante per spostarli in area pubblica (quella che gli utenti vedono come interazione utente/ospite)

3) dove inserire le risposte dell'ospite (o i commenti degli amministratori) che andranno in interazione utente/ospite come i messaggi approvati.

Sinceramente non conosco un prodotto simile già disponibile. Per realizzare qualcosa del genere si deve per forza di cose usare tecnologia lato server...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Sì quello era anche lo schema che mi ero fatto io, se non si trovano applicazioni simili non c'è alternativa a farselo a mano.

Penso che non mi tufferò completamente in Ajax per quanto sembri la soluzione più elegante, non sono ancora abbastanza ferrato in materia.

Lato utente avremo un form associato ad uno script in php che va a mettere le domande su un db mysql. Ci sarà un riquadro che conterrà tutte le risposte, sono indeciso se tale riquadro si aggiornerà tramite javascript (che credo sia di gran lunga la soluzione migliore) o tramite un <meta refresh> (magari implementando il riquadro con un iframe).

Lato amministratore direi che basta una query SELECT sul database che mi popola una lista di <SELECT>,<OPTION>: il personaggio seleziona la domanda, scrive la risposta e lo script in automatico pubblicherà entrambe.

Da domani, se non si trovano degli script già pronti per queste cose, mi metto al lavoro ed entro nello specifico.

Ciao

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

L'ideale sarebbe usare Ajax, ma se non vuoi usarlo allora scegli il meta refresh, perché javascript ultimamente viene disattivato spesso, a causa di estensioni come NoScript, oppure metti un avviso per gli utenti che l'hanno disattivato..

Poi ti consiglio di filtrare i dati che ricevi sul database:

- quantità di dati: non si sa mai che uno spedisca 5Mb di testo solo per dispetto

- tipologia di dati, per evitare gli attacchi XSS

- tempo, per evitare che lo stesso utente spedisca più messaggi consecutivi, puoi creare un timer legato alla sessione

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

giuste osservazioni, rilancio qualche domanda:

1) La J di Ajax non stava per Javascript? Dunque anche usando tecniche proprie di Ajax avrei comunque il problema del noscript. Il meta refresh ha lo svantaggio che esteticamente non è il massimo avere la pagina ricaricata di continuo

2) Non sono molto abituato agli attacchi Cross-site scripting, cosa intendi per tipologia di dati? Gli utenti dovranno solo inviare del test in un <input type="text"> e memorizzarli in un campo VARCHAR di un Db Mysql, va bene così?

3) Effettivamente non ci avevo pensato al timer, è sicuramente una cosa da fare. Forse non farò in tempo ad implementarla per questo martedì ma sicuramente verrà inserita nelle future versioni del programma.

A presto! :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

1) Esatto, Ajax è javascript

2) Attraverso le form edit si inserisce del testo che poi viene interpretato dal motore del sito. Se chi ha creato il motore non sta attento a cosa viene inserito nelle form edit, è possibile avere dei comportamenti anomali da parte del server. Un esempio per tutti è l'SQL injection. Se chi ha scritto la pagina php (o qualsiasi altra tecnolgia lato server) passa la stringa ricevuta dalla form edit direttamente al server DB (attraverso una query SQL) potrebbe non ottenere indietro quello che desidera :)

Ad esempio, se per caso chi ha scritto la pagina PHP accede al db con un utente che può eseguire comandi, è possibile fare grossi danni... Come eliminare l'intera tabella dei messaggi... Oppure inserire nella tabella dei messaggi da pubblicare uno nostro...

Facciamo finta che il possibile "nemico" abbia scoperto quale sia il nome della tabella dei messaggi da rendere pubblici e di quali campi sia formata (cosa possibile sempre attraverso SQL injection). Per by-passare la censura puo' scrivere all'interno della casella di editor qualcosa del tipo:

injection!!!'); INSERT INTO messages ('nickname', 'messagge') VALUES ('Odio il tipo intervistato', 'tutte le volgarità possibili che non si sarebbe voluto divenissero pubbliche'); --

Per ipotesi, tutto quello che viene scritto nella famosa casella di editor viene utilizzato all'interno di una query SQL:

INSERT INTO inputMessages ('msg_txt') VALUES ('$message_Edit');

Questa query non fa altro che inserire nella tabella inputMessages il contenuto della variabile $message_Edit (che per ipotesi è collegata a ciò che l'utente ha inserito nella casella di editor).

Come viene trasformata la nostra query prima di essere passata al db?

INSERT INTO inputMessages ('msg_txt') VALUES ('injection!!!'); INSERT INTO messages ('nickname', 'messagge') VALUES ('Odio il tipo intervistato', 'tutte le volgarità possibili che non si sarebbe voluto divenissero pubbliche'); --');

Appena il db esegue questa query esegue 2 insert!!!

la prima inserisce il messaggio injection!!! nella tabella dei messaggi di input inputMessages

la seconda inserisce nella tabella messages (quella che contiene i messaggi da pubblicare e che in teoria sono stati autorizzati) la coppia di valori

nickname = Odio il tipo intervistato

message = tutte le volgarità possibili che non si sarebbe voluto divenissero pubbliche

che noi mai e poi mai avremmo pubblicato :P

Gli esempi sono infiniti...

Per evitare questo, BISOGNA SEMPRE, verificare l'input di una form prima di passarlo al DataBase...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Molto interessante, grazie, era da tempo che dovevo documentarmi su questo tipo di attacchi e mi siete stati di grande aiuto.

Purtroppo oggi ho potuto lavorarci solo un'oretta, dunque è completa solo la parte lato utente. Il lato amministratore l'ho simulato con phpmyadmin per fare i test, che sono andati a buon fine. Domani implementerò un'interfaccia amministratore migliore.

Una domanda: la pagina principale dell'utente si chiamerà index.php.

index.php contiene un

<iframe src="messaggi.php">

per mostrare tutti i messaggi e un

<form> <input type="text" /> </form>

per inviare una domanda.

Ora, volevo sapere se era possibile impostare il parametro action del form al nome del file stesso, per non far perdere tempo all'utente redirezionandolo all'interno dello script. Mi spiego meglio:

se io ho un codice tipo <form action="aggiungi.php"> quando l'utente clicca sul tasto SUBMIT viene mandato alla pagina aggiungi.php, e se io voglio farlo tornare alla pagina utente principale, quella con la chat e con il form, devo per forza redirezionarlo e costringerlo a ricaricare la pagina ogni volta. So che non è un problema gravissimo, ma posso evitare tutto ciò?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Si, basta omettere il nome del file nella action e inserire il codice di invio del messaggio nella stessa pagina index.php Per evitare che lo script si metta in moto automaticamente all'apertura della pagina, ti basta aggiungere un controllo di questo tipo:

if($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['check'] == 'verifica') {
//codice di invio del messaggio
}

Con REQUEST_METHOD verifichi che la richiesta usi il metodo POST (che va specificato nel tag form), e poi tramite un campo input nascosto chiamato check spedisci il valore verifica:

<form method="post" action="">
nome: <input type="text" name="nome" />
messaggio: <textarea name="messaggio"></textarea>
<input type="hidden" name="check" value="verifica" />
<input type="submit" name="button" value="invia" />
</form>

Check serve a non confondere il form di invio del messaggio con altri eventuali form presenti sulla pagina, tipo quello di un motore di ricerca. Se poi vuoi dei suggerimenti per il timer facci sapere, non ci vuole molto :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

perfetto!

Anche io avevo provato quella soluzione ma avevo il problema che hai detto tu, cioè appena caricavo la pagina il form si autoeseguiva senza doverlo fare.

Poi ho dovuto interrompere i lavori perchè dovevo uscire, avevo cominciato a pensare a qualche strana cosa con isset() o simili ma così è decisamente più elegante.

Approfittando del fatto che ho qualche linea di febbre e potrò stare più tempo a casa, ho portato avanti il progettino.

Ora le fondamenta delle 2 interfacce ci sono: non ho curato per niente la presentazione, cosa che sarà fatta alla fine con i CSS.

A questo indirizzo è possibile vedere l'interfaccia utente: http://www.tifogrifo.com/public/tupertu/testchat/

Qua invece l'interfaccia amministratore: http://www.tifogrifo.com/public/tupertu/testchat/admin.php

Dunque la TODO list è ora composta da:

1) Ordinare i record in base all'ora in cui è stata data la risposta

2) Preoccuparsi della sicurezza (permessi ai file, xss, sql injection, etc..)

3) Implementare un sistema di autenticazione per l'interfaccia amministratore (una cosa che mi sono sempre chiesto: rinominare una pagina che si vuole proteggere in ashdewur4378954rghfeqr4.php è una misura di sicurezza quantomeno decente??)

4) Implementare un timer con le sessioni

Riguardo al punto 4: è necessario che l'utente faccia un login o abbia i cookies abilitati?

A presto! :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Grazie per i saluti :P :P :P

3) E' un metodo molto utilizzato quello di creare un nome casuale (solitamente utilizzando degli algoritmi di hashing come md5 o sha1 legati ad un timestamp, ad un login ecc...). Naturalmente la directory che contiene le pagine protette non deve permetterne l'enumerazione del contenuto :P

4) No. Non è necessario. Le sessioni non sono legate ad uno specifico login ma sono legate ad uno specifico client. In pratica ogni volta che un browser si collega al server viene creata una sessione. Non è obbligatorio che i cookie siano abilitati. Quando questi non lo sono , è possibile gestire le sessioni in maniera diversa.

buon lavoro!!! E buona guarigione ;-) :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Perfetto, allora vada per le sessioni! Così magari le uso anche per tenere traccia del numero di utenti connessi, il tempo di permanenza e tante altre belle cosette.

Non ho mai utilizzato le sessioni, sapreste darmi un incipit, così giusto per cominciare a sporcarmi le mani? Uno snippettino, un link, qualunque cosa :P

Stavo guardando cosa dice la guida su php.net... Per quanto completa, più che una guida sembrerebbe una referenza, quindi non è troppo adatta per cominciare.

edit: mi ero scordato di questo piccolo particolare. Ho deciso di sostituire all'iframe un div impostando ad "auto" la proprietà overflow, ottenendo più o meno lo stesso effetto con il vantaggio che è molto più conforme agli standard attuali (e mi viene anche molto più facile aggiungere informazioni per la presentazione con i CSS). L'unico problema che sorge è il refresh, che temo non ci sia altro modo, a questo punto, se non farlo in javascript.

Avrei pensato di utilizzare il comando miodiv.innerHTML += [qualcosa] per ottenere ciò, aggiungendo quindi di volta in volta i vari messaggi nuovi. Purtroppo le mie scarse conoscenze di Javascript mi rendono anche una cosa semplice come questa un po' oscura... Potete farmi luce in qualche modo?

Ciao e grazie ancora :)

Modificato da Sifro

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Bene, una prima versione della chat è stata creata, purtroppo questi giorni sono incasinatissimo e non riesco a dedicargli tutto il tempo che vorrei (poi, come potrete leggere su un altro mio topic, col computer che all'improvviso neanche si accende...) per apportare tante piccoli\grandi migliorie che ho già in mente.

Quando sarà tutto pronto alla versione definitiva ve lo farò sapere! Intanto grazie ancora per l'aiuto.

Ciao

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per partecipare

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!


Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.


Accedi Ora
Accedi per seguire   
Seguaci 0