25.04.2024 | 13:52

avatar

Antoni Mróz

Jak rozwaliłem Trzecią Zaufaną Stronę – odc. 1 – Formularz

„Że blog na WordPressie – bułka z masłem!” – pomyślałem jako przyszły admin Zaufanej Trzeciej Strony. Jednakże tysiące linijek kodu w PHP szybko zweryfikowały moje umiejętności i już wiem, że tak prosto z obsługą WP jednak nie jest. W serii „Jak rozwaliłem…” (oby jednoodcinkowej) będę opisywał moje błędy popełnione na produkcyjnej Zaufanej, które mogły poważnie wpłynąć na dostępność strony lub, jak w tym wypadku, na kontakt z Adamem Hantele.

W Zaufanej wierzymy, że liczy się transparentność, a Czytelnicy zasługują na wyjaśnienia. Za to ci bardziej techniczni Odwiedzający dodatkowo będą mogli się ze mnie pośmiać (albo zweryfikować konfiguracje swoich instancji WordPressa 😜).

Zarys teoretyczny (bez wyprowadzeń wzorów)

Usterka dotyczyła formularza kontaktowego Zaufanej Trzeciej Strony. Wszystkie zgłoszenia między 21 grudnia 2023 a 9 marca 2024 były przyjmowane przez nasz system, ale nie były przekazywane dalej na skrzynkę mailową Adama. A że nikt do systemu (tak naprawdę zakładki „Zgłoszenia”) nie zaglądał, formularze pozostawały bez odpowiedzi. Wszystko to zaczęło się od…

Migracja

…wielkiej migracji między starym a nowym serwerem Zaufanej. Wtedy też zauważyłem, że stara instancja wysyła maile przez lokalnie zainstalowanego Postfixa. To rozwiązanie mnie średnio zadowalało, gdyż:

  1. IP serwera dedykowanego musiało być publicznie dostępne w DNS-ach, a przecież nie po to Cloudflare chroni nasz adres, żebyśmy jednym rekordem go ujawniali.
  2. Gdyby z jakiegoś powodu nasz adres IP trafił na listę abuse, moglibyśmy mieć problemy z doręczalnością poczty.
  3. Rzeczy takie jak poczta wolę outsourcować profesjonalistom – nie muszę się przez to obawiać ewentualnych dziur w pakietach Postfixa oraz zastanawiać, czy automatyczna aktualizacja paczki już się uruchomiła, czy może dopiero ruszy za chwilę.

Zarządziłem więc zmianę konfiguracji poczty i od grudnia 2023 roku za wysyłanie powiadomień z WordPressa Zaufanej odpowiada usługa AWS Simple Email Service.

Bolączka WP: pluginoza

Wbrew pozorom „goły” WordPress potrafi niewiele: nie ma żadnych ustawień dotyczących SMTP (można sobie je łaskawie nadpisać w plikach motywu w functions.php…), brakuje tagów OpenGraph do generowania ładnych embedów na Twitterach czy innych Discordach, a podgląd obrazków w formie przesuwalnej galerii nie istnieje (opcja „Rozwiń po kliknięciu” nie jest wystarczająca). Każdą z tych drobnych rzeczy należy tegować wtyczką bądź wtyczkami, a jedna jest gorsza od drugiej.

AIO SEO (SEO, tagi OpenGraph): zainstalujemy Ci dodatkowe wtyczki, bo możemy. Plotki głoszą, że ktoś gdzieś zauważył checkbox od nieinstalowania dodatkowych śmieci.
Ninja Forms: twój Dropbox przestał istnieć? Spowolnimy każde odwiedziny strony o 350 ms czekania (efektywnie jakieś 600 ms). Błędna konfiguracja istniała od 2020 roku do momentu kiedy kolega Unx nie użył narzędzia Laps i nie wyzerował ręcznie ustawień wtyczki w bazie danych.
Easy WP SMTP: coś nie działa? Dowiesz się w swoim czasie. Albo i nie.

Mam wrażenie, że autorzy wtyczek walczą nawet nie o pieniądze autorów blogów, co po prostu z samymi autorami, aby ich życie było jeszcze smutniejsze niż dotychczas…

Instalujesz naszą wtyczkę, a chcesz jeszcze pięć innych? A może pokazać ci zresetowaną konfigurację w zakładce ustawień, mimo że de facto w bazie danych jest inaczej? A logi błędów? Paaaanie, zapłać pan albo kliknij super ukrytą zakładkę, to może wtedy.

Wtyczka Easy WP SMTP (oprócz utrudniania dostępu do logów, o czym za chwilę) w zasadzie działa OK. Przy jej początkowej konfiguracji zaznaczyłem kilka opcji, które przypadkiem naprawiały problem – nadpisywanie nagłówków FROM.

Takie ustawienia, choć prawidłowe i bezpieczne, przeszkadzały w łatwym odpowiadaniu na Wasze zgłoszenia. Przed migracją, gdy Adam otrzymywał kopię zgłoszenia na swojego maila, to adres do odpowiedzi znajdował się zawsze w polu FROM. W związku z tym, jeżeli pole FROM nie jest nadpisywane przez wtyczkę zgłoszeń (czyli wynosi np. [email protected]), to nie wiadomo, kto wysłał zgłoszenie i trzeba sięgać do logów we wtyczce.

Wtedy jeszcze nie wiedziałem, że uwaliłem produkcję…

Problem w tym, że przed migracją myk z ustawianiem fałszywego pola FROM by przeszedł – w końcu to my operowaliśmy Postfixem, więc można było tam ustawić prawie wszystko. Sytuacja się zmieniła, kiedy zaczęliśmy korzystać z usług zewnętrznych. SES (zresztą słusznie) wymaga weryfikacji domen, które mają się znajdować w polu FROM. Na tym właśnie poległem.

W darmowej wersji wtyczki w widżecie nawet nie można zawęzić zakresu wyświetlanych statystyk.

O swoim błędzie dowiedziałem się przypadkiem, kiedy w ramach akcji usuwania nadmiernej liczby wtyczek z Zaufanej zacząłem głębiej zaglądać w różne opcje. Easy WP SMTP ma kilka zakładek. W której z tych poniżej znajdują się logi?

Oczywiście, chodzi o zakładkę Tools, podzakładka Debug Events.
Tada! Dopiero tutaj widać, że coś jest nie tak!

Treść błędów wyglądała następująco:

Mailer: Other SMTP
SMTP Error: data not accepted.SMTP server error: DATA END command failed Detail: Message rejected: Email address is not verified. The following identities failed the check in region EU-NORTH-1: „[email]” , [email]
SMTP code: 554

Caller
Plugin: Ninja Forms
/var/www/html/wp-content/plugins/ninja-forms/includes/Actions/Email.php (line: 98)

Ninja Forms: To byłoby świetne miejsce na to, aby umieścić komunikat „Andżeju, ta operacja się nie powiedzie”.

Jak widać, SES nie pozwala na niezweryfikowane adresy w polu FROM. Tylko co mogło nam modyfikować to pole? Po chwili główkowania przypomniałem sobie feralną migrację i ustawianie SMTP. Ale zaraz, przecież formularz kontaktowy testowałem i wszystko działało! Kłopot w tym, że e-mailem testowym był adres, który już w AWS SES wcześniej zweryfikowałem. Widocznie wymyślenie fejkowego adresu do podania w testach formularza było dla mnie za trudne…

Na tym śmiesznym filmiku ukradzionym z Reddita jestem tą czerwoną maskotką.

Stop! Młotu czas!

W tej samej zakładce „Debug events” znajduje się opcja, która powinna nas przed tym wszystkim ochronić. Informacja o błędzie wysyłana na maila administratora – tego nam było trzeba! Opcja jest nie dość, że domyślnie włączona, to jeszcze nie można jej wyłączyć. Hurra?

To mogło uratować mnie przed wstydem oraz klepaniem tego wpisu.

Niestety nie hurra, Pan Hantle żadnego maila o błędzie nie dostał, ale za to bezużyteczne statystyki tygodniowe wpadały cały czas.

Jedyne powiadomienia od wtyczki, które do Adama docierały.

Tory były złe i szyny, a podwozie to w ogóle

Ostatecznie wszystko udało się naprawić. Z panelu SES-a usunąłem swój adres mailowy jako zweryfikowany, gdyby znowu mi się zachciało robić testy ze swoimi danymi. Pola FROM ustawiłem na adresy Zaufanej, a pola REPLY-TO na adresy e-mail zgłaszających. Tak, pola nadawcy maila oraz ten wskazujący, do kogo wysłać odpowiedź, mogą być różne, ale to pewnie już wiedzieliście.

Mam nadzieję, że nie będę musiał pisać kolejnego Post Mortem. Chociaż Zaufana teraz to odrobinkę plac budowy – pewnie nowy wygląd już zauważyliście (jest cudowny), to sporo się dzieje „pod maską”. Myślę jednak, że z moim szczęściem już wkrótce przeczytacie kolejny odcinek „Jak rozwaliłem…”. Przynajmniej będzie zapewniony „kątęt” do czytania i analizy, tak jak Cloudflare słynący ze swojej transparentności w swoich write-upach.

A propos, dzień po mojej wpadce Cloudflare zdegradował wszystkich swoich płacących klientów do planu darmowego i walczył z tym kilkanaście godzin. Przypadek? Pewnie tak.

Problem występował już w okolicach północy 10 marca, a odnotowany został dopiero o godzinie 11.
Powrót

Komentarze

  • avatar
    2024.04.25 14:40 Agnieszka Wesołowska

    Poproszę odcinek o migrowaniu z super hiper zajebistego serwera, o różnicach międy domenami com a narodowymi, niedziałąjących statach analytics oraz o tym jak pozostać zalogowany/ą na stronie, jeśli się niefrasobliwie przechodzi z zaplecza na główną.

    Odpowiedz
    • avatar
      2024.04.28 17:08 WN

      Podbijam!

      Odpowiedz
    • avatar
      2024.05.01 19:18 ocz

      Oho, czyżby jakaś wojna wewnątrz Z3S?

      Odpowiedz
  • avatar
    2024.04.25 15:26 Tou

    Pytanie zasadnicze do autora:
    WHO is Adam Hantel???

    Odpowiedz
    • avatar
      2024.04.25 15:35 Antoni Mróz

      Nie znam żadnego Adama Herakle.

      Odpowiedz
      • avatar
        2024.04.25 16:23 Tou

        „W serii „Jak rozwaliłem…” (oby jednoodcinkowej) będę opisywał moje błędy popełnione na produkcyjnej Zaufanej, które mogły poważnie wpłynąć na dostępność strony lub, jak w tym wypadku, na kontakt z Adamem Hantele.”
        😁

        Odpowiedz
        • avatar
          2024.04.25 17:02 Antoni Mróz

          Absolutnie nie znam człowieka 😜

          Odpowiedz
    • avatar
      2024.04.26 11:00 Adrian

      To najprawdopodobniej kuzyn Adama Snorkle.
      PS A Wasza wtyczka do wykrywania zduplikowanych komentarzy jest lekko za czuła.

      Odpowiedz
      • avatar
        2024.04.26 17:44 Antoni Mróz

        Po prostu ręcznie wszystko do akceptacji idzie. :)

        Odpowiedz
  • avatar
    2024.04.25 16:15 Zerat

    podszywanie się w mailach pod userów (nadawców) to ZŁO i powinno być karane – walczę z takimi case’ami u siebie w firmie…
    jeśli nadawca i odbiorca to 2 różne serwery pocztowe, to takie brzydkie maile nie przejdą choćby SPFa i trzeba robić wykluczenia…
    pomysł z reply-to dużo sensowniejszy :)

    P.S. ten formularz nie obsługuje maili z „+” – RFC się smuci…

    Odpowiedz
    • avatar
      2024.04.25 17:01 Antoni Mróz

      Testowy mail „[email protected]” przeszedł mi OK. 🤔

      Odpowiedz
      • avatar
        2024.04.25 17:09 Piotr

        Bo na serwerze docelowym nie macie poprawnie zrobionego sprawdzania SPF/DKIM/DMARC

        Odpowiedz
        • avatar
          2024.04.25 18:05 Antoni Mróz

          Ale który serwer masz na myśli jako „docelowy”? Wszystkie wiadomości trafiają na Gmaila. Halo otpiur, Google?

          Odpowiedz
          • avatar
            2024.04.25 20:51 Piotr

            Jako adres FROM dałeś jakiś adres gmail’owy i jako adres TO też dałeś inny gmail’owy? BO to by było bardzo dziwne żeby to przeszło.

          • avatar
            2024.04.25 23:06 Antoni Mróz

            Przed moimi zmianami dowolne pole FROM dostarczane Gmailowi przechodziło podobno normalnie. Może był filtr, aby takich wiadomości nie kierować do SPAMu, co naturalnie powinno się dziać.

      • avatar
        2024.04.26 09:22 Zerat

        u mnie niestety ne funguje „+”
        ale tylko w formularzu komentarzy
        puściłem screena formularzem kontaktowym

        Odpowiedz
        • avatar
          2024.04.26 17:45 Antoni Mróz

          Faktycznie, będzie zategowane. Dzięki!

          Odpowiedz
  • avatar
    2024.04.25 16:20 Obserwer

    Ale litości czemu WordPress?

    Odpowiedz
    • avatar
      2024.04.26 13:50 kameee

      Bo ładny jest :)

      Odpowiedz
  • avatar
    2024.04.25 16:42 Piotr

    Może i całkiem ciekawy tekst, ale sorry, tytuł kompletnie z d**y. Cały czas liczyłem że wtyczka kompletnie namieszała w SQL, albo w plikach WordPressa coś popsuła, a tu nic a nic. Taki o poprostu felieton o tym że mieliście złą konfigurację wtyczki od wysyłania maili i w sumie to tylko nie dochodziły te maile.
    Zarządzam dwiema stronami na wordpressie i moja reakcja po przeczytaniu tego felietonu to: 🤨
    PS. Sprawdźcie sobie „WP Mail SMTP”

    Odpowiedz
    • avatar
      2024.04.25 16:56 Antoni Mróz

      Należy jednak zauważyć, że powiadomienia mailowe o problemach z dostarczaniem poczty również nie działały (czemu?). Ta cała wtyczkozzza w ekosystemie WordPressowa jest męcząca – takie ustawienia powinny być IMHO wbudowane.

      Odpowiedz
  • avatar
    2024.04.25 17:07 SeeM

    Wtyczki do WordPressa bywają koszmarne w utrzymaniu, a wsparcie zwykle mamy wyłącznie do najnowszych ich wersji. To nie jest wcale najgorsze. Najgorsze są te, które przechodzą przez wp-admin i tym samym wymagają wystawienia admin-ajax do internetu.

    Czasami wtyczka robi coś prostego, na przykład zmienia tylko kilka linijkek w wp-config.php i wcale nie trzeba jej instalować. Wystarczy te linijki doposać. Warto się rozejrzeć i ograniczyć ilość wtyczek, proponowanych jako świetne rozwiązanie przez wcale niesponsorowane, techniczne blogi na temat seo i hostingów.

    Odpowiedz
    • avatar
      2024.04.25 18:03 Antoni Mróz

      Tak, można sobie poprawić PHPMailera, ale założyłem początkowo że wtyczka „zrobi to lepiej”. Nie zrobiła, więc docelowo pewnie wyleci. ¯\_(ツ)_/¯

      Odpowiedz
  • avatar
    2024.04.25 22:10 GDR!

    FluentSMTP polecam, nie ma wersji płatnej, są fallbackowe serwery SMTP, powiadomienia o problemach, opcjonalnie logi wysłanych wiadomości

    Odpowiedz
    • avatar
      2024.04.26 17:46 Antoni Mróz

      Jestem winny Ci piwo.

      Odpowiedz
  • avatar
    2024.04.26 08:44 Tymoteusz

    A nie dałoby się tego obejść wstawiając w nadawcę maila np. w konstrukcji [email protected] (wtedy nie będą się wątkować z noreply) a oryginalny mail użytkownika zostawić w reply-to? Wtedy dałoby się też podejrzeć „w miarę” wygodnie adres nadawcy bez rozwijania dropdownów. No chyba, że SES wymaga potwierdzenia adresu nawet w zweryfikowanej domenie…

    Odpowiedz
  • avatar
    2024.04.26 09:02 zakius

    i po raz kolejny potwierdza się, że WP nie jest narzędziem dla zwykłego śmiertelnika, a jedynie narzędziem umożliwiającym magikom z latami doświadczenia i setkami jeśli nie tysiącami obsłużonych WP stworzenie CMS-a dla klienta
    wybranie odpowiedniego motywu i wtyczek tak, żeby robiły co trzeba, ale robiły to dobrze i szybko to nie jest coś, co można zrobić w jeden dzień bez wcześniejszego doświadczenia
    można się na tym nieźle przejechać

    Odpowiedz
  • avatar
    2024.04.26 12:58 djjddjdjd

    Najciekawszy kawałek to ten że kontakt był testowany tylko akurat na potwierdzonym adresie.
    Morał jest taki żeby nie testować akurat na potwierdzonym adresie.

    Odpowiedz
  • avatar
    2024.04.27 11:04 Łukasz

    Ten artykuł można by jeszcze rozszerzyć o to jak bezpiecznie wysyłać takie maile z formularzy na WordPress. Mam na myśli poprawną konfigurację SPF, DKIM, DMARC.

    Odpowiedz
  • avatar
    2024.04.27 13:58 jaksie

    tak to jest jak sie uzywa php

    Odpowiedz
  • avatar
    2024.04.30 10:09 iwona

    https://zaufanatrzeciastrona.pl/pl/ która często wypluwa wyszukiwarka też Wam nie działa.

    Odpowiedz

Zostaw odpowiedź

Jeśli chcesz zwrócić uwagę na literówkę lub inny błąd techniczny, zapraszamy do formularza kontaktowego. Reagujemy równie szybko.

Jak rozwaliłem Trzecią Zaufaną Stronę – odc. 1 – Formularz

Komentarze