Każdy kto kiedykolwiek zakładał konto użytkownika na swoim blogu opartym o WordPress wie, że hasło do konta wysyłane jest mailem jako jawny tekst. A mail wysyłany jest jako tzw. plain text, a nie HTML. Przypadek? Nie sądzę.
Przekonałem się o tym ostatnio, kiedy zaliczyłem (nie) małą wtopę.
Zadaniem było zaimportowanie do wtyczki s2member (zarządzanie kontami i subskrypcjami) około 300 kont użytkowników dostarczonych w formacie CSV. Oczywiście nie było podanych haseł i należało je wygenerować.
Wiadomo, safety first, więc wygenerowałem dla każdego hasła o zmiennej długości (8-10 znaków) składające się z liter, cyfr i znaków specjalnych. Z jednej strony dobrze bo bezpiecznie, a z drugiej to był błąd.
Na stronie była dodana obsługa niestandardowych szablonów maili, również tych z WordPressa. Kolorki, tabelki itd. więc mail był wysyłany jako HTML.
Bardziej doświadczeni pewnie powiązali już te maile w HTML z hasłami ze znakami specjalnymi. Możecie mnie linczować – nie zmieniłem znaków haseł na encje.
Dla tych mniej doświadczonych: < był traktowany jako znak otwierający znacznik HTML. W praktyce wszystko po i włącznie z < do końca linii było obcinane.
Ilość wygenerowanych haseł z tym znakiem to było około 15%, więc nie tak źle. Ale i tak to moja wina za którą biorę odpowiedzialność.
Możliwe rozwiązania sytuacji
Nie tykaj
Jeśli coś jest zaszyte w corze WordPress’a to nie szukaj na siłę rozwiązania i zmiany na swoje. Co prawda tego maila można było zmienić co wiązało się z przekopiowaniem 2 czy 3 funkcji z core, ale to jednak nie była kwestia jednego filtra. Trzeba było się namęczyć.
Enkoduj
Wystarczyło zmienić znaki w ciągu hasła na encje. Hasło wyświetliłoby się normalnie i byłoby kopiowalne.
Zmiana core
Moje ciche marzenie. Dodatkowy ekran wp-login.php na którym podajesz hasło dla swojego nowo utworzonego konta. Nie trzeba nic wysyłać, a hasło zna tylko jedna osoba.
Podsumowanie
Wpadce można było łatwiej zapobiec, ale niech to będzie przestrogą dla tych, którzy są nieostrożni tak jak ja.
– 4.3. ;)
Z tego się najbardziej ucieszyłem :)