ようこそゲストさん

CPA-LABテクニカル

2008/02/09(土) CakePHP1.2のEmailComponentのデフォルトcharsetとEncoding:7bit

CakePHP1.2bのEmailコンポーネントを眺めていると、
デフォルトのcharset=UTF-8、つまり
Content-Type: text/html: charset=UTF-8
なのに、
Content-Transfer-Encoding:7bit
であることに気づいた。


これっていいのでしょうか?
あまりemailの仕様に詳しくない者がいうのも何ですが、UTF-8の場合は、8bitにするか、base64でエンコードして、base64指定にしなければならないような気がします。誰か詳しい人いませんかね。


しかも、charsetは、設定で変更できるのですが、Content-Transfer-Encodingは、変更できません。


ということは、charsetは、7bit形式のものでなければならず、日本語を通すなら、ISO-2022-JP(JIS)でなければならないはず。
なので、私は、ISO-2022-JPに指定しています。。。。
(呼び出し側で、mb_convert_encodingでJISに変換している。)


で、もひとついえば、本文のエンコードと、ヘッダーのエンコードは、それぞれ別に設定されてもいいように思うのですが、$this->charsetひとつだけの設定なので、ヘッダーと本文のエンコードを別にすることができません。


CakePHP version 1.2.0.6311 betaのお話です。なんか、このコンポーネントはこれからもっと手が入るような気がする。

名前:  非公開コメント   

  • TB-URL  http://www.cpa-lab.com/tech/065/tb/

2008/02/09(土) AuthComponentのパスワード暗号化。登録注意点。CakePHP1.2b

CakePHP1.2bのAuthコンポーネントは、なるほど便利なのだけれど、一番最初に自分のパスワードをデータベースに設定するところでつまずいたので覚書。


まず結論。
Authコンポーネント準備段階ではコンポーネントを読み込むと何かと設定が必要になってしまうので、まずは、以下で、管理者用パスワードを算出して、自力でデータベースのテーブルに登録する。
App::import('Component', 'Auth');
echo AuthComponent::password( 'パスワード' );

上記の結論に至った理由など


passwordの算出の仕方*1
DB格納値 =  sha1( sha1( 'Security.saltの値') . ' パスワード ' );

AuthComponentは、インストール時に設定した*2Security.saltの値、すなわち
  • /cake/app/configure/core.phpの
Configure::write( ' Security.salt ', ' てきとうな値 ');
を使って、暗号化のキーとしている。
このsalt*3を暗号化した上で、入力されたパスワードを文字列で連結し、それをSHA1でさらにハッシュ化している。
なので、開発時や一番最初にスーパーユーザーを登録する時には、パスワードを上記の式で求めて、手動で設定しておかなければならない。


また、AuthConponent自体には、ユーザー登録の機能はないので(たぶん)、自分で実装するしかないが、その際には上記算出を使わず、Authコンポーネントのメンバ関数を使ったほうが、今後のためにはよいと思われる。(もちろん、最初のユーザーを手動登録する際も、一番最初の式を使わなくても、AuthComponentを読み込んでおいて、以下の式で求めればよい)

DB格納値 = $this->Auth->password( ' パスワードテキスト ' );
(var $useComponents=array( 'Auth' ) は必要かな。)

もちろん、運用後にSecurity.saltを変更してしまうと、全員のパスワード再登録、という恐ろしい事態が待っているので、必ずインストール時に適切なSecurity.saltを設定しておくことが必要。


ちなみに私のSecurity.saltは自分の好きな詞をハッシュ化したものを使っています。


CakePHP version 1.2.0.6311 beta

*1 : 後述の方法でもよい

*2 : デフォルトのままは好ましくないので、自分の好きな値に変えましょう

*3 : なるほど、だからsalt(塩)というネーミングなのね

1: いけみん 2012年02月12日(日) 午後7時11分

cakephpのハッシュ方法がわからずハマっていたので、大変参考になりました。ありがとうございます。


名前:  非公開コメント   

  • TB-URL  http://www.cpa-lab.com/tech/064/tb/
  • AuthComponentの使い方 CPA-LABテクニカル spok
    基本的な使い方:CakePHP1.2 AuthComponentで会員登録サイトを作る [1]Authコンポーネントとは会員制サイトや管理人用として、認証を利用したいときに使用する特徴パスワードはハッシュにて不可逆暗号化される。CakePHPの暗号化ハッシ...
  • [CakePHP]AuthComponentのパスワード暗号化を無効にする方法 Writing Some Code
    1.2系で追加されたAuthComponentは、認証関連の処理を一手に担ってくれる強力なコンポーネントですが、 AuthComponentのパスワード暗号化。登録注意点。CakePHP1.2b - CPA-LABテクニカル 【CakePHP】AuthC...

2008/02/09(土) CakePHPの暗号化ハッシュデフォルトは、SAH1

CakePHPには、Security::hash()なる関数があり、CakePHP内部で認証時のパスワードの暗号化時のハッシュ関数を定めている。SHA1,SHA256,MD5が使えるようになっている*1。使い方は、以下の通り。
デフォルトはSHA1なので、初期設定時など、間違ってMD5でパスワード設定などすると認証されないので注意。
暗号化されたワード = Security::hash( $password , $type );
CakePHP version 1.2.0.6311 beta


$password:暗号化したいテキスト

$type暗号化の方法
省略又はnull,又はsha1SHA1
sha256SHA256
md5MD5
$typeを設定する場合は、必ず小文字にて。
sha256を指定した場合、PHPにて、mhash関数が使える状態でない場合は、MD5にて暗号化されるので、環境を移行する場合や、開発→運用へと変更する場合に注意をしないと、ローカルで設定したパスワードで認証されない事態が生じるので注意。


CakePHPの内部では、Typeは省略して、Security::hash($password);と呼ばれることが多いようである。


/cake/lib/security.php

*1 : 別にPHP単独の関数でもいいような気がするが


名前:  非公開コメント   

  • TB-URL  http://www.cpa-lab.com/tech/063/tb/
  • AuthComponentの使い方 CPA-LABテクニカル spok
    基本的な使い方:CakePHP1.2 AuthComponentで会員登録サイトを作る [1]Authコンポーネントとは会員制サイトや管理人用として、認証を利用したいときに使用する特徴パスワードはハッシュにて不可逆暗号化される。CakePHPの暗号化ハッシ...