PHP 覚書

パスワード認証

http://www.symantec.com/business/support/index?page=content&id=TECH103176&locale=ja_jp#
— login.php ——
入力したPASSWORDと、定義パスワードを比較する。

<?php 
define("PASSWORD", "pass"); session_start(); //セッションスタート if(isset($_POST["action"])&&$_POST["action"]==="login"){ if(PASSWORD === $_POST["password"]){//パスワード確認 $_SESSION["TEST"] = md5(PASSWORD);//暗号化してセッションに保存 header("Location:admin.php"); //admin.phpを表示 }else{ session_destroy();//セッション破棄 message(); } } ?> <?php
function message(){ print "パスワードが違います"; } ?> <form action="" method="post"> <input name="password" type="text" value="pass" /><br /> <input name="action" type="submit" value="login" /> </form>

— admin.php ——
PASSWORDが認証され、セッションに保存されている値と同じであれば「success」を表示する。

<?php
define("PASSWORD", "pass"); 
session_start(); //セッションスタート if(isset($_SESSION["TEST"]) && $_SESSION["TEST"] != null &&        md5(PASSWORD) === $_SESSION["TEST"])       //セッションに保存されているパスワードと一致 { print "Login success"; }else{ session_destroy();//セッション破棄 print "Login false"; } ?>

ファイルの読み込み

$index = @file($index_file);//ファイルの全行を読み込み
for($i=0;$i<count($index);$i++){//各行のカンマ区切りのデータ
 	$info[$i]= explode(',',$index[$i]);//カンマで分割して、$infoの2重配列へ
}

フォーム入力データから、htmlタグを外す

$form_data = htmlspecialchars($_POST[“input_form”]);

データベースに関して

rootのパスワード変更

$> mysqladmin -u root password "newpwd"

$>mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');

Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client
のエラーが出た場合

mysql> set password for root@localhost = OLD_PASSWORD('newpwd');

データベースの作成

mysql> create database sample;
mysql> exit

一般ユーザの追加

データベースを操作するユーザ
ユーザ名:hoge パスワード:passwd

mysql> grant select,insert,delete,update,create,drop,file,
alter,index on *.* to hoge@localhost identified by '123456';
mysql> flush privileges;
mysql> exit

これでもOK

GRANT ALL ON *.* TO hoge@localhost IDENTIFIED BY '123456';

データベースへの接続

データベース sample 操作するユーザ名:test パスワード:passwd

//DB接続
$dbHandle = mysql_connect("127.0.0.1","test","passwd");
if ($dbHandle == False) {
 print ("can not connect dbn");
 exit;
} else {
 mysql_select_db("test",$dbHandle);
}

データベースのテーブルへデータの追加

sampleデータベースのsample_tableテーブルへID番目のデータを追加
//データ追加
$tuika = "insert into sample_table values(ID, '項目1', '項目2', '項目3')";
mysql_query($tuika);

LDAP認証

foo@hoge.com の DN を取得します。samaccountname は fooになる。

$ldaphost = 'hoge.com';
$ldapport = 389;
$user_dn  = '...';
$username = 'username';
$password = 'password';
$samaccountname = 'foo';

$conn = ldap_connect(
     $ldaphost, 
     $ldapport);

ldap_set_option( $conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option( $conn, LDAP_OPT_REFERRALS, 0);

$bind = ldap_bind(
     $conn,
     $username, 
     $password 
);

$attrs = array( 'memberof' );

$result = ldap_search( 
     $conn,
     'DC=hoge,DC=com',
     "(samaccountname=$samaccountname)",
     $attrs
);

$info = ldap_get_entries( $conn, $result );
     
if( !$info['count'] ) {
     // ユーザー情報の取得に失敗
}

$user_dn = $info[0]['dn'];

グループオブジェクトの取得

ユーザー DN をメンバーに持つグループが存在するかどうかチェック

$base_dn = "CN=group1,OU=ou1,DC=hoge,DC=com";
$filter = "(&(objectCategory=group)(member=$user_dn))";
     
$result = ldap_search( $conn, $base_dn, $filter);
$info = ldap_get_entries($conn, $result);
          
if( !$info['count'] ) {
     // ユーザーはそのグループに所属していない
}
else {
     // ユーザーはそのグループに所属している
}