January 2008 Archives

jQuery(1) : jQueryの基本を学ぼう

| | Comments (0) | TrackBacks (0)

jQueryの初心者がある程度jQueryを使いこなせるようになるまでを連載でお届けします。
第1回目はjQueryの基本について書きます。この記事を読めば簡単にテーブルにストライプをつけることができるようになります。

PerlでWebアプリをつくる際に困るのが、ブラウザ上の画面からはInternal Server Errorということしかわからないということです。
Webサーバのerror_logを見ればもうちょっと細かく何が起こったか把握することが可能ですが、やはり情報が少ないです。
そのようなときはログを出力することによって、たくさんの情報を取得することができるようになります。
ログ出力の重要なことは、出力するメソッドと出力する内容です。

ログ出力をするメソッドはファイルに出力するだけであれば以下のようになります。

sub log {
    my @str = @_;
    my $logfile = <ログファイルパス>;

    open LOG, "$logfile" || return 0;
    print LOG join '' @_;
    close LOG;

    return 1;
}
上記のメソッドでは、ただファイルに文字が出力されるだけなので使いやすくするには日時などを出力できるようにします。


オブジェクト指向で作っている場合はこのメソッドをたくさんのクラスに書く必要があるかもしれません。
そのような際はUNIVERSALメソッドにすることによって集約することができます。
UNIVERSALメソッドは任意のクラスに"UNIVERSAL::メソッド名"というようなメソッドを定義することによってどのクラスから呼ばれても呼び出すことが可能なメソッドを作成することができます。

しかし、UNIVERSALメソッドは別モジュールとのメソッド名の衝突や、どこのクラスから呼び出されているかわからなくなるデメリットがあるのでむやみに使うことはやめた方がいいでしょう。


次に出力される内容をわかりやすくするためにData::Dumperを使います。
Data::Dumperは配列やハッシュといったものも視覚的にわかりやすく表示することが可能です。
たとえば、配列のリファレンスの各要素にハッシュのリファレンスが格納されているデータは以下のように表示されます。


$VAR1 = [
          {
            'name' => 'foo',
            'age' => 30
          },
          {
            'name' => 'bar',
            'age' => 22
          }
        ];

このように見やすい形でログを出力できるようにしておくことでより効率的に開発を行うことが可能になります。
はじめまして、HDEラボの桜井と申します。
これからセキュリティについて、簡単ながら面白がってもらえるような記事を書いていこうと思います。

ところでみなさん、きっと毎日のようにパスワードを入力されているかと思います。
ちなみに、どのぐらいの文字数、または文字の種類があれば安全なのか、考えたことはありますか?
正直私も不思議に思っていたので、簡単なツールを作って確認してみました。
下記のテキスト欄にパスワードを入れて、「チェック」ボタンを押してみましょう。
もし、パスワードの総当たり攻撃を受けた場合、どのくらいの時間でパスワードが破られるのかを時間、日数、年数で表示します。
なお、この時間は1秒間に1,000,000,000回計算できるコンピュータ(1GIPSのパソコン)でクラックした場合です。


パスワード
クラックされる分数 =
クラックされる時間数 =
クラックされる日数 =
クラックされる年数 =


いかがでしたか?
思ったよりもあっけなく破られたり、意外と時間がかかったり、いろいろな結果が出たと思います。
(本調査は、HDEが非公式に、毎月20日頃に日経225登録銘柄のドメインに対し、SPFレコードが設定されているかどうかを独自調査し、主要企業の対応動向を毎月レポートするものです)
 NTTドコモが2007年11月1日からSPFによるなりすましメールの拒否機能を無料提供しはじめたことに呼応し、2007年末はSPF対応する企業が急増しましたが、年初は特に動きは見られず、1月の日経225登録銘柄のうち、SPFに対応企業数は昨年12月と同数となりました。対応企業にも入れ替え等はありませんでした。
 横ばいとなった理由としては、年末年始を挟んだためとも、各企業のNTTドコモ対応が一段落したためとも考えられ、現時点ではなんとも判断できません。来月も引き続き観察を続けます。

環境

  • OS : CentOS 5
  • Python : 2.4
  • 追加パッケージ : なし
  • 備考 : OS依存なし

Pythonの標準ライブラリだけでSMTPプロキシサーバーを作成することができるのでそのサンプルプログラムを掲載します。

  1 #!/usr/bin/env python
  2 # -*- coding: utf-8 -*-
  3 #
  4 # testsmptd.py - サンプル SMTP プロキシ
  5 #
  6 import asyncore
  7 import smtpd
  8 
  9 __all__ = ['TestSmtpd', 'TestSMTPChannel']
 10 __version__ = 'Test smtpd 1.0';
 11 
 12 class TestSmtpd(smtpd.PureProxy):
 13     """smtpd.PureProxyを継承する。
 14     基本的にはOverrideを行うことで機能の追加を実現できる。
 15     """
 16     
 17     def handle_accept(self):
 18         """Override
 19         """
 20         conn, addr = self.accept()
 21         print >> smtpd.DEBUGSTREAM, 'Incoming connection from %s' % repr(addr)
 22         channel = TestSMTPChannel(self, conn, addr) # 任意のオブジェクトで生成する。
 23 
 24 class TestSMTPChannel(smtpd.SMTPChannel):
 25     """一つの接続あたり1つのTestSMTPChannelインスタンスが生成される。
 26     """
 27 
 28     def smtp_TEST(self, arg):
 29         """テスト用のメソッド
 30         """
 31         self.push('Test print HOGE arg=%s' % arg)
 32         
 33 if __name__ == '__main__':
 34     """起動時に実行される処理です。
 35     TestSmtpdの説明 : TestSmtpd(('ルックアップするアドレス', ルックアップするポート番号)
 36                           ,('転送先アドレス', 転送先ポート番号))
 37     """
 38     test_smtpd = TestSmtpd(('0.0.0.0', 8025), ('localhost', 25))
 39     asyncore.loop()


サンプルを試してみる

1. 上記のプログラムをtestsmtpd.pyというファイル名で保存します。
2. 以下のコマンドでプログラムを実行します。(今回のプログラムは常駐型です

# python testsmtpd.py
3. 以下のコマンドを実行し動作を試してみてください。
# telnet localhost 8025
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 hoge.hde.co.jp Python SMTP proxy version 0.2
test
Test print HOGE arg=None
test hoge
Test print HOGE arg=hoge
helo localhost
250 hoge.hde.co.jp
mail from: root@localhost
250 Ok
rcpt to: root@localhost
250 Ok
data
354 End data with .
Subject: test

test

.
250 Ok
quit
221 Bye
Connection closed by foreign host.
4. メールがroot@localhostに届いているか確認してみましょ~。

参考URL :

Interfaceの新規サポートによる問題
PHP5より、Javaと同機能の interface がサポートされたことで、interface(case sensitive)が新たに予約語とされたため、既存コードで、
class Interface {

}
$if = new Interface;
などのように利用している場合は、文法エラーとなる。 その他、増えた予約語は、以下のコマンドでPHP定義済みクラスの一覧を出力して 確認することができます。

i18n系関数が削除されたことによる問題
PHP5でPHP3の遺物であるi18nへのエイリアスが、削除されたため。 以下の関数を使っている場合は注意!
requireで問題なかったところがrequire_onceじゃないとエラーになる

オブジェクトの代入の扱いが変わった
PHP4まではオブジェクトのコピーはディープコピーを行っていたが、PHP5ではデフォルトでシャローコピーで行われる。 オブジェクトをディープコピーするには、cloneを使う必要がある

RBLサーバー一覧

| | Comments (0) | TrackBacks (0)
いろいろなRBLサーバーを一覧にまとめました。 もう既に終了しているものがあるかもしれません。

About this Archive

This page is an archive of entries from January 2008 listed from newest to oldest.

February 2008 is the next archive.

Find recent content on the main index or look in the archives to find all content.