16進数コードメールアドレス-爬虫類がメールアドレスを収集することを避ける
11201 ワード
:zhanhailiang :2013-04-26
目的
表示されないメールアドレスはaddress-harvesting spambots(メールアドレス収集爬虫類)によって収集されます.もちろん、以下の方法では一部の爬虫類の収集を避けるしかなく、依然として一部の高級爬虫類が収集できる.
インプリメンテーション
<?php
function hexentities($str) {
$return = '';
for($i = 0; $i < strlen($str); $i++) {
$return .= '&#x'.bin2hex(substr($str, $i, 1)).';';
}
return $return;
}
echo hexentities("mailto:[email protected]").PHP_EOL;
echo hexentities("[email protected]").PHP_EOL;
// mailto:address@example.com
// address@example.com
<p><a href="mailto:address@example.com">address@example.com</a></p>
実際の解析は次のように表示されます.
<p><a href="mailto:[email protected]">[email protected]</a></p>
さらに、Markdown AUTOMATIC LINKSのメールボックスへの自動リンク処理を参照してください.
Automatic links for email addresses work similarly, except that Markdown will also perform a bit of randomized decimal and hex entity-encoding to help obscure your address from address-harvesting spambots.
簡単に言えば、Markdownはメールボックスを16進数符号化する際にランダム性を引用し、悪意のある収集を防ぐ能力を強化した.
エンコード結果は次のとおりです.
<p><a href="mailto:address@example.com">address@example.com</a></p>
青色マークの文字は16進符号化されていないことがわかります.
Markdownメールアドレスの自動リンクアルゴリズムに興味のある方はMarkdownパッケージのソースMarkdownを参照してください.pl:
1167 sub _DoAutoLinks {
1168 my $text = shift;
1169
1170 $text =~ s{<((https?|ftp):[^'">\s]+)>}{<a href="$1">$1</a>}gi;
1171
1172 # Email addresses: <[email protected]>
1173 $text =~ s{
1174 <
1175 (?:mailto:)?
1176 (
1177 [-.\w]+
1178 \@
1179 [-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+
1180 )
1181 >
1182 }{
1183 _EncodeEmailAddress( _UnescapeSpecialChars($1) );
1184 }egix;
1185
1186 return $text;
1187 }
参照先:
http://www.php.net/manual/en/function.bin2hex.php#48861
http://daringfireball.net/projects/markdown/syntax