TOP書籍連動> メッセージダイジェスト関数を利用するサンプル
まるごと PostgreSQL!
商用データベースに匹敵するWebシステム構築手法

第10回:メッセージダイジェスト関数の実装

著者:大垣靖男(OHGAKI, Yasuo)   2005/5/23
前のページ  1  2
メッセージダイジェスト関数を利用するサンプル

   リスト14のsample.phpスクリプトは、digest.phpのサンプルプログラムです。保護された変数の値が改ざん不可能であること、保護されていない変数は自由に変更可能であることが確認できます。
リスト14:digest.phpのサンプルプログラム
<?php
// sample.php

require_once 'digest.php';

$msg = 'v1、v2、v3の値は保護されています。v4、v5は変更できます。';
$values_protected = array('textfield1','textfield2','textfield3');

if (isset($_REQUEST['set'])) {
$_REQUEST = init_hash($_REQUEST, $values_protected);
}
elseif (isset($_REQUEST['check'])) {
if (check_hash($_REQUEST, $values_protected)) {
$msg = 'Values are OK<br>';
}
else {
$msg = '<b>WARNING: v1、v2またはv3の値が改ざんされました</b><br>';
}
}
else {
$_REQUEST[HASH_NAME] = 'v1、v2、v3に値を入力してください。';
}

?>

<html>
<head>
<title>protect server defined values</title>
</head>

<body>
<p>v1からv5フィールドに値を入力してsetボタンを押して初期値を設定してください。<br>
その後checkボタンを押してURLに記載されているv1、v2、v3の値の改ざんが検知されることを確認してください。
</p>
<p>
<?php echo $msg; ?>
</p>
<form method="post" name="test" action="sample.php" >
<p>v1 <input type="text" name="textfield1" value="<?php
@print($_REQUEST['textfield1']); ?>"> 保護されています。<br>
v2 <input type="text" name="textfield2" value="<?php
@print($_REQUEST['textfield2']); ?>"> 保護されています。<br>
v3 <input type="text" name="textfield3" value="<?php
@print($_REQUEST['textfield3']); ?>"> 保護されています。<br>
v4 <input type="text" name="textfield4" value="<?php
@print($_REQUEST['textfield4']); ?>"><br>
v5 <input type="text" name="textfield5" value="<?php
@print($_REQUEST['textfield5']); ?>">
</p>
<p>
<input type="submit" name="set" value="set">
<input type="submit" name="check" value="check">
</p>
<p> digest value
<input type="text" size="32" name="<?php echo HASH_NAME; ?>" value="<?php print($_REQUEST[HASH_NAME]); ?>">
</p>
</form>
</body>
</html>
高性能なWebシステム構築に向けて

   本稿では、PostgreSQLに固有の内容のみならず、大規模なWebシステムを構築するために一般的に注意すべき点を紹介してきましたがいかがでしょうか。Webシステムでは、システムにかかる負荷を事前に想定するのが難しい場合が一般的です。素直にデータベースを活用したWebシステムを構築すると、データベースへのアクセス負荷が増大し、システム全体のパフォーマンスのボトルネックになる場合が多くあります。

   ここに紹介した比較的簡単な工夫で、データベースサーバーへの負荷を大幅に削減または分散を可能とすることをご理解いただけたかと思います。本稿が、システムの特徴にあわせたキャッシュ利用とスケールアウト可能なシステム設計の一助となり、PostgreSQLを利用した高性能なWebシステム構築の参考になれば幸いです。

前のページ  1  2


大垣 靖男
著者プロフィール
大垣靖男(OHGAKI, Yasuo)
University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て、エレクトロニック・サービス・イニシアチブ有限会社を設立。Linuxはバージョン0.9xの黎明期から利用してるが、オープンソースシステム開発やコミュニティへの参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトのPostgreSQLモジュールのメンテナ、日本PostgreSQLユーザ会の四国地域での活動等を担当している。


INDEX
第10回:メッセージダイジェスト関数の実装
  メッセージダイジェスト関数の実装
メッセージダイジェスト関数を利用するサンプル