12:23
17/3/2014

* XSS w PHP-owym date()

Pamiętajcie o encodingu wyjścia date(), bo możecie się zdziwić ;)

Ten wpis pochodzi z naszego linkbloga *ptr, dlatego nie widać go na głównej.
*ptr możesz czytać przez RSS albo przez sidebar po prawej stronie serwisu.

Dowiedz się, jak zabezpieczyć swoje dane i pieniądze przed cyberprzestępcami. Wpadnij na nasz kultowy ~3 godzinny wykład pt. "Jak nie dać się zhackować?" i poznaj kilkadziesiąt praktycznych i przede wszystkim prostych do zastosowania porad, które skutecznie podniosą Twoje bezpieczeństwo i pomogą ochronić przed atakami Twoich najbliższych. Uczestnicy tego wykładu oceniają go na: 9,34/10!

Na ten wykład powinien przyjść każdy, kto korzysta z internetu na smartfonie lub komputerze, prywatnie albo służbowo. Wykład prowadzimy prostym językiem, wiec zrozumie go każdy, także osoby spoza branży IT. Dlatego na wykład możesz spokojnie przyjść ze swoimi rodzicami lub mniej technicznymih znajomych. W najbliższych tygodniach będziemy w poniższych miastach:

Zobacz pełen opis wykładu klikając tutaj lub kup bilet na wykład klikając tu.

23 komentarzy

Dodaj komentarz
  1. tak samo “evil” jest funkcja print_r, albo echo, a nawet var_dump ! ;)

  2. Error establishing a database connection :)

  3. Jakiś mirror? :)

  4. mirror Google Cache:
    http://webcache.googleusercontent.com/search?output=search&sclient=psy-ab&q=cache%3Ahttp%3A%2F%2F0xa.li%2Fphp-date-is-xssable%2F&oq=cache%3Ahttp%3A%2F%2F0xa.li%2Fphp-date-is-xssable%2F&gs_l=hp.3..0l4.307.1442.0.1615.7.7.0.0.0.0.142.569.0j5.5.0….2…1c.1.37.psy-ab..2.5.542.STmOi3O2amw&pbx=1

  5. Z F-Secure:

    Szkodliwa witryna internetowa zablokowana

    http://0xa.li/php-date-is-xssable/

    Ta witryna została zgłoszona jako szkodliwa.
    Odwiedzanie tej witryny nie jest zalecane.

  6. @Koscik: bądź sprytny – skorzystaj z Google cache:
    http://webcache.googleusercontent.com/search?q=cache:E8rn9SyFS3YJ:0xa.li/php-date-is-xssable/

  7. Error establishing a database connection

  8. http://dpaste.com/hold/1739298/

    borze jak śmiesznie :3

  9. JavaScript nie posiada formatowania czasu. Przerzucam się na NodeJS.

  10. Bardzo głupi błąd. Można go porównać do podania inputa jako pierwszego parametru (formatu) do printf() w C. Niektórzy pewnie powiedzą, że taka funkcja może się przydać, ale przydałoby się przeprowadzić validację na podanym przez usera formacie.

    Poza tym, kto na templatach nie kodzi, ten userom szkodzi (a w poważnych aplikacjach wypisywanie czegokolwiek na output bez automatycznego escapowania w ramach silnika szablonów powinno wręcz być zabronione).

    W Node.js sytuacja wygląda o tyle dobrze, że z Expressem dostajemy domyślnie wsparcie dla wielu silników szablonów (z czego chyba Jade cieszy się największą popularnością) i nie ma kombinowania z jakimś Smarty. Po prostu zwykła ścieżka nauki tworzenia stron internetowych na Node prowadzi przez poprawne wykorzystanie templatów, podczas gdy do PHP istnieje tyle złych poradników, tutoriali i książek, że łatwiej znaleźć opis utrwalający jeżące włos na głowie złe praktyki, niż “perełkę”, w której wszystko zostało zrobione bezpiecznie i poprawnie.

    • Spoko, spoko tylko od jakiegoś czasu nowoczesne aplikacje (nie mam na myśli bloga) są często wykonywane jako PHP REST API + HTML5 + JS więc smarty i inne szablony nie są potrzebne.

      Zgadzam się, że wiele książek do PHP utrwala złe wzorce po prostu prezentując banalne przykłady nie związane z rzeczywistością, natomiast nie zwalnia to zawodowych programistów z odpowiedzialności za walidację danych wejściowych. Zasada jest tu bardzo prosta – cokolwiek przyszło z zewnątrz musi być zwalidowane – i nie ważne, czy dane wprowadził użytkownik do formularza na stronce, czy trafiają do aplikacji przez RESTowe API, czy zostały wyjęte z bazy danych.

  11. Myślałem przez chwilę i nie dałem rady wymyślić który system zarządzania treścią może pobierany od użytkownika parametr podać do date. Daty są raczej generowane automatycznie;

    Użyteczność tego błędu = 0. Już realnie większą użyteczność wykazywał XSS w funkcji phpinfo() (w parsowaniu URI) znaleziony parę ładnych lat temu.

    Ziew…

    • phpbb?

    • @zse.security.team chyba w pierwszej wersji bo nie w 3

  12. błąd? Nie widzę tutaj żadnego błędu. Funkcja pozwala wyświetlać dane w dowolnym formacie, więc jeśli można podawać też separatory, to oczywiste jest, że wyświetli podane losowe ciągi…

Odpowiadasz na komentarz winek

Kliknij tu, aby anulować

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: