Wprowadzanie tekstu na stronie WWW - możliwości i zagro

Wprowadzanie tekstu na stronie WWW - możliwości i zagro

Wprowadzanie tekstu na stronie WWW - możliwości i zagrożenia
autorem artykułu jest Daniel Frużyński

Jeżeli jesteÅ› webmasterem (a skoro czytasz ten tekst, to zakÅ‚adam że tak jest), to wczeÅ›niej czy później staniesz przed problemem koniecznoÅ›ci wczytania pewnego bloku tekstu z furmularza na stronie, i późniejszego jego wyÅ›wietlenia. Celem tego artykuÅ‚u jest przeglÄ…d technik które można zastosować w tym celu, oraz możliwych zagrożeÅ„ które siÄ™ z nimi wiążą.
Czysty tekst, bez formatowania
Ten sposób jest najÅ‚atwiejszy, i jednoczeÅ›nie najbezpieczniejszy. W tekÅ›cie otrzymanym z formularza należy zamienić wszystkie znaki specjalne na ich odpowiedniki w postaci encji HTML (dotyczy to znaków <, >, ", ' i &). W PHP można to Å‚atwo zrobić za pomocÄ… funkcji htmlspecialchars(). Dodatkowo warto zamienić wszystkie znaki nowej linii na <br>. Można to zrobić w PHP korzystajÄ…c z funkcji nl2br() (uwaga: ta funkcja wstawia przed każdym znakiem nowej linii znacznik w stylu XHTML: <br />. Jeżeli potrzebujesz użyć <br>, skorzystaj z funkcji str_replace()).
BB Code
BB Code (skrót od Bulletin Board Code) jest to system znaczników wzorowany na HTML. PodstawowÄ… różnicÄ… jest to iż znaczniki BB Code ograniczone sÄ… kwadratowymi nawiasami [ ], a nie tak jak znaczniki HTML nawiasami trójkÄ…tnymi < >. PrzykÅ‚adowe znaczniki BB Code wyglÄ…dajÄ… nastÄ™pujÄ…co:

tekst - pogrubienie tekstu;
tekst - pochylenie tekstu;
[color=red]tekst[/color] - zmiana koloru tekstu;
http://www.poradnik-webmastera.com/ - wstawienie odnośnika;
Obrazek - wstawienie obrazka.

DziÄ™ki temu że te znaczniki sÄ… różne od znaczników HTML, można Å‚atwo pozbyć siÄ™ problemów które stwarza pozwolenie na używanie znaczników HTML - wystarczy najpierw zakodować specjalne znaki jako encje HTML stosujÄ…c metodÄ™ podanÄ… powyżej, a nastÄ™pnie zamienić znaczniki BB Code na odpowiadajÄ…ce im znaczniki HTML. Ponieważ tutaj należy zachować ostrożność podczas konwersji adresów URL (możliwość ataków XSS - Cross Site Scripting), warto skorzystać z gotowych i sprawdzonych bibliotek, takich jak np. biblioteka HTML_BBCodeParser z pakietu PEAR (http://pear.php.net/package/HTML_BBCodeParser).
Tekst ze znacznikami HTML
Wybór tego sposobu formatowania tekstu wiąże siÄ™ z dwoma poważnymi problemami: po pierwsze, jÄ™zyk HTML jest znany tylko niektórym osobom które na co dzieÅ„ surfujÄ… po Internecie. Po drugie, udostÄ™pnienie możliwoÅ›ci używania znaczników HTML stwarza ogromne pole manewru dla każdego kto posiada zÅ‚e zamiary - wstawienie kilku znaczników </table> i </div> może caÅ‚kowicie "rozwalić" ukÅ‚ad strony. Oprócz tego każdy może wstawić swój kawaÅ‚ek kodu w JavaScript, który może np. wyÅ›wietlać reklamy w okienkach pop-up, lub wykradać dane osobowe czy loginy i hasÅ‚a. Dlatego stosujÄ…c tÄ… metodÄ™ należy zadbać o to aby wyczyÅ›cić kod HTML z wszystkich niepożądanych znaczników. Można to zrobić np. za pomocÄ… funkcji PHP strip_tags().
To jest jednak poczÄ…tek - trzeba jeszcze usunąć niebezpieczne atrybuty znaczników (lub jeżeli to jest niemożliwe, przynajmniej sprawdzić że zawierajÄ… "bezpieczne" wartoÅ›ci). Do podejrzanych atrybutów tych należą m.in. href, src, style, onload, onclick i onmousemove. Dodatkowym zagrożeniem sÄ… znaczniki i atrybuty które mogÄ… siÄ™ pojawić w przyszÅ‚oÅ›ci, lub które istniejÄ… już obecnie ale nie sÄ… powszechnie znane (np. SMIL (Synchronized Multimedia Integration Language, http://www.w3.org/AudioVideo/), które akceptuje Internet Explorer). Dlatego tutaj polecam też podejÅ›cie takie jak przy znacznikach - zdefiniować listÄ™ znaczników które sÄ… dopuszczalne, i usuwać wszystkie inne. Warto także sprawdzać czy wartoÅ›ci przypisywane do atrybutów sÄ… poprawne (np. tylko cyfry, albo tylko litery, albo lista poprawnych wartoÅ›ci). W przypadku gdy potrzebujemy użyć atrybutu w którym można wstawić URL (jak np. href czy src, należy dokÅ‚adnie sprawdzić czy wstawiony URL jest poprawnym adresem http lub https, gdyż tutaj pomysÅ‚owość ludzka nie zna granic (zresztÄ… zobacz tutaj na listÄ™ różnych ataków XSS: http://ha.ckers.org/xss.html).
UwagÄ™ należy poÅ›wiÄ™cić także kaskadowym arkuszom stylów CSS, gdyż one również mogÄ… nieść zagrożenie (na podanej wczeÅ›niej stronie jest kilka przykÅ‚adów). Dlatego warto rozważyć rezygnacjÄ™ z nich, co wiąże siÄ™ z filtrowaniem stylów importowanych z zewnÄ™trznego pliku, umieszczonych wewnÄ…trz znacznika <style> oraz wewnÄ…trz atrybutu style.
Graficzne edytory tekstu pisane w JavaScript
Obecnie coraz wiÄ™kszÄ… popularność zdobywajÄ… edytory tekstu napisane z użyciem JavaScript i umieszczane na stronach WWW. Jednym z nich jest OpenSource'owy FCKeditor. MajÄ… one tÄ… zaletÄ™ iż ich interfejs przypomina ten do którego przyzwyczaiÅ‚y nas już różne okienkowe edytory tekstu, zatem poczÄ…tkujÄ…cy użytkownik nie powinien mieć problemu z ich obsÅ‚ugÄ…. Z drugiej zaÅ› strony generujÄ… one tekst ze znacznikami HTML, wiÄ™c konieczne jest tutaj pamiÄ™tanie o wszystkim tym co napisaÅ‚em powyżej. Tutaj też musisz pamiÄ™tać że nawet jeżeli edytor którego używasz nie pozwala na edycjÄ™ źródÅ‚a HTML, to jednak możliwe jest napisanie programiku który bÄ™dzie udawaÅ‚ przeglÄ…darkÄ™ i wyÅ›le do serwera tekst z dowolnie wstawionymi znacznikami HTML. Niekiedy nawet nie trzeba aż tyle wysiÅ‚ku - proste wyłączenie JavaScript w przeglÄ…darce może sprawić że wypasiony edytor zamieni siÄ™ w zwykÅ‚e pole <textarea>, w które można sobie wpisać co siÄ™ tylko zechce i wysÅ‚ać do serwera.

--


Artykuł pochodzi z serwisu www.Artelis.pl

Zobacz takze:
Efektywne ZarzÄ…dzanie FirmÄ… - Business Intelligence, ER
Jak filozofia chińska stała się tym, czym jest?
Poszukiwanie pracy w Irlandii
Zalety materaców i poduszek wypełnionych łuską gryki. Z
Mazowiecka Giełda Maszyn