Wpisy z kategorii 'php'

Bezpieczne wyświetlanie adresu e-mail

W dzisiejszych czasach podanie adresu e- na stronie internetowej może się wiązać z przykrymi konsekwencjami, programy typu email harvester zbierają adresy z wszystkich napotkanych stron i tworzą bazy danych dla spamerów. Najlepszym sposobem jest niepodawanie adresów na stronie, zamiast tego można stworzyć formularz kontaktowy (który zresztą też trzeba zabezpieczyć przed spamerami – najlepiej przy użyciu Captcha). Można też zastępować znaki słownymi odpowiednikami, np. imie[kropka]nazwisko[malpa]wp[kropka]pl, nie wygląda to jednak najlepiej.

Co więc zrobić gdy klient uprze się, że chce mieć adresy na stronie, ale niekoniecznie chce dostawać reklamy viagry? Jednym ze sposobów jest zamiana adresu email na zapis w encjach, np adres:

imie.nazwisko@server.pl

w źródle strony będzie wyglądał tak:

imie.& ....

Nie daje to 100% skuteczności, ale podobno większość harvesterów mamy już z głowy. Funkcję, która zamienia ciąg znaków na encje przedstawiam poniżej:

function safetyMail($mail) 
{
    $safety = '';
    for ($i=0; $i<strlen($mail); $i++) {
      $no = ord($mail[$i]);
      $arr = array();
      $arr[] = $no;
      $arr[] = 'x'.dechex($no);
      $no = $arr[rand(0,1)];
      $safety .= "&#".$no.";";
    }
    return $safety;
}

Najlepiej używać jej na całym wyrażeniu mailto:adres@email.com, gdyż robaki często szukają po wyrażeniu mailto:. Jeśli nie wiemy w którym miejscu klient wstawi adres email, dla pewności możemy podpiąć funkcję, która wyszuka wszystkie adresy i zamieni je na encje, kod poniżej:

function safetyMails($params)
{
    $s = $params["s"];
    $mask = '|([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})|U';
    preg_match_all($mask, $s, $out);
    foreach ($out[0] as $mail) {
      $s = str_replace('mailto:'.$mail, safetyMail('mailto:'.$mail), $s);
      $s = str_replace($mail, safetyMail($mail), $s);
    }
    return $s;
}

Reasumując, przedstawiony sposób nie daje nam gwarancji pełnego bezpieczeństwa, wydaje mi się, że bezpieczniejsze jest podmienianie adresów za pomocą JavaScript’u, jednak nie jest to dobre ze względów estetycznych, na wolniejszych łączach zanim wykona się nam JavaScript, użytkownik może widzieć przez jakiś czas “krzaki”.

Jest 1 komentarz lipiec 20th, 2009

Zend Certified Engineer


Udało się, zdałem test :) Nie oznacza to, że skończyła się seria notatek ze Study Guide, podzielę się jeszcze notatkami z ważniejszych działów. A teraz wrażenia z egzaminu. Egzamin trwa 90 minut, w całości jest w języku angielskim i składa się z 70 pytań. Są pytania jednokrotnego wyboru, wielokrotnego wyboru (zaznaczone jest ile odpowiedzi należy zaznaczyć) i pytania w których odpowiedź należy wpisać (np. nazwa konkretnej funkcji lub wynik podanego kawałka kodu).

Zanim podejdziecie do testu Zenda musicie dokładnie odświeżyć wiedzę, nie ma lekko, pytania są bardzo szczegółowe, więc nie ma co liczyć na szczęście. Na pewno warto wykupić kilka testów php|architect, znajdziecie je na stronie Zenda. Ja rozwiązałem 5 takich testów, pytania są na podobnym poziomie do tych z testu , choć składaniałbym się do stwierdzenie, że na egzaminie są pytania porównywalne z tymi trudniejszymi z php|architect.

Moje porady dla planujących podejście do : powtórzyć dokładnie obiektówkę, interface’y, klasy abstrakcyjne, dziedziczenie, instanceof powinniście mieć w małym paluszku. Funkcje operujące na stringach i tablicach trzeba znać wszystkie! Mało tego, należy znać je bardzo dokładnie, wraz z listą parametrów i efektem użycia ich w najróżniejszych kombinacjach. Do tego trzeba dorzucić takie tematy jak bezpieczeństwo, bazy danych (głównie PDO i mysqli), XML i podstawy, które wcale nie są najłatwiejsze (operatory binarne, liczby zapisane w różnych systemach, kolejność wykonywania funkcji i operatorów itp.).

Łatwo nie ma, trzeba dużo powtórzyć (lub douczyć się), wgryźć się w szczegóły. Czy warto zdawać? Raczej tak, w momencie w którym zostałem dodany do Yellow Pages Zenda, byłem 63 Polakiem z tym certyfikatem. Kilka godzin po dodaniu wpisu o w profilu na Goldenline, dostałem ciekawą ofertę pracy (w Brukseli) od headhuntera (kolega z również ją dostał, a kolega bez nie dostał, więc chyba było to jakimś kryterium). Na całym świecie jest tylko 4000 certyfikowanych () osób. Koszt egzaminu nie jest jakiś wielki (poniżej 400 złotych), a sądzę że każdy pracodawca chętnie go pokryje. Pozostaje mi tylko życzyć powodzenia, bo skoro doczytałeś do końca ten wpis, to pewnie przymierzasz się do testu Zenda.

9 komentarzy styczeń 21st, 2009

Poprzedni wpis


Kalendarz

luty 2012
P W Ś C P S N
« stycznia    
 12345
6789101112
13141516171819
20212223242526
272829  

Starsze wpisy

Kategorie