Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][javascript] xss a htmlspecialchars
Forum PHP.pl > Forum > PHP
bmL
Witam, ostatnimi czasu znajomy powiedział mi że htmlspecialchars nie jest wystarczającym zabezpieczeniem przeciw atakom XSS. Niestety on sam nie może znaleźć źródła tekstu który o tym traktował a swoją opinię aktualnie opiera jedynie na tym że popularne frameworki korzystają z własnych systemów filtrowania, zamiast robić używając htmlspecialchars.
Tak więc moje pytanie brzmi czy istnieje możliwość wykonania ataku XSS niech to będzie dla przykładu alert('test') nie koniecznie atak ale kod js.

  1. <form method="post" action="index.php">
  2. <input type="text" name="txt" />
  3. <input type="submit" value="sprawdz" />
  4. </form>
  5.  
  6. <?php
  7. if(isset($_POST['txt'])
  8. echo htmlspecialchars($_POST['txt']);
  9. ?>
rezik
to Twój znajomy taką informację chyba z kieszeni wyciągnął
Kod
http://php.net/manual/en/function.htmlspecialchars.php

funkcja filtruje np. < i > przez co atak XSS nie wyjdzie ponieważ konieczne jest użycie tagów <script> (< i > zostaną zamienione na '&lt;' i '&gt;' )

frameworki MOGĄ maskować takie funkcje jak właśnie htmlspecialchars() pod własnymi funkcjami filtrującymi (mogą przepuszczać dane przez kilka funkcji filtrujących)
bełdzio
oczywiście, że istnieje smile.gif wystarczy pobawić się atrybutami smile.gif => http://www.beldzio.com/xss-w-serwie-wirtualnej-polski
bmL
W sumie myślałem o takim sposobie ale uważałem to za mało groźne bo kto bezmyślnie pakuje takie zmienne do tagów html. Tylko nie zwróciłem uwagi że czasem do titla się wrzuca a ostatnio coraz częściej m.in dla lepszej indeksacji przez google.

Czyli miał rację i w skrócie dodatkowo trzeba escape'ować/usunąć cudzysłowy i apostrofy smile.gif Poprawcie mnie jeżeli się mylę smile.gif
bełdzio
Cytat(bmL @ 15.10.2009, 19:33:00 ) *
Czyli miał rację i w skrócie dodatkowo trzeba escape'ować/usunąć cudzysłowy i apostrofy smile.gif Poprawcie mnie jeżeli się mylę smile.gif

poprawiam smile.gif)

  1. <p onmousemove=java script:alert(1)>dasdasd</p>


bez spacji oczywiście bbcode sam dodaje smile.gif
bmL
Ale nikt nie pakuje raczej zmiennych do "onmouseover" i innych atrybutów które standardowo są interpretowane jako js. ale do takich atrybutów jak "title" to się raczej dość często spotyka czyli:
  1. <?php echo '<a href="http://wp.pl" title="$nazwa_strony" /> '; ?>

Żeby zamknąć href="" i otworzyć nowy który może być interpretowany jako js. musisz użyć cudzysłowu winksmiley.jpg
Ewentualnie wypadało by jeszcze filtrować słowo "java script:" smile.gif
Chyba się nie mylę? smile.gif ponownie proszę o poprawienie jeżeli jest inaczej smile.gif

// EDIT widzę, że tutaj też chyba działa jakieś dziwne zabezpieczenie na XSS bo słowo "javascript" zamienia mi na "java script" ze spacją smile.gif Tak jak pisał poprzednik może i bbcode tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.