2009-08-22 2 views
5

Ho una pagina che è stata richiesta Permetto la personalizzazione di alcuni utenti tramite CSS.come gestire la sicurezza con css esterno utente aggiunto (come myspace)

Sono felice di farlo, ma sto cercando di capire come renderlo sicuro. Non ci sono molti fogli di stile che verranno applicati alla pagina, ma inizialmente avevo pensato che se avessi controllato che la pagina fosse un'estensione css, sarei al sicuro.

Tuttavia, la ricerca che ho fatto mostra che xss è facile da fare attraverso i CSS. Ma non sono stato in grado di trovare alcuna risorsa su come consentire che il css esterno generato dall'utente venga incluso in modo sicuro.

Qualcuno ha suggerimenti o risorse per questo?

MySpace riesce a farlo, insieme ad alcuni altri siti, ma non riesco a vedere come garantire che questo sia sicuro.

Non ho dati utente "sicuri" nella pagina in cui si trova il css esterno. Ma ottengo alcune variabili per una ricerca.

dati aggiuntivi ---------------- dopo la risposta di sliky ----------------------

Non ho intenzione di abilitare ogni utente ad aggiungere un css esterno. Tuttavia, la variabile css può essere impostata da utenti qualificati speciali e, una volta che tale variabile è disponibile, in pratica chiunque può impostarla come preferisce. L'unico metodo per ottenere quella variabile in uso è quello di diffondere l'URL, quindi forse sono troppo preoccupato per la sicurezza, ma ne dubito.

Posso impostarlo in modo tale che la pagina non sia indicizzata con un foglio di stile esterno, ma sono ancora preoccupato di come mantenere la sicurezza per l'utente finale.

vorrei avere un link sul mio sito dove sarebbe http://mysite.com/page?useracct=12343&extcss=http://location/of/css.css

I set-up della account_utente, in modo che solo in cui gli utenti che consentono di abilitare le diverse css hanno collegamenti creati per le loro pagine. Sul mio sito, vorrei collegarmi a quell'account utente con la pagina css.

Così qualcuno non può semplicemente venire avanti e dire http://mysite.com/page?extcss=http://new/dangerous/css.css

Tuttavia, hanno potuto creare il link http://mysite.com/page?useracct=12343&extcss=http://new/dangerous/css.css L'unico modo che qualcuno potrebbe arrivare a quella pagina sarebbe se quella persona che ha creato il css pericoloso inoltrato quel collegamento.

Immagino che se ho cancellato e salato l'extcss, potrebbe essere più sicuro. Forse è il modo migliore per andare?

risposta

4

Utilizzare un linguaggio che dispone di una libreria CSS o scrivere un parser per creare una struttura simile a AST dal CSS e quindi controllare le cose poco sicure.

Questo potrebbe essere più difficile di quanto sembri, cose come le dimensioni div (che inglobano l'intera pagina), gli ordini floating e z saranno difficili da gestire e potrebbe essere necessario avere limiti sui valori che è possibile fornire.

una bella idea

Creare uno schema tematizzazione basato su XML che può essere tradotto a CSS. Consenti agli utenti di caricare immagini + XML per generare un tema.

XML è più semplice da controllare.

PHP CSS Parser, Python CSS parsing

Good Luck

+0

risposta molto informativa Aiden, e grazie per il collegamento sul parser css. Non penso che l'utente abbia caricato xml + immagini sia ciò che sta veramente cercando. Solo cercando di ottenere alcuni semplici stili applicati, e per il posizionamento, includo sempre il mio foglio di stile dopo, in modo che gestisca tutti i problemi di floating/z-index, ecc. Poichè tutto il posizionamento degli elementi è impostato postare le cose dell'utente. Sono soprattutto alcune immagini di ridimensionamento, colori e sfondo che possono essere regolati. Con "questo potrebbe essere più difficile di quello che sembra" e in grassetto "Good Luck" stai suggerendo che forse non dovrei farlo? – pedalpete

+0

Non proprio, ricorda che cose come le cose importanti e altre oscure possono morderti nel culo se permetti agli utenti di caricare css (o qualsiasi altro contenuto). Rendilo quasi matematico ... calcola le permutazioni di tutte le sintassi disponibili che vuoi bloccare e verifica che funzioni. Dipende da quanto sia importante sanificare l'input ... se si tratta di un piccolo sito per gli amici, puoi rilassarti un po ':) Vai a farlo dico! –

2

Mentre effettivamente avere la propria lingua per consentire l'aggiunta di CSS può sembrare buona, si può ancora inevitabilmente finire con gli stessi problemi lasciando loro solo scrivere qualsiasi cosa (ad esempio il caricamento di file esterni, ecc.) e si trova in un mondo di dolore.

Un modello migliore, da un punto di vista della sicurezza, è pensare esattamente a quello che vorranno personalizzare e lasciare loro solo modificare quelle cose.

Quindi l'utente possa fornire capacità di impostare:

  • I colori di sfondo
  • Fonts
  • Immagini per varie cose
  • Etc

Twitter (l'ultima volta che ho usato comunque) aveva un buon metodo per fare questo, e il risultato è anche che il sito è personalizzabile, ma mantiene un aspetto standard, che, IMHO, è g reat.

+0

sebbene io sia d'accordo con te, il compito di creare un sistema di gestione del design come Twitter è piuttosto scoraggiante. Fornirei solo alcune funzionalità a pochi utenti, che migliorerebbero il design e il layout meglio di me. La mia preoccupazione per la sicurezza è che una volta fornita la possibilità per questi utenti speciali di aggiungere un css, in sostanza chiunque può utilizzare la variabile per impostare il proprio css. Anche se avrebbero bisogno di inviare su quell'URL che hanno creato per far proliferare. Posso impostare no-index per quando è impostato il css esterno, ma ho ancora dubbi su ciò a cui mi sto dedicando. – pedalpete

+0

È piuttosto banale fare ciò che fa Twitter.Permetti solo cose specifiche (come ho detto) e se vuoi un'interfaccia interessante per la selezione, jQuery fornirà ciò di cui hai bisogno. –