2012-03-11

Pythonで自動的にPOST送信する方法

SEOに取り組む場合、様々な手法がありますが、私が非常に有効だと考えている手法の1つが相互リンクです。

その相互リンク作業をプログラムで、できるだけ自動化したいと思って、プログラムを作成しています。

そのために必要な処理の一つに、問合せフォームなどでPOST送信することがあります。

GETを使っていれば簡単なのですが、POST送信の場合、どうすればいいのか分からなくて調べてみるとurllibを使えばできるということが分かりました。

以下のサンプルは、このページの登録フォームに自動でPOST送信できるものです。

ちなみにこれは弊社のサイトです。

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import urllib

def main():
    # POST URL
    url = 'http://www.shikaku-king.com/mailmagazine/meigen_confirm.py'
    # POSTデータの格納
    postData = {
        'name':'資格太郎',
        'year':'2012',
        'month':'10',
        'date':'15',
        'mail1':'shikaku@king.com',
        'mail2':'shikaku@king.com'
    }
    # URLエンコード
    params = urllib.urlencode(postData)
    # リクエストして出力
    print urllib.urlopen(url, params).read()

if __name__ == '__main__':
    main()

マジでPython超便利。これをうまく応用すれば自動相互リンク獲得プログラムができそう。

2012-03-05

Djangoで404を返してrobots.txtをうまく制御する方法

グーグルなどの検索エンジンの検索結果に自分のサイトを表示させたくない場合、robots.txtを設置してインデックスさせないようにします。

Djangoで作ったサイトの場合、このrobots.txtをうまく処理しないと、サイト内のページがうまくインデックスされない可能性があります。

検索結果に表示させたくない場合には、特にrobots.txtを設置する必要はありません。グーグルはrobots.txtが存在しないと(404)検索結果に表示してよいものとして、ページをインデックスします。

フレームワークなどを使わない通常のサイトの場合、robots.txtなんて知らなくて放置していたとすれば、404を返しますので、グーグルはインデックスを開始します。

しかし、Djangoを使ってサイトを運営している場合、robots.txtの処理をしないとurlのパターンにマッチしませんので、500エラーを返します。

グーグルは、404エラーの場合には、うまく処理してくれるのですが、500エラーの場合、処理がうまくいかない場合があり、サイト内のページが全くインデックスされない状態になる事があります。

私のサイトは実際にインデックスされませんでした。

ということで、Djangoでサイトを作った場合には、robots.txtの処理をきちんとしましょう。具体的には、robots.txtにマッチするようにして404を返すようにすればいいだけです。

urls.pyに以下のようき記述します。

    (r'^robots.txt$', robots), # robotsの部分の名前は何でもOK.

そして、以下のような関数を記述して404を返します。

from django.http import HttpResponseNotFound
def robots(request):
    return HttpResponseNotFound('<html><head><title>404</title></head><body><h1>Page not found</h1></body></html>')


wgetで確認すると、404が返されているのが確認できます。



以上でうまくインデックスされるようになります。私の場合翌日にはインデックスされ始めました。

SEOに取り組んでいる人は絶対にしなければならない事だと思います。

2012-03-03

クロスサイトスクリプティング攻撃の実験

セキュリティの勉強を始めたので、クロスサイトスクリプティング(XSS)攻撃を実際に自分のローカル環境でやってみた。

ChromeとSafariでやってみたけど、なぜかうまくいかない。ソースを見るときちんとスクリプトコードが正しく表示されているので間違いなくできているはずなんだけど、スクリプトが実行されない。

もしかしてと思って、ウィンドウズの電源を入れてIEでやってみた。すると、攻撃成功。もしかすると、ChromeとSafariには単純なXSSを回避する仕組みが組み込まれているのかもしれない。

ついでに、Fire Foxでやってみると攻撃成功。

ググってみてもはっきりとした情報が出てこなかっし確証はないけど、ChromeとSafariには、クロスサイトスクリプティングを回避する仕組みがデフォルトで備わっているんだと思う。

ちなみに、参考にしている本は「PHPサイバーテロの技法―攻撃と防御の実際」です。


PHPってタイトルがついてるけど、別にPHPにそれほど関係なくセキュリティや実際のクラッキング手法について学ぶことができます。

自分はサンプルコードの必要な部分だけPythonで書き換えていろいろやってるけど、全く問題ありません。

ハッカー(クラッカー)に興味がある人で、ちょっとしたスクリプトが書ける人におすすめです。

2012-03-01

レンタルサーバーの選び方

ウェブサイトを作る時に、今まではHTMLとCSSなどの静的ファイルばかりのサイトしか作ってなかったから、レンタルサーバー選びにそれほど困ることはなかった。

でも、2〜3年前からPerlの勉強を初め、CとObjective-Cも少しかじり、今ではPythonを使うようになった。

フレームワークのDjangoも使うようになって、専用サーバーが必要になったので、レンタルサーバーをいろいろ調べる必要性が出てきた。

同じようにレンタルサーバー選びに困っている人がけっこういるのではと思って、自分の知識を元にレンタルサーバーの選び方っていうサイトを作ってみた。

共用サーバーとVPSサーバーの違いとかあやふやだった部分が調べているうちにクリアになってきたので、人に教えようとする事は自分の成長にとって極めて効果的だと改めて実感しました。

今回のサイトは、できるだけ分かりやすく役に立つサイトに育てていきたいと思います。

MacBook Pro で64bitか32bitのどちらで動いているのかを確認

Mac OS X LionにMySQLをインストールしようと思ったら、いろんなバージョンがありすぎてどれをダウンロードしていいのか分からなかった。

そもそも、自分のMacBook Proが64bitなのか32bitなのかも分からない。ということで調べてみると、調べ方が分かった。

ターミナルで以下のコマンドを入力。

uname -a

表示された情報に64という数字があれば64bitだということ。

それが分かれば、DMG Archiveって書いてあるやつをダウンロードすればOK.