PHP + CSS Obfuscation - PHP или ТО PHP strrev + CSS обратный текст, как получить специальные символы, проверенные в обратном порядке? - PullRequest
5 голосов
/ 22 января 2012

Я читал об обфускации по электронной почте.

Я нашел интересную запись под названием Лучший метод для обфускации электронной почты?- Джеффом Старром , где он описывает различные тесты, проведенные Сильваном Мюлеманом в течение 1,5 лет.

Согласно этому исследованию, обструкция css была 100% эффективной в течение 1,5-летнего теста, несмотря на его различные недостатки.

Видя, как я раньше играл с этим методом обфустификации, я решил попробовать еще раз, добавив функцию php, с которой столкнулся.

Вот функция:

// Converts email and tel into html special characters
function convert_email_adr($email)
{
    $pieces = str_split(trim($email));
    $new_mail = '';
    foreach ($pieces as $val)
    {
        $new_mail .= '&#'.ord($val).';';
    }
    return $new_mail; 
}

А вот и php, использующий эту функцию.

$lstEmail = convert_email_adr("{$row['email']}");

Это именно так, как описано, и я бы предположил, что это будет работать довольно хорошо, предполагая, что харвестеры не написаликод, который идентифицирует строку специальных символов и декодирует их.

Итак, я решил, что если я объединю эти два метода, например, я разбиваю строку на специальные символы, затем использую на ней strrev, затем использую cssперевернуть строку ... Простой ...

Вот добавленная часть php, которая переворачивает реальную строку, как видно на странице, такurce:

$lstEmail = strrev($lstEmail);

и CSS, чтобы обратить его снова на стороне клиента:

span.obfuscate { unicode-bidi:bidi-override; direction: rtl; }

И HTML:

<p><span class='listHeadings'>eMail:</span> <span class='obfuscate' style='font-size:0.6em;'><a href='mailto: $lstEmail?subject=Testing 123'>$lstEmail</a></span></p>

Но проблема в том, чтострока теперь обратная и не будет проверена ... Вот пример:

; 901 # &; 111 # &; 99 # &; 64 # &; 801 # &; 501# &; 79 # &; 901 # &; 301 # &; 46 # &; 411 # &; 101 # &; 001 # &; 011 # &; 111 # &; 611 # &; 011 # &; 79 # &; 811 # &; 301 # &; 501 # &; 79 # &; 411 # &; 99 # &

Что происходит, когда специальные символы не декодируются в реальные символы, так что все высм. строка специального символа в обратном порядке.

Существует также недостаток, описанный Джеффом Старром, в том, что вы не можете использовать метод css в mailto, так как вы не можете использовать тег span внутри hrefатрибут.

Так что теперь я действительно застрял в шансы, как выполнить эту задачу.Я полагаю, что смогу смириться с тем, что заставлю людей сами вводить мой адрес электронной почты, если они захотят написать мне ... Но, с другой стороны, я не уверен в этом.

Тогдаприходит задача проверки специальных символов в обратном порядке ...

Кто-нибудь сможет предоставить мне какой-либо ввод или поддержку в этом отношении?Кроме того, любые предложения в различных, легитимных способах выполнения этой задачи будут с благодарностью!

Я говорю правомерно, потому что я планирую использовать эти функции в одном из моих живых проектов, который является веб-сайтом для листинга бизнеса (в настоящее время используется функция php выше) ... Последнее, что я хочу сделать, - это начать играть вокруги создать пробел и выпустить кучу информации для спамеров!Я думаю, это было бы очень плохо для бизнеса ...

Ответы [ 4 ]

2 голосов
/ 22 января 2012

Как веб-мастер, я всегда помещаю свою электронную почту в виде обычного текста на сайте контактов.Это самое удобное решение для посетителей, и оно работает независимо, если поддерживается css или js.

Я делаю это с несколькими электронными письмами с 10 лет .. да, я получил немного спама, но не так много, около 3-5день.У меня есть хороший фильтр спама, я раз в неделю наблюдаю за спамом и удаляю его.

Я не использую mailto, потому что многие люди не настроили локальную программу электронной почты и не знают, что делать с всплывающим окном при нажатии на ссылку mailto.

1 голос
/ 01 февраля 2012

Просто переверни это, прежде чем запутать его ...

$email  = 'blah@whatever.co.uk';
$new    = convert_email_adr($email);

echo '<span style="unicode-bidi:bidi-override; direction: rtl;">'.$new.'</span>';

function convert_email_adr($email, $reverse = true, $obfuscate = true)
{
    $email = trim($email);

    if($reverse)
    {
        $email  = strrev($email);
    }

    if($obfuscate)
    {
        $pieces = str_split($email);
        $email  = '';

        foreach($pieces as $piece)
        {
            $email .= '&#'.ord($piece).';';
        }
    }

    return $email; 
}
1 голос
/ 27 января 2012

Как правило, хорошим решением для этого является предоставление слоя абстракции вокруг адреса электронной почты целиком, под которым я имею в виду, а не просто адрес электронной почты, предоставляя контактную форму.Они заполняют свою информацию, отправляют ее, и ваш сервер отправляет информацию по соответствующему адресу электронной почты.

Это не особенно масштабируемый подход, хотя, как правило, в основном применим к одной ситуации "свяжитесь со мной", а неситуация «вот наши списки компаний, с которыми можно связаться», в этом случае obsfucation идет вразрез с вашей целью обеспечения того, чтобы клиенты могли как можно легче связаться с целями.В этом случае вы, как правило, хотите использовать хорошую защиту от спама.

1 голос
/ 25 января 2012

Почему бы вам не использовать это таким образом?

function convert_email_adr($email)
{
    $pieces = str_split(strrev(trim($email)));
    $new_mail = '';
    foreach ($pieces as $val)
    {
        $new_mail .= '&#'.ord($val).';';
    }
    return $new_mail; 
}
...