なんか最近「パスワード、いくつかの単語を組み合わせた長い文字列のほうが安全だよねぇ」的なお話が云々。 それを考えた時、今まで割と気にならなかった「警告 PASSWORD_BCRYPT をアルゴリズムに指定すると、 password が最大 72 文字までに切り詰められます。」が、途端に気になりだしてきたり。 ふと考える2つのコード、果たしてどっちがベターなのだろう? 或いは、変わらんかなぁ? 一応おいちゃんの中にはイメージがあるんだけど、ふと、問いかけてみたいように思ったので、書いてみる。 どうも、どっちも危ないっぽい。後述を参照のこと。 コード1(アウト) $pass = パスワード; if (72 < strlen($pass)) { $pass = hash('sha512', $pass, true); } $h = password_hash($pass, PASSWORD_DE
(Last Updated On: 2021年5月10日)インジェクション攻撃、とは言ってもそのインジェクション対象によって影響が異なります。インジェクション攻撃の対象によって2種類、コードとデータ、に分類できます。Webシステムの場合、リクエストのインジェクションを別のインジェクション攻撃と考えた方が解りやすいので、大まかに分類して3種類に分類できます。 インジェクション脆弱性は絶対に避けなければならない脆弱性である、と認識されていると思います。しかし、3種類あるインジェクション攻撃のうちデータのインジェクションに対するリスク認識が極端に甘いように感じています。 ※1 Webシステムを前提としていますが、大抵のシステムは「コード」と「データ」のインジェクションを考慮すれば十分である場合が多いです。 ※2 そもそもコードを実行する機能そのものに”コード”を実行させるのは”正当な機能”です。
文字列にヌルバイトが含まれていても正しく(=文字列の終端とはせず)扱ってくれる関数を指す。逆に非バイナリセーフな関数はヌルバイトを終端だと見なしちゃうので、以降のデータを正しく扱えない。 ヌルバイト攻撃 if ( binary_unsafe(x) ) { binary_safe(x); } って言うコードがあってxにヌルバイトが "hoge\0danger" こんな感じで入ってると、binary_unsafeのチェックをすり抜けて、binary_safeで実行されちゃう可能性があるよ、という話。 非バイナリーセーフ関数 PHPだと バイナリセーフではない関数の一部 ereg_replace(), eregi(), eregi_replace(), split(), spliti(), include(), include_once(), require(), require_once()
履歴 愛知高等学校 東海大学文学部北欧文学科 東北大学大学院経済学研究科(中途退学) 個人サイト »Hiroshi Sawai »Info Town ご質問などありましたら下記アドレス宛へメールをお送りください。 info@findxfine.com WordPress テーマ、プラグインを公式テーマディレクトリ、公式プラグインディレクトリで公開しています。 テーマ WordPress › Theme Directory › kanagata プラグイン Category Archives « WordPress Plugins List Calendar « WordPress Plugins Min Calendar « WordPress Plugins Resize Editor « WordPress Plugins concrete5 Infotown Table 簡単な操作で
PHPの本を読んでいたらバイナリセーフって単語が出てきてバイナリセーフなんだよ!? っとなりました。 よくわからないので自分なりに調べてみました。 バイナリセーフな関数 バイナリデータを正しく扱うことができる関数 バイナリセーフでない関数 バイナリデータを正しく扱うことができない関数 そもそもバイナリデータとは? コンピュータが扱えるよう2進法に則って0と1の羅列(ビット列)として表現されたデータうち、テキスト(文字)形式ではない任意のデータ形式のこと。 ※http://e-words.jp/w/%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA.html より引用 結局、気をつけることは何? バイナリセーフでない関数を使用するとNULLバイト攻撃にあう Nullバイト攻撃とは? nullバイト(「\0」、「\x00」などの終端文字とされている文字列)を含めることでセ
考えてみるとほとんどパスワードを保存するコードを書いたことがない。現状のベストプラクティスを知らなかったのでメモ書き。 現状では bcrypt 使うのがいいみたい。b は Blowfish の b。 Modular Crypt Format というフォーマットとコンパチの出力をする。crypt (3) はもともと DES の短いフォーマットだが、弱すぎたため md5 拡張なりSHA512 拡張などが存在している。(htpasswd でも使われているので見たことある人は多いだろう) これの Blowflish を使ったものが bcrypt で、prefix に $2$, $2a$, $2x$, $2y$ $2b$ がついている。prefix の違いはバージョンの違いであり、現在は 2b を使うのが良い。ストレッチング回数も出力に含まれるので、あるとき急にストレッチング回数を増やしても特に問題
(Last Updated On: 2019年2月25日)password_hash関数はcrypt関数のラッパーです。パスワードを簡単かつ安全にハッシュ化するための関数です。現在のPHPマニュアルにはpassword_hash関数の重要な制限が未記載であったため追加しました。 password_hash関数はcrypt関数のラッパー password_hash関数は string password_hash ( string $password , integer $algo [, array $options ] ) の書式を持ち、$algoにはDEFAULTまたはPASSWORD_BCRYPTが指定できます。現時点ではPASSWORD_BCRYPTしか指定できないのでどちらを指定しても同じです。DEFAULTを利用することにより、将来より強固なハッシュ関数が追加された場合に自動的な更
宅ふぁいる便から平文パスワードが漏洩した件を受けて、あらためてパスワードの安全な保存方法が関心を集めています。現在のパスワード保存のベストプラクティスは、パスワード保存に特化したハッシュ関数(ソルトやストレッチングも用いる)であるbcryptやArgon2などを用いることです。PHPの場合は、PHP5.5以降で使用できるpassword_hash関数が非常に便利ですし、他の言語やアプリケーションフレームワークでも、それぞれ用意されているパスワード保護の機能を使うことはパスワード保護の第一選択肢となります。 なかでもbcryptは、PHPのpassword_hash関数のデフォルトアルゴリズムである他、他の言語でも安全なハッシュ保存機能として広く利用されていますが、パスワードが最大72文字で切り詰められるという実装上の特性があり、その点が気になる人もいるようです(この制限はDoS脆弱性回避が
PHP 7.2の新機能について取り上げ、3つの観点から詳細に解説します。クラスメソッドの型宣言の省略が可能となり、スクリプト内のクラスに段階的に型宣言を追加し更新することが可能となりました。またpassword_hash関数がArgon2に進化し、より柔軟にハッシュ関数の生成が可能となりました。さらに、暗号ライブラリLibsodiumがPHPコアに標準的に組み込まれ、暗号APIが標準サポートされることでPHPが更に使いやすく実用的な言語に進化します。 PHP 7.2の新機能: クラスメソッドの型宣言の省略 11月9日にリリース候補版(Release Candidate, RC)であるPHP 7.2.0 RC6が公開されました。特に大きな問題が見つからない限り、このRC6版が最後のRCとなり、予定通り11月30日にPHP 7.2.0が正式公開される予定です。以下、前号に引き続きPHP 7.2
この記事の出典や参考文献は、一次資料や記事主題の関係者による情報源に頼っています。信頼できる第三者情報源とされる出典の追加が求められています。 出典検索?: "Argon2" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2016年1月) Argon2[読み疑問点]は、2015年7月に開催されたパスワードハッシュ競技会(英語版)で優勝した鍵導出関数である[1][2]。ルクセンブルク大学のアレックス・ビリュコフ(英語版)、ダニエル・ディヌ、ディミトリー・コブラトビッヒによって設計された[3]。 概要[編集] Argon2はクリエイティブ・コモンズのCC0の下で公開されている。公開されたものには三つのバージョンがある。 Argon2dはGPUによる攻撃に強い耐性がある。 Argon2iはサイドチャネル攻
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
そして、実際にハッシュを行うハッシュアルゴリズムとして有名なのは、MD5やSHA-1, SHA-256, SHA-512が挙げられます。 ただ、MD5やSHA-1はすでにハッシュの衝突が発見されており、使用は推奨されません。 上に挙げたハッシュアルゴリズムの他にbcryptというパスワードハッシュアルゴリズムがあります。 やっと本題ですが、この記事ではそのbcryptについて解説したいと思います。 bcryptはBlowfish暗号を利用したパスワードハッシュアルゴリズムです。 ただ単にハッシュ化するだけでなく、ソルトの付与とストレッチングを行うことで、より強固なハッシュ値を求められるようになっています。 1999年に発表され、OpenBSDのデフォルトのパスワードハッシュアルゴリズムとして採用されています。また、その他のLinuxディストリビューションにもライブラリが含まれています。 b
こんにちは、バックエンドエンジニアの Kaz です。 今回はアプリケーション開発における「ユーザーパスワードの保存」に着目し、いかにして安全にユーザーのパスワードを保存するかを考えていきます。 パスワード保存における安全性の確保 ユーザーパスワードの実情 まずはじめに、そもそもなぜパスワードを安全に保管しておく必要があるのでしょうか。 ユーザーのパスワードが漏れると、攻撃者がユーザーになりすましてログインできるようになるほか、ユーザーは銀行からショッピングサイトまで、さまざまなサービスで パスワードを使いまわしている のです。 たとえば Keeper 社が実施したアンケート調査 では、18 〜 30 歳の 87% がパスワードを再利用している という結果がでています。 これが意味するところは、万が一あなたのサービスからパスワードが漏れてしまうと、その影響はあなたのサービスに留まらず、そのユ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く