warning: Creating default object from empty value in /var/www/drupal-5.23/modules/taxonomy/taxonomy.module on line 1418.

PHP で、ダイジェスト認証(Digest Auth)をする HTTP クライアント

PHP で、ダイジェスト認証(RFC2617)付きのサイトにアクセスするにはどうしたらいいのだろう? まずは PHP で、Perl でいうところの LWP::UserAgent に相当するものはないのだろうか?と探していたところ、あった。CURL というのがそれで、libcurl パッケージをインストールしておく必要があるとのこと。私は、Fedora Core 6 を使っているのだが、Fedora Core 6 をインストールしたときに開発パッケージをなんでもかんでも入れておいたので特に何もする必要はなかった(苦笑)。 とにかくまずは CURL が PHP で動けば、あとはプロトコルとして HTTP、HTTPS(SSL/TLS)、FTP、Telnet、LDAP プロトコルでアクセスするクライアントを作れるようだ。
PHP で、ダイジェスト認証(RFC2617)付きのサイトにアクセスするにはどうしたらいいのだろう? まずは PHP で、Perl でいうところの LWP::UserAgent に相当するものはないのだろうか?と探していたところ、あった。CURL というのがそれで、libcurl パッケージをインストールしておく必要があるとのこと。私は、Fedora Core 6 を使っているのだが、Fedora Core 6 をインストールしたときに開発パッケージをなんでもかんでも入れておいたので特に何もする必要はなかった(苦笑)。 とにかくまずは CURL が PHP で動けば、あとはプロトコルとして HTTP、HTTPS(SSL/TLS)、FTP、Telnet、LDAP プロトコルでアクセスするクライアントを作れるようだ。

Perl で、BASIC 認証(基本認証)付きのサイトにアクセスするには?

LWP::UserAgent を使うのだが、以下のコードで太字の行がポイント。 使用するモジュール use LWP::UserAgent; コード
#!/usr/bin/perl

use LWP::UserAgent;

our $HOME_URL = 'ユーザー名とパスワード付きの URL';
our $USERNAME = '上記 URL にアクセスするためのユーザー名';
our $PASSWORD = '上記 URL にアクセスするためのパスワード';

$ua = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => $HOME_URL);
<strong>$req->authorization_basic($USERNAME, $PASSWORD);</strong>

print $ua->request($req)->as_string;

1;
LWP::UserAgent を使うのだが、以下のコードで太字の行がポイント。 使用するモジュール use LWP::UserAgent; コード
#!/usr/bin/perl

use LWP::UserAgent;

our $HOME_URL = 'ユーザー名とパスワード付きの URL';
our $USERNAME = '上記 URL にアクセスするためのユーザー名';
our $PASSWORD = '上記 URL にアクセスするためのパスワード';

$ua = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => $HOME_URL);
<strong>$req->authorization_basic($USERNAME, $PASSWORD);</strong>

print $ua->request($req)->as_string;

1;

C で、バイト列を画面に文字列で表示する方法

ここでは、作成したバイト列(バイナリ)のハッシュ値を表示する方法を考えてみよう。
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv) {

    unsigned char hash[SHA_DIGEST_LENGTH];
    unsigned char* b;
    unsigned char* s = "string string string";
    int i, dlen;

    dlen = strlen(s);

    if ((b = (unsigned char *)malloc(dlen)) == NULL) {
        return (-1);
    }

    memcpy(b, s, dlen);
    SHA1(b, dlen, hash);
printf("hash: ");
    <strong>for(i = 0; i < SHA_DIGEST_LENGTH; i++) {
printf("%02X", *(hash + i));
    }</strong>
printf("\n");
    free(b);
}
上の内容を hashtest.c とかいう名前で保存して、 gcc -lssl hashtest.c とコンパイルすればよい。コンパイルすると a.out というファイルができるから ./a.out [Enter キー] で実行してみよう。
ここでは、作成したバイト列(バイナリ)のハッシュ値を表示する方法を考えてみよう。
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv) {

    unsigned char hash[SHA_DIGEST_LENGTH];
    unsigned char* b;
    unsigned char* s = "string string string";
    int i, dlen;

    dlen = strlen(s);

    if ((b = (unsigned char *)malloc(dlen)) == NULL) {
        return (-1);
    }

    memcpy(b, s, dlen);
    SHA1(b, dlen, hash);
printf("hash: ");
    <strong>for(i = 0; i < SHA_DIGEST_LENGTH; i++) {
printf("%02X", *(hash + i));
    }</strong>
printf("\n");
    free(b);
}
上の内容を hashtest.c とかいう名前で保存して、 gcc -lssl hashtest.c とコンパイルすればよい。コンパイルすると a.out というファイルができるから ./a.out [Enter キー] で実行してみよう。

ウェブサイト構築時のセキュリティのポイント

IPA(独立行政法人情報処理推進機構)の「安全なウェブサイトの作り方」というドキュメントは、なかなかまとまっていて、良い。すべてのウェブアプリ開発者は目を通しておくべきだ。ここではこのドキュメントから注意点をピックアップしてまとめてみた。
  1. SQL インジェクション
  2. OS コマンド・インジェクション
  3. パス名パラメータの未チェック/ディレクトリ・トラバーサル
  4. セッション・ハイジャック
  5. クロスサイト・スクリプティング
  6. クロスサイト・リクエスト・フォージェリ (CSRF)
  7. HTTP ヘッダ・インジェクション
  8. メールの第三者中継
IPA(独立行政法人情報処理推進機構)の「安全なウェブサイトの作り方」というドキュメントは、なかなかまとまっていて、良い。すべてのウェブアプリ開発者は目を通しておくべきだ。ここではこのドキュメントから注意点をピックアップしてまとめてみた。
  1. SQL インジェクション
  2. OS コマンド・インジェクション
  3. パス名パラメータの未チェック/ディレクトリ・トラバーサル
  4. セッション・ハイジャック
  5. クロスサイト・スクリプティング
  6. クロスサイト・リクエスト・フォージェリ (CSRF)
  7. HTTP ヘッダ・インジェクション
  8. メールの第三者中継