無知な自分の学びブログ -5ページ目

CakePHPでSNSをつくるコーディング日記(Cake1.3 #020)

今回やること(ログインフォームのセキュリティ)


1. パスワードのハッシュ化
2. 不正な入力値のチェック

パスワードのハッシュ化


DBにパスワードを入れる際にセキュリティを考えてハッシュ化する。
(ハッシュ化:非可逆の暗号化のことだと思う)

さらにセキュリティを考えて、「任意のキーワード+パスワード」を
sha1でハッシュ化したものをDBに保存するようにする。

ブログには定数の指定方法が書かれていますが、
CakePHP1.3では動かなかった。。。
config('app')がダメみたい。

んで、調べてみると以下の方法がいいみたい!
(これを参考にしました:CakePHPで独自定数を定義する
/app/config/bootstrap.phpに以下を追加。
<?php
config('const');
?>


次に/app/config/const.phpを作成し、定数を追加する
<?php
define('PWD_KEY','abcde');


以降はブログと同様、/app/controllers/users_controller.phpの
以下の部分を変更する。
//変更前
//if(!empty($someone['User']['pwd']) && $someone['User']['pwd'] == $this->data['User']['pwd'])

//変更後
if(!empty($someone['User']['pwd']) && $someone['User']['pwd'] == sha1(PWD_KEY.$this->data['User']['pwd']))


データベース内のパスワードは平文のままなので、
この平文をsha1でハッシュ化したものに修正。
+----+------------------------------------------+
| id | pwd |
+----+------------------------------------------+
| 1 | e1ad1bc1b9e6cf491a54db3b2291bb85a811012d |
| 2 | 9652fda44b24564558bef08a873c2d4f922fe168 |
+----+------------------------------------------+


これでログインできたので、OK☆☆

不正な入力値のチェック


これについては、今のログイン処理に置いて
findByEmailを使っているので問題ないらしい。

ってことで今回は終了!!

CakePHPでSNSをつくるコーディング日記(Cake1.3 #019)

ログインエラー時の情報保持


ログインフォームで間違った情報を入れた場合に
値を保持していてほしい。

でもパスワードは消したい!

値の保持は自動でやってくれるらしい。

そしたらパスワードも保持されるけー
それを避けるためにコードを修正。

具体的には、オプション設定で'value'=>''って何も入れないように指定してやる。
/app/views/users/login.ctp
<tr>
<td width="40%" align="right">password</td>
<td><?php echo $form -> input('pwd', array('type' => 'password', 'size' => 20, 'value' => '', 'label' => false, 'div' => false)); ?></td>
</tr>

CakePHPでSNSをつくるコーディング日記(Cake1.3 #017-#018)

ログイン処理について


今後の機能実装について
1. セキュリティを高める(悪意あるコードの阻止、md5などを使って)
2. エラーになったときは、メアド情報を保持
3. 「情報を保存する」機能の実装
4. 「パスワードを忘れた場合」の処理
5. クリックしたURLを保持しておいて、ログイン後にそのページに行く処理

htmlspecialchars は h()


PHPでよく使うhtmlspecialchars は h()で行けるらしい。

そこで/app/views/users/home.ctpを修正。
これもままコピペでいけるっしょ!!
<div id="my_page" class="clear">
<h2><a href="/users/home/"><?= h($me['User']['name']); ?></a></h2>
<div id="contents">
<div id="menu" class="clear">
<ul>
<li><a href="/users/home">Home</a></li>
<li><a href="">Diary</a></li>
<li><a href="">Friends</a></li>
<li><a href="/users/edit/">Settings</a></li>
<li><a href="/users/logout/">Logout</a></li>
</ul>
</div><!-- /menu -->
<h3>My Profile</h3>
<div id="my_profile" class="clear">
<img src="100shiki.jpg" width="50" height="50" border="0" alt="" />
<p><?= h($me['User']['profile']); ?></p>
</div>
</div>
</div>