タグ

セキュリティとPHPに関するjsstudyのブックマーク (17)

  • FIDO-U2F絡みのメモ1 -- むいり記

    jsstudy
    jsstudy 2019/03/31
    二段階認証セキュリティキー(U2F)対応の認証ページを作るための私的メモ。環境はCentOS7/Apache+OpenSSL/PHP ※U2Fの仕様でSSL認証(HTTPS接続)が必須。
  • password_hashをどうやって使おうか?(04/15修正) - がるの健忘録

    なんか最近「パスワード、いくつかの単語を組み合わせた長い文字列のほうが安全だよねぇ」的なお話が云々。 それを考えた時、今まで割と気にならなかった「警告 PASSWORD_BCRYPT をアルゴリズムに指定すると、 password が最大 72 文字までに切り詰められます。」が、途端に気になりだしてきたり。 ふと考える2つのコード、果たしてどっちがベターなのだろう? 或いは、変わらんかなぁ? 一応おいちゃんの中にはイメージがあるんだけど、ふと、問いかけてみたいように思ったので、書いてみる。 どうも、どっちも危ないっぽい。後述を参照のこと。 コード1(アウト) $pass = パスワード; if (72 < strlen($pass)) { $pass = hash('sha512', $pass, true); } $h = password_hash($pass, PASSWORD_DE

    password_hashをどうやって使おうか?(04/15修正) - がるの健忘録
    jsstudy
    jsstudy 2019/03/31
    「バイナリが駄目なら、base64にすればいいぢゃない」とか思うんだけど、sha512はbase64にしても88バイト使うから駄目なんだよねぇ。ってなわけで、おとなしく素直に「16進数表記のsha256」が落としどころかなぁ、と。
  • インジェクション攻撃は3種類ある

    (Last Updated On: 2021年5月10日)インジェクション攻撃、とは言ってもそのインジェクション対象によって影響が異なります。インジェクション攻撃の対象によって2種類、コードとデータ、に分類できます。Webシステムの場合、リクエストのインジェクションを別のインジェクション攻撃と考えた方が解りやすいので、大まかに分類して3種類に分類できます。 インジェクション脆弱性は絶対に避けなければならない脆弱性である、と認識されていると思います。しかし、3種類あるインジェクション攻撃のうちデータのインジェクションに対するリスク認識が極端に甘いように感じています。 ※1 Webシステムを前提としていますが、大抵のシステムは「コード」と「データ」のインジェクションを考慮すれば十分である場合が多いです。 ※2 そもそもコードを実行する機能そのものに”コード”を実行させるのは”正当な機能”です。

    インジェクション攻撃は3種類ある
    jsstudy
    jsstudy 2019/03/31
    C言語の文字列終端は”\0″(ヌル文字)です。しかし、バイナリセーフな文字列型の言語が多数存在します。ヌル文字インジェクションにより、言語とライブラリの文字列の評価を変え、予期しない結果となる攻撃
  • バイナリセーフ - kotaroito's notes

    文字列にヌルバイトが含まれていても正しく(=文字列の終端とはせず)扱ってくれる関数を指す。逆に非バイナリセーフな関数はヌルバイトを終端だと見なしちゃうので、以降のデータを正しく扱えない。 ヌルバイト攻撃 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()

    バイナリセーフ - kotaroito's notes
    jsstudy
    jsstudy 2019/03/31
    バイナリセーフ 文字列にヌルバイトが含まれていても正しく(=文字列の終端とはせず)扱ってくれる関数を指す。非バイナリセーフな関数はヌルバイトを終端だと見なしちゃうので、以降のデータを正しく扱えない。
  • セキュリティ : PHP | FindxFine

    履歴 愛知高等学校 東海大学文学部北欧文学科 東北大学大学院経済学研究科(中途退学) 個人サイト »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 | FindxFine
    jsstudy
    jsstudy 2019/03/31
    \x00や\0をヌルバイトと呼ぶ。PHPはヌルバイトを文字列の終端とみなさないバイナリセーフな関数と、文字列の終端とみなすバイナリセーフでない関数が存在する。ヌルバイト攻撃はバイナリーセーフでない関数により発生
  • バイナリセーフってなんだよ!? - Qiita

    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」などの終端文字とされている文字列)を含めることでセ

    バイナリセーフってなんだよ!? - Qiita
    jsstudy
    jsstudy 2019/03/31
    バイナリセーフな関数=バイナリデータを正しく扱うことができる関数 バイナリセーフでない関数を使用するとNULLバイト攻撃にあう=nullバイト(「\0」、「\x00」などの終端文字とされている文字列)を含めること
  • パスワード保存のベストプラクティスと bcrypt のメモ書き | tech - 氾濫原

    考えてみるとほとんどパスワードを保存するコードを書いたことがない。現状のベストプラクティスを知らなかったのでメモ書き。 現状では bcrypt 使うのがいいみたい。b は Blowfish の b。 Modular Crypt Format というフォーマットとコンパチの出力をする。crypt (3) はもともと DES の短いフォーマットだが、弱すぎたため md5 拡張なりSHA512 拡張などが存在している。(htpasswd でも使われているので見たことある人は多いだろう) これの Blowflish を使ったものが bcrypt で、prefix に $2$, $2a$, $2x$, $2y$ $2b$ がついている。prefix の違いはバージョンの違いであり、現在は 2b を使うのが良い。ストレッチング回数も出力に含まれるので、あるとき急にストレッチング回数を増やしても特に問題

    jsstudy
    jsstudy 2019/03/31
    備考: パスワード保存は必要か?OAuth などで外部サービスに認証を委託したほうがはるかに楽 → OAuthが単一障害点(single point of failure、SPOF)になる可能性も考慮しておく必要がある?
  • password_hash()の重要な制限

    (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を利用することにより、将来より強固なハッシュ関数が追加された場合に自動的な更

    password_hash()の重要な制限
  • bcryptの72文字制限をSHA-512ハッシュで回避する方式の注意点

    宅ふぁいる便から平文パスワードが漏洩した件を受けて、あらためてパスワードの安全な保存方法が関心を集めています。現在のパスワード保存のベストプラクティスは、パスワード保存に特化したハッシュ関数(ソルトやストレッチングも用いる)であるbcryptやArgon2などを用いることです。PHPの場合は、PHP5.5以降で使用できるpassword_hash関数が非常に便利ですし、他の言語やアプリケーションフレームワークでも、それぞれ用意されているパスワード保護の機能を使うことはパスワード保護の第一選択肢となります。 なかでもbcryptは、PHPのpassword_hash関数のデフォルトアルゴリズムである他、他の言語でも安全なハッシュ保存機能として広く利用されていますが、パスワードが最大72文字で切り詰められるという実装上の特性があり、その点が気になる人もいるようです(この制限はDoS脆弱性回避が

    bcryptの72文字制限をSHA-512ハッシュで回避する方式の注意点
    jsstudy
    jsstudy 2019/03/31
    PHPのbcrypt実装はバイナリセーフでない → SHA-512ハッシュ(バイナリ)中にNULLバイトがあると、そこから先を「切り詰め」してしまう。先頭がNULLバイトになる場合、crypt関数にはゼロ文字のパスワードが指定される
  • PHP業界の重鎮 廣川類氏のコラム第三回 次のPHPはどうなる? バージョン7.2でここが変わる - KUSANAGI Tech Column

    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

    PHP業界の重鎮 廣川類氏のコラム第三回 次のPHPはどうなる? バージョン7.2でここが変わる - KUSANAGI Tech Column
    jsstudy
    jsstudy 2019/03/31
    PHP 7.2では、ハッシュ値生成アルゴリズムとしてPassword Hashing Competition 2015の勝者であるArgon2が使用できるようになりました。パスワード用ハッシュ値生成関数では、ハッシュ生成にかかる計算コストをパラメータとして指定
  • Argon2 - Wikipedia

    この記事の出典や参考文献は、一次資料や記事主題の関係者による情報源に頼っています。信頼できる第三者情報源とされる出典の追加が求められています。 出典検索?: "Argon2" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2016年1月) Argon2[読み疑問点]は、2015年7月に開催されたパスワードハッシュ競技会(英語版)で優勝した鍵導出関数である[1][2]。ルクセンブルク大学のアレックス・ビリュコフ(英語版)、ダニエル・ディヌ、ディミトリー・コブラトビッヒによって設計された[3]。 概要[編集] Argon2はクリエイティブ・コモンズのCC0の下で公開されている。公開されたものには三つのバージョンがある。 Argon2dはGPUによる攻撃に強い耐性がある。 Argon2iはサイドチャネル攻

  • PHP: 定義済み定数 - Manual

    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

  • PHP: password_verify - Manual

    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

    PHP: password_verify - Manual
  • PHP: password_hash - Manual

    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

    PHP: password_hash - Manual
  • パスワードハッシュアルゴリズム bcrypt と Modular Crypt Format(MCF) - Qiita

    そして、実際にハッシュを行うハッシュアルゴリズムとして有名なのは、MD5やSHA-1, SHA-256, SHA-512が挙げられます。 ただ、MD5やSHA-1はすでにハッシュの衝突が発見されており、使用は推奨されません。 上に挙げたハッシュアルゴリズムの他にbcryptというパスワードハッシュアルゴリズムがあります。 やっと題ですが、この記事ではそのbcryptについて解説したいと思います。 bcryptはBlowfish暗号を利用したパスワードハッシュアルゴリズムです。 ただ単にハッシュ化するだけでなく、ソルトの付与とストレッチングを行うことで、より強固なハッシュ値を求められるようになっています。 1999年に発表され、OpenBSDのデフォルトのパスワードハッシュアルゴリズムとして採用されています。また、その他のLinuxディストリビューションにもライブラリが含まれています。 b

    パスワードハッシュアルゴリズム bcrypt と Modular Crypt Format(MCF) - Qiita
    jsstudy
    jsstudy 2019/03/31
    bcryptのバージョン
  • BCrypt(Blowfish暗号)について調べたので文書化してみました

    認証システムを作るときに頻繁に使用するBCryptですが、あまり中身をよく知らずに使っていたので調べてみました。備忘録も兼ねて学んだことを文書化しておこうと思います。 意外と日語の文献が少なく、苦手な英語を読みながら頑張ったので間違えている部分もあるかもしれません!変なところがあったらご指摘いただけますとうれしいです。

  • 【bcrypt】ユーザーパスワードを本当に安全に保存する方法 | 株式会社LIG(リグ)|DX支援・システム開発・Web制作

    こんにちは、バックエンドエンジニアの Kaz です。 今回はアプリケーション開発における「ユーザーパスワードの保存」に着目し、いかにして安全にユーザーのパスワードを保存するかを考えていきます。 パスワード保存における安全性の確保 ユーザーパスワードの実情 まずはじめに、そもそもなぜパスワードを安全に保管しておく必要があるのでしょうか。 ユーザーのパスワードが漏れると、攻撃者がユーザーになりすましてログインできるようになるほか、ユーザーは銀行からショッピングサイトまで、さまざまなサービスで パスワードを使いまわしている のです。 たとえば Keeper 社が実施したアンケート調査 では、18 〜 30 歳の 87% がパスワードを再利用している という結果がでています。 これが意味するところは、万が一あなたのサービスからパスワードが漏れてしまうと、その影響はあなたのサービスに留まらず、そのユ

    【bcrypt】ユーザーパスワードを本当に安全に保存する方法 | 株式会社LIG(リグ)|DX支援・システム開発・Web制作
    jsstudy
    jsstudy 2019/03/31
    bcryptは「blowfish」という暗号アルゴリズムを用いたパスワードハッシュ関数で、出力結果としてハッシュ値とsaltとストレッチング回数、ハッシュ関数のバージョンがセットになった値(Modular Crypt Format)を返してくれる関数
  • 1