パスワードの暗号化・認証をPHPを通して学んだ(パクリまとめ)
tl;dr
認証はOpenIDとかソーシャルログイン使う。
だめならフレームワーク使う。
内容
契機
今日もPHPの講習を受けに行っていたが、ユーザー管理の実装で、
「今回はユーザー管理が主眼だから、パスワードについては簡単に実装するよ!
本ちゃんのシステムでは絶対にやらないでね!」
といった内容の記述があり、
このパスワードの認証について気になったので調べてみた。
しらべたこと
ちなみに使っていたテキストでは、sha1でハッシュ化したものをパスワードとしてMySQLにINSERTしていた。
(ハッシュ化とは、不可逆に文字やファイルを変換するもの。暗号化は復号ができるもの。)
sha1:文字、データを40桁の16進数にハッシュ化する。
同じものであれば、出力されるハッシュは同じになる。そのため、ファイルが正しいものであるかの判断に使われることもある。
ただ、下記の記事のように、GoogleがSHA1に勝った(超意訳)という話もあり、セキュリティ上心配だそうな。
で、PHPでは選択肢に出てくるのが、password_hash()関数。
これはハッシュ化する度に、違うハッシュが吐き出されるというもので、認証にはpassword_verify()という専用関数を用いるそうな。
でも、このpassword_hashについても、やはり限界はあるわけで。
結論、餅は餅屋
結局、100%の安全なんてものはないわけですが、極めて安全に近いのは、セキュリティを専門にしたものを使うという手段なわけです。
その手段としては、
- OpenIDやソーシャルログインを使う
認証についてはプロにやっていただき、我々はトークンのみ頂いてお仕事させていただきます。 - フレームワークを使う
クラウドを毛嫌いするような社長とかがいるような会社なら、自社実装にするしかありませんね。
公式の関数で足りないならフレームワーク。これも専用のものを使うと安心ですね。
参照というか丸パクリ元
ナウいエンジニアについての記事(戸田奈津子訳)でもお世話になってます。
ZenHub使って一人アジャイル()推進
説明
2018年も終わり、勤め先のコーディング研修が大体終わった。
2019年からはphpの研修が始まるので、何かしら作業環境の改善を図りたい。
で、こんなの見っけた qiita.com
ほう、チーム開発意識とな。
そういやZenHubなんてものも入れてたから活用したいな
そうだ、ZenHubで一人アジャイル()、しよう。
ということで以下に現状やりたいことをはっつけていく。
やりたいこと
まずZenHubを使うにあたって、どうなっているか構造を整理する。上から順に含有関係。
※ZenHub特有のものには[ZenHub]
- Workspace [ZenHub]
リポジトリをまたぐような大枠 - Repository
リポジトリ。プロジェクトごと作成。 - Epic [ZenHub]
大きい単位でIssueまとめるやつ - Issue
みんな色々投げるやつ- TaskのList
IssueのDetailsの中にでもチェックボックスいれる?
- TaskのList
参考:
qiita.com
その他参照・未分類
Win10にNode.jsを使うまでの最高に雑なハウツー(自分用)
TL; DR
このページでは以下のことを行った記録があります。
当方の環境です。
- 弊社マシン:Windows10
- 小生の家:MacBook
契機
Web制作をやるにあたり、ナウでヤングな開発環境を少しでも導入してコーディングの負担を減らしていきたい。
ので、やれSass(SCSS)だの、やれPugだのと入れたいものは見つかってきた。
コンパイルはIDEの拡張機能でやってもいいのだが、設定をSyncさせると、OS間で原因不明のささやかな干渉が起きて、少しずつ毎日時間を取られてしまう。
なので、タスクランナーかなんかでコンパイルする方法を取ることにする。
よし、Node.js入れよう。(やったこと)
あまり環境に依存しないように、Nodeを使ってみる。
というか、前から使ってみたかっただけ()
手順1. Windows10にLinuxいれる(WSL)
Node.jsを入れるにあたって、どこに入れるかだが、Nodejs.exeなんてものでインストールするのもアホくさい。
すると、どうもWindows10からPowerShellなんてものがあるという。
今までもCUIとしてコマンドプロンプトとかいうものがいたが、lsと打っても無視するような無礼者だったので拙者はあまりお関わりになりたくない。
ただ、どこを見てもPowerShellはちょっと...というものが多かったのでMSYS2なんか入れてみたが、しっくり来ない。
探していると、WindowsにLinuxを入れられるものがあるとか。
仮想ではなく、WSL(Windows Subsystem for Linux)というものを使ってLinux環境をエミュレートし、Windows上でLinuxが走る状態だとか。本当に軽い。
インストールは
↓こうやった
qiita.com
自 分 を 売 る
こうしてまずWinにLinux(Ubuntu)環境を手に入れた。
手順2. Node入れる
よく聞くところだとnvmだが、nというnodeのバージョン管理を導入した。
以下を参考にした。
qiita.com
この記事通りだとnpmのパスが通っていないので、最後のコメント通り、npmについても同様にパスを通すとnpmと打っても使えるようになる。
手順3. Nodeのパッケージインストール
やっとこさ使える。使い方は、最近使い始めたので、変な使い方してるかもしれない。
真に受けず適度に間引いて見ること。
Nodeでは基本的にnpmを使ってパッケージ管理するようす。
パッケージのインストール場所は、
- 作業しているフォルダ(ローカル)(プロジェクト?)
ex)npm i -D パッケージ名
package.jsonに記録する場合 - グローバル
ex)npm i -g パッケージ名
の2つ。
ローカルだと、例えばgulpを入れた場合、使う場合に./node_modules/gulp/bin/gulp
という場所を叩かないといけない(パスが通っていない)。
が、globalに入れると環境が汚れる。
↓以下によると、基本は-gしないで使うと良い様子。
qiita.com
これに沿って行くと、自分の.bashrcにでも入れておけば良さそう。
ただ、いろいろと環境をまたいで使うことが多いので、極力package.jsonでまとめたい...
そんなお客様ぁ?にこれ。
qiita.com
に ん じ ん し り し り
どうやらnpm2以降ならnpm run
とすれば、package.json内のScriptを実行してくれるし、その中ならPATHが通るとか。
あと、PATHは$(npm bin)でパスを出力できるそうなので、それも使いみちがあれば。
おわり。