PHPのpassword_hash(),password_verify()を使った場合に別の言語などに移行しても大丈夫?→大丈夫だった。

いつもよくCakePHPをフレームワークで使っていて、saltなどがなかったので、Laravelのフレームワークのパスワードハッシュ方法について調べてみました。(salt,seedとかいらない?と考え)

結果としては password_hash()で自動生成したものを利用していてsalt不要
→ほかの言語でも大丈夫 →ハッシュしたものに含まれるので大丈夫

でした、以下調べたこと。

ハッシュの方法

/vendor/laravel/framework/src/Illuminate/Contracts/Hashing/BcryptHasher.php

で、以下のようにハッシュしている

$hash = password_hash($value, PASSWORD_BCRYPT, [
    'cost' => $this->cost($options),
]);

$valueがパスワードで、PASSWORD_BCRYPT がアルゴリズム(BCrypt)、オプションの’cost’は、BCryptの元Blowfish暗号化に用いるCost、BcryptHasher.phpでデフォルト10(2の10乗回ストレッチ)に設定されている。

BCrypt

sha,md5などが高速化されているのに対し、計算量が多く時間がかる、オフラインでのGPUなどを使った、アタック時のレインボーテーブル生成などに時間がかかる。
またパスワードごとにsaltが違うので、その分レインボーテーブルを作るのに時間がかかる。

ハッシュ化されたパスワードについて

60文字になる。なにか有事に備えDBの桁数などは多めにしておくと良いかも。

$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

暗号化バージョン : 2y
コスト : 10
ソルト : ‘N9qo8uLOickgx2ZMRZoMye’ (コストの後22文字)
暗号本体 : IjZAgcfl7p92ldGxad68LJZdL17lhWy

で、別の言語に移したらどうなるか?

phpを通してbcryptのルールでハッシュしているので、
Laravel事態がロジックをもたないので、他の言語でも認証OK。

月額契約せずに、短髪でオンラインでFAXを送信する方法

アカウント作ったの忘れそうで、めも。

HELLOFAX
https://app.hellofax.com

アカウント作成し自動返信メールのURLをクリックして、パスワード設定。
そのあと受信(receive)できんから、有料はどう?って進めてくるけど。送信だけならダイジョブなので、無視して進めて送信できます。

アカウント作成

アカウント作成

FAX Noは国番号 81を先頭に + 元の先頭の0は抜いて入力する。

MacのPHP(Homebrew)をphp7.1からphp7.2に変更

以前にPHP7.1をMacにインストールしましたが、7.2にそろそろ変更をと。

MacのPHPをphp7へ変更(HomeBrewでPHP71のインストール)

インストール(CakePHP3でintl拡張使うので合わせてインストール)

$ brew install php72
$ brew install php72-intl

セラーの中見てみるとできている。

$ ls /usr/local/Cellar/ | grep 'php'
php71
php71-intl
php72
php72-intl

シェルの設定で、php71に通していたパスをphp72に変更


export PATH=“$(brew –prefix homebrew/php/php72)/bin:$PATH”
“`

バージョン確認

php -v
PHP 7.2.0RC6 (cli) (built: Nov  7 2017 19:46:49) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0-dev, Copyright (c) 1998-2017 Zend Technologies

intlの確認確認

$ php -info | grep intl
Additional .ini files parsed => /usr/local/etc/php/7.2/conf.d/ext-intl.ini
intl
intl.default_locale => no value => no value
intl.error_level => 0 => 0
intl.use_exceptions => 0 => 0

php71を削除(php71-intlも合わせて)

$ brew uninstall --force php71-intl
$ brew uninstall --force php71

Apple HomePodのページのPodが立ち上がる所の動きが面白い

Apple HomePodのページのPodが立ち上がる所の動きが面白い

Apple HomePodのページ(PC版)ですが、スクロールするとPodが立ち上がって来るところがおもしろい。

Apple HomePod
https://www.apple.com/homepod/

と中をのぞいてみたら。canvasタグがいっぱいでした。

Devツールでチェック

うーん、videoタグをスクロールに合わせてコマを進める( canvasにvideoを置いてから)とか考えていたのですが、ちがったベタでした。

こんどvideoでできるかためしてみたい。

nginxで2回に1回ほどNot found エラーがでるけど再読込するとでなくなる。

nginx,php-fpm,WordPress,qTranslateXプラグインの組み合わせで発生。
不思議だったのは、大丈夫な場合とNGな場合がありました。

ログ

/var/log/nginx/error.log

を見てみると。

index.php" is forbidden (13: Permission denied)

のようなPermissionエラーが連発している。
ファイル自体は 644のパーミッション、オーナーを試しに nginxの実行ユーザー/グループ(nginx.nginx)にしてもだめ、親フォルダを755にしたら解決。

Amazon Echo をリクエストしてみた。

今日のAmazonの記者発表会で、Amazon Echoのスキルの開発環境が日本語対応するらしく、開発用にリクエストしてみました。

まだ発表はありませんが、人気の高いスキルを開発した人に現金で報酬を支払うプログラムを実施している。ですので、なにか日本独自のスキルやローカライズした地方に関するすきる、沖縄なところだと観光に関するスキルでのらぐじゅありーなロングステイに対応とかいろいろなにかマネタイズを探ってみたい。

「Amazon Echo」の開発環境が日本語版「Alexa」に対応。スキルの開発が可能に
https://robotstart.info/2017/11/08/alexa-dev.html

Cakephp3で検索プラグイン(friendsofcake/search)を使ってみた。

GitHubで’cakephp search’で検索 Starの多い順に並べてCakePHP3でつかそうなものからピックアップしました。で以下を採用。

friendsofcake/search
https://github.com/FriendsOfCake/search

ドキュメントのルートに行ってcomposerでインストール

$ composer require friendsofcake/search

cakeコマンドでプラグイン追加

$ ./bin/cake plugin load Search

いちおう、config/bootstrap.phpの最後あたりを確認して準備OK

Plugin::load('Search');

モデル(Table)

initializeに addBehavior()と、検索条件を追加

    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->addBehavior('Search.Search');
        $this->searchManager()
            ->like('name',[
                'before' => true,
                'after' => true
            ]);

コントローラー

initializeで読み込みと使うアクション指定(ココではindex)

    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('Search.Prg', [
            'actions' => ['index']
        ]);
    }

モデルのfind()で ’search’ としてリクエストを渡してあげる。
containとかは普通につなげてOK

    public function index()
    {
        
        $query = $this->Products
            ->find('search',['search'=>$this->request->query])
            ->contain(['Suppliers', 'ProductStatuses', 'Components']);
        $this->set('products', $this->paginate($query));
    }

ビュー(検索フォーム)

<?php
echo $this->Form->create(null, ['valueSources' => 'query']);
echo $this->Form->input('name');
echo $this->Form->button('検索', ['type' => 'submit']);
echo $this->Form->end();
?>

検索の様子

検索の様子

詳しくは

friendsofcake/search
https://github.com/FriendsOfCake/search

PHPStormの環境設定を保存

FileめにゅーのExport Settingsから保存可能

settings20171014.jar

WordPressのデータベースを本番環境用にしたりシェルスクリプトで自動にしたい。

WordPressのデータベースを本番環境用にしたりシェルスクリプトで自動にしたい。

いつも開発環境から本番環境へのデータベースの移動が面倒なのでできるだけ自動化したい。
よくmysqldumpでバックアップをとっているのでついでに本番、ステージングも作ってしまいたい。
とか、面倒なこととか3回あることは自動化を徹底したい。 (環境Macです。)


バックアップをとりつつプレビュー環境用のSQLも書き出す。(backup.sh)

#/bin/sh
script_dir=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd)
filename=$script_dir"/_backup/backup-local."`date "+%Y%m%d_%H%M%S"`
db="データベース名"
from="localhost"
to="staging.example.com"
mysqldump -uroot -proot $db > $filename".sql";
mysqldump -uroot -proot $db | sed -e "s/$from/$to/g" > $filename"-preview.sql"
echo $filename

テーマディレクトリを開く(open.sh)

#! /bin/sh
script_dir=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd)
open $script_dir/html/app/wp/wp-content/themes/original

WordPress環境ごとにデータベース情報などを切り分ける

WordPress環境ごとにデータベース情報などを切り分ける

本体の機能としてありそうだけど、肥大化すると消えそうだし痒いところはコード・プラグイン書いてーなスタンスなのかな?

とりあえず wp-configにかいておく。

define('ENV_PRODUCTION','env_production');
define('ENV_STAGING','env_staging');
define('ENV_PREVIEW','env_preview');
define('ENV_LOCAL','env_local');

switch (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '') {
    case 'example.com':
        define('ENV',ENV_PRODUCTION);
        define('DB_NAME', 'xxx');
        define('DB_USER', 'xxx');
        define('DB_PASSWORD', 'xxx');
        define('DB_HOST', 'xxx');
        break;

    case 'staging.example.com':
        define('ENV',ENV_STAGING);
        define('DB_NAME', 'xxx');
        define('DB_USER', 'xxx');
        define('DB_PASSWORD', 'xxx');
        define('DB_HOST', 'xxx');
        break;

    case 'preview.example.com':
        define('ENV',ENV_STAGING);
        define('DB_NAME', 'xxx');
        define('DB_USER', 'xxx');
        define('DB_PASSWORD', 'xxx');
        define('DB_HOST', 'xxx');
        break;

    default:
        define('ENV',ENV_LOCAL);
        define('DB_NAME', 'example');
        define('DB_USER', 'root');
        define('DB_PASSWORD', 'root');
        define('DB_HOST', 'localhost');
        break;

}

Page 15 of 47

Powered by WordPress & Theme by Anders Norén