PHPセキュリティ対策:メールアドレスを画像表示

(1/1)
Web 上に公開しているメールアドレスを自動で回収するプログラムがある。これを使って、迷惑メールを送信するためのアドレス帳に登録されてしまう恐れがある。
そうした被害を避けるため、メールアドレスを画像化しておこう。正規ユーザーには迷惑をかけるが、自己防衛のためにやむを得ないことである。

サンプル・プログラム

サンプル・プログラムは、直接、Web ページに埋め込まれることも想定している。
たとえば Apache + PHP の環境であれば、

<!--#include virtual="ascii2image.php?s=hogehoge.pahoo.org" -->


のように記述することで、Web ページに画像化したテキストを埋め込んでくれる。

サンプル・プログラムの解説:画像処理

0106: /**
0107:  * ASCII文字を画像に変換
0108:  * @param int    $mode 0=画面出力,1=画像出力
0109:  * @param int    $font 0|1(フォントの種類)
0110:  * @param string $str  ASCII文字列(UTF-8)
0111:  * @return string BASE64
0112: */
0113: function ascii2image($mode$font$str) {
0114:     //フォント・ファイル
0115:     static $table = array(
0116: '../../../../common/font/VL-PGothic-Regular.ttf',
0117: '../../../../common/font/ThrowMyHandsUpintheAir.ttf'
0118: );
0119: 
0120:     if ($str == '')    return '';
0121: 
0122:     $res = '';
0123:     $size = 20;
0124:     $arr = imagettfbbox($size, 0, $table[$font]$str);  //サイズ取得
0125:     $im  = imagecreate($arr[4] - $arr[6] + 5, $arr[1] - $arr[7] + 5);
0126:                                                     //イメージストリーム作成
0127:     $bgcolor = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);    // 背景色
0128:     imagecolortransparent($im$bgcolor);                    //透明化
0129:     $color = imagecolorallocate($im, 0x00, 0x00, 0xCC);  // 文字色
0130:     imagettftext($im$size, 0, -$arr[6], -$arr[7]$color$table[$font]$str);  //出力
0131: 
0132:     if ($mode == 1) {
0133:         header("Content-type: image/png");               //MIMEはPNGで
0134:         imagepng($im);                                   //ブラウザ表示
0135:     } else {
0136:         ob_start();
0137:         imagepng($im);                                   //ブラウザ表示
0138:         $res = base64_encode(ob_get_clean());
0139:     }
0140:     imagedestroy($im);                               //後処理
0141: 
0142:     return $res;
0143: }

画像処理のために GD 関数 を用いた。
GD関数を使ったフォント描画については「PHP で TrueType フォントを利用する」で紹介したので、そちらを参考にしてほしい。

今回は、描画用フォントとして「VL ゴシックフォントファミリ」と「Throw My Hands Up in the Air」の 2種類を選択できるようにした。後者は手書き風フォントであり、OCR による解析を回避する役に立つだろう。

参考サイト

(この項おわり)
header