2011-08-22 14 views
5

Pracuję nad witryną, której będą używać klienci, umieszczając ją w elemencie iframe w swojej witrynie. Chcę dać im możliwość dostosowania wyglądu treści, tak aby pasowały do ​​stylu ich witryny.Czy dołączenie zewnętrznego pliku CSS jest bezpieczne, czy może doprowadzić do wstrzyknięcia kodu?

Podstawową ideą, jaką mam, jest umożliwienie im podania adresu URL do pliku CSS, który powinienem umieścić na stronie, którą podaję, aby wypełnić element iframe. O ile mi wiadomo, jest to bezpieczne, ale nie jestem szczególnie zaznajomiony z CSS (szczególnie nowszymi wersjami), więc chcę to zweryfikować.

Czy jest jakiś sposób, aby ktoś mógł skonstruować plik CSS, który pozwoliłby mu wprowadzić kod do mojej witryny lub uzyskać w inny sposób dostęp do plików cookie mojej domeny? Czy to naprawdę bezpieczne, czy muszę wymyślić inne rozwiązanie?

+1

Myślę, że lepiej byłoby pozwolić użytkownikom na wklejenie niestandardowych stylów w obszarze tekstowym, a następnie można sprawdzić, czy faktycznie jest to CSS i nic szkodliwego przed włączeniem go do swoich widoków. –

Odpowiedz

12

Nie jest to niebezpieczne. expression i -moz-binding to znane sposoby powodowania wykonywania dowolnych skryptów w niektórych przeglądarkach za pośrednictwem CSS. LiveJournal padł ofiarą bardzo publicznego ataku XSS, spowodowanego przez JavaScript osadzony w CSS dostarczonym przez użytkownika.

Z Mozillą decydującą o zezwoleniu na wykonanie dowolnego JavaScriptu za pomocą CSS, nie ma innego realnego rozwiązania niż to, które podjęliśmy.

Od Caja's attack vector wiki:

Crafted arkusze stylów CSS można wykonać unsanitized JavaScript w globalnym zasięgu w niektórych przeglądarkach.

Tło

CSS zawiera kilka mechanizmów umożliwiających zmianę otaczającego znaczników i wykonywania wyrażeń.

IE ma rozszerzenie, które pozwala na wykonanie dowolnego javascriptu. Właściwość expression jest opisana jako http://msdn2.microsoft.com/en-us/library/ms537634.aspx

Korzystając z potęg właściwości dynamicznych, możliwe jest zadeklarowanie wartości właściwości nie tylko jako stałych, ale także jako formuł. ... W przypadku skryptów właściwość dynamiczna może być dowolną legalną instrukcją JScript lub Microsoft Visual Basic Scripting Edition (VBScript). http://msdn2.microsoft.com/en-us/library/ms533503.aspx

binding umożliwia wiązanie do określonych zewnątrz skrypty http://developer.mozilla.org/en/docs/CSS:-moz-binding & http://developer.mozilla.org/en/docs/XBL:XBL_1.0_Reference:Elements#binding

-moz-binding umożliwia wiązanie poprzez interfejs XML (również na podstawie danych: URL)

Założenia

kod niezaufane generuje elementy stylu lub atrybuty stylu lub w inny sposób dodaj arbiter y Reguły CSS i tworzenie elementów DOM, które wyzwalają te reguły.

Wersje

IE 5 i później (ale nie IE 8 lub później w "trybie standardowym").

Mozilla/Firefox, wersje nieznane.

+0

Niesamowite, dzięki za całe tło. Wygląda na to, że będę musiał mieć inny mechanizm, który zapewni im stylizację, w której będę mógł najpierw ją zdezynfekować. Teraz, aby dowiedzieć się, jak dezynfekować CSS ... – Herms

+0

Projekt Caja przechowuje [białe listy] (http://code.google.com/p/google-caja/wiki/CajaWhitelists) właściwości i wartości CSS, które mogą być przydatnym. Ma również wbudowany parser i sanitizer Java. –

+0

Caja przeniosła się do Github, białe listy można znaleźć tutaj: https://github.com/google/caja/tree/master/src/com/google/caja/ lang/css –

Powiązane problemy