W ciągu ostatnich dwóch tygodni trafiło do nas kilka sklepów zainfekowanych przez podatność we wtyczce WooCommerce Dynamic Pricing and Discounts, więc warto chyba napisać o tym kilka słów.

Wtyczka WooCommerce Dynamic Pricing and Discounts pochodząca z Envato jest jedną z wielu tego typu wtyczek. Służy ona do ustalania dynamicznych rabatów i przecen dla produktów na podstawie różnych warunków. Trudno mi do końca powiedzieć, dlaczego ktoś miałby wybrać akurat tę wtyczkę, bo istnieje kilka świetnych darmowych alternatyw. Nie zmienia to jednak faktu, że wtyczka ta została kupiona prawie 20 tys. razy, więc jak na wtyczkę sklepową, jest dość popularna.

Wtyczka powstała w 2014 roku i przeglądając jej changelog, można odnieść wrażenie, że jest ciągle rozwijana, usprawniana i nie ma w niej prawie żadnych błędów. Opisy zmian są jednak bardzo lakoniczne, a to nigdy nie wróży niczego dobrego.

I tak po 7 latach istnienia wtyczki, 18 sierpnia wykryto w niej krytyczną podatność, która pozwala każdemu wykonać import ustawień. Nie wymaga to nawet zbyt wiele trudu.

(więcej…)

13 lipca 2021 we wtyczkach WooCommerce i WooCommerce Blocks wykryte zostały krytyczne podatności. Podatność została zgłoszona w ramach programu HackerOne.

Błąd został już poprawiony i opublikowane zostały poprawione wersje. Tak – poprawka została opublikowana tego samego dnia. Jeśli więc używasz WooCommerce, to szybka aktualizacja do wersji 5.5.1 to dobry pomysł.

(więcej…)

Być może słyszałeś już kiedyś powiedzenie, że ludzie dzielą się na tych, którzy robią backupy i na tych, którzy zaczną je robić. Gdy jednak rozmawiam z klientami, często słyszę, że backupów własnej strony nie posiadają. Jedni w ogóle o tym nie pomyśleli. Inni zakładają, że hosting robi to za nich. I owszem – większość hostingów domyślnie wykonuje automatycznie kopie zapasowe, aby klienci nie musieli się tym martwić. Jednak czy aby na pewno tak jest?

(więcej…)

Bieżący tydzień minął nam pod znakiem czyszczenia infekcji na stronach, a szybkie wyszukanie jej oznak w Google pokazuje, że jeszcze sporo osób się z nią zmierzy. Opiszmy więc, jak ta infekcja wyglądała i jak działa.

Jak wygląda atak

Doklejenie szkodliwego kodu do pliku header.php w motywie

W pliku header.php doklejany jest następujący fragment kodu:

(więcej…)

No i doczekaliśmy się – mamy pierwszą (jeśli tytuł ten należy się komu innemu, to piszcie w komentarzach) dużą podatność z polskiej wtyczce, a „nagroda” ta wędruje do Flexible Checkout Fields od WP Desku. Przyjrzyjmy się, z czego owa podatność wynikała, jak została wykorzystana do atakowania stron i co zrobić, jeśli Twoja strona została zaatakowana…

(więcej…)

Ten tydzień mija nam pod znakiem ratowania stron, które padły ofiarą ataku wykorzystującego podatność we wtyczce ThemeGrill Demo Importer. Przyjrzyjmy się, jak do tego całego zamieszania doszło i pomyślmy, jak można się było uchronić.

Zacznijmy od początku. ThemeGrill to firma tworząca motywy. Ich wtyczka Demo Importer miała ponad 200 tys. aktywnych instalacji, a na początku lutego WebARX znalazł w niej podatność, która pozwala zresetować bazę danych i hasło administratora każdej stronie, która z tej wtyczki korzysta.

(więcej…)

Podobno, jeśli tytuł artykułu zawiera pytanie, to odpowiedź na nie zazwyczaj brzmi „Nie”. W przypadku tego zagadnienia jest jednak inaczej…

Tak, cache’owanie może pogorszyć wydajność strony. Może wręcz tę stronę zabić. Przekonał się o tym właściciel pewnego sklepu internetowego.

Sytuacja, jakich wiele. Klient znalazł wykonawcę, zamówił sklep i go otrzymał. Strona zbudowana została na gotowym motywie. Gdy klient chciał jakąś dodatkową funkcjonalność, wykonawca znikał na jakiś czas, testował kilka wtyczek (wszystko na stronie produkcyjnej), a następnie zostawiał tę, która sprawdzała się najlepiej. Brzmi znajomo, prawda?

(więcej…)

Na blogu dev.WPZlecenia pojawił się wczoraj artykuł sponsorowany pokazujący, jak nauczyć WordPressa przechowywania adresów IP logujących się użytkowników. Ponieważ komentarz do niego może być długi, a będzie miał też całkiem fajną wartość merytoryczną, to postanowiłem opublikować go tutaj. Zobaczymy sobie przy okazji, jak zły kod można krok po kroku poprawić.

Przede wszystkim trudno byłoby mi zaufać hostingowi, który wsadza mnie na minę i zapomina wspomnieć o ważnych konsekwencjach. Po pierwsze, jeśli chcemy sobie zapisywać adres IP, to ze względu na RODO musimy poinformować o tym fakcie użytkowników, wpisać to w regulamin i politykę prywatności, a przede wszystkim – uzasadnić potrzebę przechowywania tej właśnie informacji (bo nie możemy zbierać i przetwarzać danych bez uzasadnienia).

Natomiast, jeśli już przebrniemy przez całe to prawnicze zamieszanie… Fajnie byłoby robić to kodem, który ma ręce i nogi.

(więcej…)

Od jakiegoś czasu o Gutenbergu robi się coraz głośniej. Także na WordUpach. Najczęstsze pytanie, jakie pada w kontekście prezentacji na ten temat brzmi „A czy ja muszę go używać? Czy można go będzie jakoś wyłączyć?”

Odpowiedzi słyszałem już różne… Że się nie da, bo Gutenberg będzie domyślnym edytorem i zostanie na nas wymuszone jego używanie. Że będą (już są) wtyczki, które pozwalają go wyłączyć. Itd…

Ale czy naprawdę pozostanie przy starym edytorze jest aż tak skomplikowane? Przecież mowa o WordPressie – na pewno jest do tego jakiś filtr 😉

(więcej…)

ContactForm7 to chyba najpopularniejsza wtyczka do łatwego tworzenia formularzy, które można umieścić na stronie. Nie jest ona co prawda najwygodniejsza, najładniejsza, ani najbardziej intuicyjna, ale z pewnością jest szybka, bezpieczna i spełnia swoją rolę. A co więcej – dzięki przemyślanemu użyciu filtrów i akcji, pozwala na łatwe modyfikacje i integracje.

Zacznijmy od najprostszej i chyba najczęściej spotykanej modyfikacji, czyli:

Jak zrobić coś dodatkowego (zapisać do pliku, zachować w bazie danych, utworzyć wpis, itd.) z przesłanym formularzem?

Dzięki temu, że autor wtyczki przewidział taką możliwość, dodanie takiej integracji jest stosunkowo proste. Spójrzmy na poniższy kod, który realizuje chyba najprostszą formę takiej integracji, a jednocześnie jest świetnym startem do budowania swoich, bardziej rozbudowanych wersji:

function prefiks_process_submitted_form_data( $contact_form ) {
    $submission = WPCF7_Submission::get_instance();
    if ( $submission ) {

        // Pobierz dane przesłane w formularzu
        $submitted_name = $submission->get_posted_data('your-name');
        $submitted_email = $submission->get_posted_data('your-email');
        $submitted_subject = $submission->get_posted_data('your-subject');
        $submitted_message = $submission->get_posted_data('your-message');
        // ...

        // Zrób coś z danymi (np. zapisz je do pliku)
        file_put_contents('cf7-log.txt', 'Data: ' . date('c') . "\n", FILE_APPEND);
        file_put_contents('cf7-log.txt', "Autor: {$submitted_name} <{$submitted_email}>\n", FILE_APPEND);
        file_put_contents('cf7-log.txt', 'Temat: ' . $submitted_subject . "\n", FILE_APPEND);
        file_put_contents('cf7-log.txt', "Wiadomość:\n" . $submitted_message, FILE_APPEND);
        file_put_contents('cf7-log.txt', "\n--------------------\n", FILE_APPEND);
    }
}
add_action( 'wpcf7_before_send_mail', 'prefiks_process_submitted_form_data' );

(więcej…)