Przy tworzeniu nowych stron, tudzież szablonów, istotnym problemem może być automatyczne wykonywanie skryptów wstawianych przez użytkowników w komentarzach do wpisów. Wypadałoby wtedy coś wykombinować by temu zaradzić. Ale wcale nie potrzebujemy, a nawet nie jest wskazane, by używać do tego Javascript – gdyż problem można rozwiązać zarówno w ruby jak i w PHP. Zamiana tekstu HTML w komentarzach – o co w tym chodzi, skąd się to bierze i jak sobie z tym poradzić? O tym poniżej:

ASCII w HTML

Na początek może trochę o znakach ASCII. Kod ASCII to 7-bitowy kod porządkujący liczby z zakresu 0 – 127 i przyporządkowujący im odpowiednie symbole np. drukowane na ekranie monitora. Dzięki temu kodowi komputer wie, jakie znaki wypisać, gdy otrzyma z klawiatury odpowiedni kod cyfrowy.

W HTML jednak niektóre znaki są niedozwolone, jeśli chcemy użyć ich w tekście. Są to znaki „<” – znak mniejszości (ang. low than) oraz „>” – znak większości (ang. greater than). Nie można używać ich w tekście, ponieważ przeglądarka internetowa automatycznie przeinterpretuje je na tagi i cały tekst po parze „<” i „>” zostanie wykonany a nie wypisany. Aby sobie z tym poradzić i wypisać znaki zarezerwowane, trzeba zastosować zamienniki danych znaków.

Zamiennik taki wygląda następująco:  &nazwa_znaku; lub  &#numer_znaku;

Aby więc wypisać znak mniejszości na ekranie monitora, musimy wpisać w danym miejscu &lt;  lub &#60;  , a znak większości: &gt;  lub &#62;

Jak więc cały powyższy tekst ma się do komentarzy na blogu i do tekstu w tytule niniejszego postu? Otóż, ciężko wymagać od użytkowników, by pytając np o coś w komentarzu odnośnie kodu html, zamiast np <script> pisali &lt;script&gt; . Po pierwsze mało kto w ogóle zdaje sobie sprawę z tych substytutów określonych znaków, a po drugie jest to kłopotliwe i łatwiej się pomylić. Poza tym istnieje też coś takiego jak internetowe trolle, którzy chętnie skorzystają z możliwości wrzucenia sprytnego skryptu na bloga w postaci komentarza.

Na przykład, jeśli napiszę w niezabezpieczonym komentarzu prostą funkcję w javascript usuwającą wszystkie elementy div na blogu, za każdym razem, skrypt będzie się uruchamiał podczas ładowania strony. Masakra, nie? A można wymyśleć masę „zabawniejszych” zastosowań dla takiego komentarza.

Dlatego z punktu widzenia właściciela bloga czy też webdevelopera warto by zadbać o obsługę tego wyjątku i uniknąć niechcianych kodów HTML oraz skryptów na stronie.

Przystępujemy do dzieła: Zamiana tekstu HTML w komentarzach

Można to wykonać między innnymi za pomocą instrukcji str_replace(); z PHP. Jest to funkcja, jak sama nazwa wskazuje, zamieniająca podany ciąg znaków na inny w danym tekście. Przykład:

Ten krótki kod zamieni wszystkie małe litery „e” na duże w podanym zdaniu. Jeśli chcielibyśmy więc zamienić znaki w komentarzach, a dane komentarzy są przechowywane w bazie danych w tablicach typu:

to musimy pobrać wszystkie komentarze z bazy danych i za pole $comment -> $treść przypisać komentarz z zamienionymi znakami. Z racji tego, że niniejszy blog postawiony jest na wordpresie, podam przykład, jak wykonać tę czynność właśnie w szablonie pod tym CMS-em. Dla chętnych bardziej szczegółowych opisów funkcji i szerszej dawki wiedzy odsyłam do Codexu.

Zamiana znaczników HTML w komentarzach WORDPRESS:

W pliku: comment.php lub odpowiadającym mu – odpowiedzialnym za wyświetlanie listy komentarzy, odszukujemy linijkę

funkcja wp_list_comments(); wyświetla listę komentarzy dla konkretnego wpisu, dla którego jest wywoływana. Podczas ładowania strony interesują nas komentarze tylko aktualnie wyświetlonego wpisu, musimy więc pobrać ID odpowiedniego wpisu. W wordpresie służy do tego funkcja get_the_ID()

 

Następną rzeczą, którą musimy wykonać, to pobranie komentarzy danego wpisu. Każdy komentarz jest przechowywany w tablicy opisującej każdy jego atrybut, jak tytuł, autor, data opublikowania, status czy ID postu. Funkcja pobierająca te dane, get_comments() jako argument przyjmuje tablicę zawierającą pola o określonych nazwach. Aby pobrać wszystkie komentarze o danym ID postu musimy utworzyć tablicę zawierającą ID postu i się do niej odwołać. Dokładna definicja funkcji get_comments() oczywiście w Codexie.

W tym momencie mamy już pobrane komentarze jeszcze zanim funkcja wp_list_comments() je wyswietli. Od teraz mamy możliwość czarowania ze wszystkimi ich atrybutami, więc nadeszła pora na zamianę interesujących nas znaków. Za pomocą pętli foreach() przechodzimy po każdym komentarzu i modyfikujemy jego treść.

To już prawie koniec roboty. Każdy znak „<” w pobranym komentarzu został zamieniony na „&lt;” a „>” na „&gt;”. Teoretycznie wszystko już jest zrobione, jednak po załadowaniu strony nie zauważymy żadnej różnicy. Dzieje się tak dlatego, że lista komentarzy jest wywoływana dla tych komentarzy umieszczonych w bazie danych, a nie dla naszej świeżo zmodyfikowanej tablicy. W tym momencie moglibyśmy zapisać do bazy naszą tablicę $comments, lub zmienić odwołanie funkcji wp_list_comments() przesyłając jej jako argument zmienioną tablicę komentarzy.

To wszystko. Od tego momentu żadne niechciane skrypty w komentarzach na naszej stronie nie będą się pojawiać;). Warto też dodać, że tę sztuczkę można zastosować także do poprawy wyglądu naszej strony, wyregulowanie, jakie znaczniki html mogą być używane w komentarzach a jakie nie. Mam nadzieję że ten wpis się wam przyda. Jeśli jakiś fragment kodu nie działa, napiszcie poniżej.

 

Sekrety Produktywności

Sekrety Produktywności

DARMOWE szkolenie mailingowe! 10 porad jak zwiększyć produktywność w programowaniu.

Dziękujemy za zapisanie się na kurs. Wkrótce otrzymasz wiadomość email z potwierdzeniem zapisu.

Polub nas na facebooku!

Jeśli podoba Ci się ten blog, polub nas na facebooku! Dzięki temu nie ominą Cię nowe treści!

You have Successfully Subscribed!