KUNISAN.JPブログ - 1149 / 1557 ページ

新規書き込み

PHPでPOST送信

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2009年8月2日

某大手掲示板でイタズラ書き込みがあると、その書き込みをしたユーザーと同じプロバイダーを使っているユーザー全員が書き込みできなくなってしまう、ということがあります。書き込み後に「アクセス規制中です!!」というメッセージが出て、結局書き込みできなかったという経験をした方が少なからずいるのではないでしょうか。しかも、規制は数日続くことが多く、書きたい事があるのに、せっかくのタイミングを逃してしまうことがあります。

これを回避するには「プロキシ」を使う手があります。しかし誰でも使える「公開プロキシ」は、犯罪行為助長の危険性があることなどから、ここを経由しての書き込みはできない掲示板が多いです。もちろん某大手掲示板も例外ではありません。

そこで考えたのが「WEBサーバーをプロキシ代わりにして、メッセージを送信できないか?」ということでした。ホームページのメッセージ送信には、「GET」と「POST」という2種類の方式がありますが、掲示板で使用されているのは主に「POST」の方です。「WEBサーバーからPOST送信できれば、規制から外れて書き込めるようになる」ということで、早速PHPでPOST送信のプログラムを作ってみました。

■■■■■POST送信プログラムサンプル■■■■■
<?php

//ソケット接続
$sock = fsockopen('XXXXXXXX.com', 80, $errno, $errmsg, 30);

//接続可否の判定
if (is_resource($sock)){
print '接続しました。<br>';

//リクエストのデータ部
$v0 = '名前なまお';
$v1 = 'コメントこめんといかんな。';

//リクエストのデータ部(エンコード)
$data = 'name='.urlencode($v0).'comment='.urlencode($v1);

//リクエストを送信
$request = "POST http://XXXXXXXX.com/bbs.cgi HTTP/1.1\r\n"
.'Host: XXXXXXXX.com'."\r\n"
.'Content-Type: application/x-www-form-urlencoded'."\r\n"
.'Referer: http://XXXXXXXX.com/bbs_view.cgi'."\r\n"
."Content-Length: ".strlen($data)."\r\n\r\n"
.$data."\r\n";
fwrite ($sock, $request);

//レスポンスを受信
$res = '';
while (!feof($sock)) {
$d = fgets($sock);
$res .= $d;
}

//レスポンスを表示
print $res;

//ソケット切断
fclose($sock);

} else {

//ソケット接続エラー
print 'エラー'.$errmsg;

}

?>
■■■■■■■■■■■■■■■■■■■■■■■

以上が最低限のPOST送信機能を有したサンプルプログラムです。一応これだけでも動くことは動くのですが、このままでは某大手掲示板へのメッセージ送信はできません。某大手掲示板へのメッセージ送信は、ヘッダーに別途Cookie情報を付け加える必要があります。

まずは、POST送信のヘッダー情報を得るのに、パケットキャプチャ(Wireshark)を利用します。続いて、ヘッダー中のCookie情報にあるホスト名(通常はプロバイダー名になっています)を、WEBサーバーのホスト名に変更します。そして、修正されたヘッダー情報を、丸ごとPHPプログラムに反映させることで、某大手掲示板への書き込みが可能になります。これで「アクセス規制中」でも、WEBサーバー経由で問題がなくメッセージ送信ができるようになります。

ちなみにソケット接続関連のプログラムは、悪用される可能性もあるので、完全な形で公開できないことをお許しください。また完成したプログラムもあることはあるのですが、こちらも個人用として利用するだけで、一般公開はできませんので悪しからず…。





PHP関連記事(リンク一覧): さくらレンタルサーバーのアクセス履歴をPHPで表示 / PHPで画像のアップロード(さくらレンタルサーバーのPHPでImageMagick) / PHP REVERSI(オセロもどき)の続き / PHP REVERSI(リバーシ) - オセロもどきゲームの公開 / PHP版-簡易アクセスブロック(IPアドレス、ホスト名、OS、ブラウザ名で制御) / ...(記事連続表示)

入門PHPセキュリティ
入門PHPセキュリティ をAmazon.co.jpでチェック