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.

 

Pin It on Pinterest

Share This
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.

FreshMail.pl