Сделать адреса электронной почты безопасными от ботов на веб-странице? - PullRequest
45 голосов
/ 02 октября 2008

При размещении адресов электронной почты на веб-странице вы размещаете их в виде текста следующим образом:

joe.somebody@company.com

или использовать хитрый трюк, чтобы попытаться обмануть ботов с харвестером по адресу электронной почты? Например:

Символы HTML Escape:

joe.somebody@company.com

Расшифровка JavaScript:

function XOR_Crypt(EmailAddress)
{
    Result = new String();
    for (var i = 0; i < EmailAddress.length; i++)
    {
        Result += String.fromCharCode(EmailAddress.charCodeAt(i) ^ 128);
    }
    document.write(Result);
}

XOR_Crypt("êïå®óïíåâïäùÀãïíðáîù®ãïí");

Человек Расшифровка:

joe.somebodyNOSPAM@company.com

joe.somebody AT company.com

Что вы используете или вообще беспокоитесь?

Ответы [ 22 ]

0 голосов
/ 02 октября 2008

Это то, что мы используем (VB.NET):

Dim rxEmailLink As New Regex("<a\b[^>]*mailto:\b[^>]*>(.*?)</a>")
Dim m As Match = rxEmailLink.Match(Html)
While m.Success
    Dim strEntireLinkOrig As String = m.Value
    Dim strEntireLink As String = strEntireLinkOrig
    strEntireLink = strEntireLink.Replace("'", """") ' replace any single quotes with double quotes to make sure the javascript is well formed
    Dim rxLink As New Regex("(<a\b[^>]*mailto:)([\w.\-_^@]*@[\w.\-_^@]*)(\b[^>]*?)>(.*?)</a>")
    Dim rxLinkMatch As Match = rxLink.Match(strEntireLink)
    Dim strReplace As String = String.Format("<script language=""JavaScript"">document.write('{0}{1}{2}>{3}</a>');</script>", _
                RandomlyChopStringJS(rxLinkMatch.Groups(1).ToString), _
                ConvertToAsciiHex(rxLinkMatch.Groups(2).ToString), _
                rxLinkMatch.Groups(3), _
                ConvertToHtmlEntites(rxLinkMatch.Groups(4).ToString))
    Result = Result.Replace(strEntireLinkOrig, strReplace)
    m = m.NextMatch()
End While

и

    Public Function RandomlyChopStringJS(ByVal s As String) As String
        Dim intChop As Integer = Int(6 * Rnd()) + 1
        Dim intCount As Integer = 0
        RandomlyChopStringJS = ""
        If Not s Is Nothing AndAlso Len(s) > 0 Then
            For Each c As Char In s.ToCharArray()
                If intCount = intChop Then
                    RandomlyChopStringJS &= "'+'"
                    intChop = Int(6 * Rnd()) + 1
                    intCount = 0
                End If
                RandomlyChopStringJS &= c
                intCount += 1
            Next
        End If
    End Function

Мы переопределяем Render и запускаем исходящий HTML-код до того, как он выйдет за дверь. Это делает адреса электронной почты, которые обычно отображаются в браузере, но выглядят так в источнике:

<script language="JavaScript">document.write('<a '+'clas'+'s='+'"Mail'+'Link'+'" hr'+'ef'+'="ma'+'ilto:%69%6E%66%6F%40%62%69%63%75%73%61%2E%6F%72%67">&#105;&#110;&#102;&#111;&#64;&#98;&#105;&#99;&#117;&#115;&#97;&#46;&#111;&#114;&#103;</a>');</script>

Очевидно, что он не защищен от дурака, но, надеюсь, сократит определенное количество урожая, не мешая посетителю.

0 голосов
/ 02 октября 2008

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

...