タグ

hnwに関するshimookaのブックマーク (79)

  • セキュリティの話題に丸腰で踏み込んでくる人を見た - hnwの日記

    Qiita上で「ゲームでよくされるチート手法とその対策 〜アプリケーションハッキング編〜」という記事がいいね数を集めているようですが、全セクションにツッコミどころがあるような印象です。私はセキュリティ職というわけではありませんが、素人の私から見てもひどいと思ったところだけ個別にツッコミを入れてみます。 念のため補足しておくと、誰であろうと情報発信すること自体は大変良いことです。ただ、誤りを含んだ文章がウッカリ注目されてしまうとそれを信じてしまう人も出てくるので、大人げないと思いつつツッコミを入れる次第です。 デコンパイル(逆コンパイル) 2.の詳しい解説として、C/C++で記述されたコードをコンパイルすると機械語に変換されます。これを逆コンパイルしても、逆アセンブラまでにしかなりません。そのため、この状態ではソースコードの中身を解析するのは(人間では)非常に困難なため、ネイティブコードで

    セキュリティの話題に丸腰で踏み込んでくる人を見た - hnwの日記
  • macOSの$TMPDIR以下のファイルが部分的に削除された理由 - Qiita

    MacOSX El Capitan(10.11)で起きたトラブルです(2020-06-06追記: Mojave(10.14)でも状況は同じです)。 某OSSのtar ballを$TMPDIR以下に展開してビルドしていたのですが、なぜか展開後のファイルのうち一部のファイルだけ1日後に消える事件が発生しました。 消されるファイルのうちinstall-shはconfigureで必要なファイルなので、昨日作業したディレクトリで今日も./configureしようと思ったら次のようにエラーで怒られてしまいます。 $ ./configure checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for a sed that does

    macOSの$TMPDIR以下のファイルが部分的に削除された理由 - Qiita
  • ポートノッキングで10秒間だけsshdを公開する設定 - hnwの日記

    先日Twitterに次のような書き込みをしたところ思ったより反応が良かったので、詳細の設定を紹介します。 UDP53番、TCP443番、UDP123番とポートノッキングをするとTCP443番に10秒だけsshdが現れる、という中二病全開の設定をした。皆様にもお勧めしたい。— hnw (@hnw) 2017年3月26日 といっても特殊なことをしたわけではなく、knockdでポートノッキングの設定を行い、iptablesと組み合わせて実現しました。 ポートノッキングとは ポートノッキングというのは、決められたポートを決められた順番で叩くことでファイアーウォールに穴を空けられるような仕組みのことです。ポートノッキングを使えば、TCPの7000番、8000番、9000番の3ポートにパケットを送りつけると22番ポート (SSH) へのアクセスが許可される、といった設定ができます。 ポートノッキングの

    ポートノッキングで10秒間だけsshdを公開する設定 - hnwの日記
    shimooka
    shimooka 2017/03/29
    『基本的には「カッコいい」以外のメリットがない仕掛け』カッコいい
  • 第七回闇PHP勉強会でrealpathキャッシュとデプロイの話をしました - hnwの日記

    昨日12月11日に第七回闇PHP勉強会を開催いたしました。私を含め発表者6人ということで、とても盛り上がった勉強会になりました。発表者の皆さま、またご参加いただいた皆さま、当にありがとうございました。また会場提供いただいたピクシブ株式会社さまにも大変お世話になりました。 以下が私の発表資料です。 PHPアプリケーションをsymlink切り替えでデプロイしているとrealpathキャッシュ絡みで何かしらトラブルがありますよね、というくくりで複数のトピックを紹介するような内容でした。タイトルの通り、一番話したかったのはmod_phpphp-fpmとでOPcacheの挙動が変わる話だったんですが、かなり入り組んだ内容だったのでうまく伝わらなかったかもしれません。 質問タイムに、@edvakfさんから面白いエピソードを聞くことができました。Pixivではこの手の問題に一通りハマった結果、現在で

    第七回闇PHP勉強会でrealpathキャッシュとデプロイの話をしました - hnwの日記
  • PHPでは正規表現コンパイル結果のキャッシュが暗黙に行われている - hnwの日記

    筆者がPHPをさわり始めたころ、「PerlのコレはPHPではどうやるんだろう?」と思うことが頻繁にありました。一部の疑問については解説を見つけたり自分でソースコードを読んだりして解決したものの、考えるのをやめてしまったものもあります。その一つが正規表現コンパイル結果の保存に関するもので、最近まで完全に忘れていました。 正規表現のコンパイルというのは与えられた正規表現を解釈して実行しやすいデータ構造に変換する作業のことを指します。具体的にはDFA(決定性有限オートマトン)を構成するか、正規表現エンジン内部で用いられるVM命令列に変換するかといった処理になります。これらは複雑な処理ですので、性能の観点で言えば同じ正規表現に対するコンパイル処理はできるだけ繰り返したくありません。 Perlの場合、/foobar/ のようなスタティックな正規表現のコンパイルは1回しか行われません。一方で、正規表現

    PHPでは正規表現コンパイル結果のキャッシュが暗黙に行われている - hnwの日記
  • PHPプログラムを書いたらマイナス21億行目あたりでエラーが出た - hnwの日記

    (2016/10/5 20:40 追記)誤解を招いている部分がありそうなので文末に補足を追記しました。巨大なプログラムをわせただけでPHPが死ぬわけではありません。 毎度おなじみ、意図的に重箱の隅をつついてみたよって話です。あるPHPプログラムを実行したら次のようなエラーに遭遇しました。 $ php over-2g-lines.php int(0) PHP Fatal error: Uncaught Error: Call to undefined function var____dump() in /Users/hnw/over-2g-lines.php:2150000004 Stack trace: #0 {main} thrown in /Users/hnw/over-2g-lines.php on line -214496729221億5千万4行目で致命的エラーが発生したよ!とい

    PHPプログラムを書いたらマイナス21億行目あたりでエラーが出た - hnwの日記
    shimooka
    shimooka 2016/10/06
    タイトルに負けたww
  • PHP 7.1からデフォルトで有効になる「Zend Signals」とは何か - Qiita

    下記PHP Internals MLでの議論によれば、今後「Zend Signals」がデフォルトで有効になる予定です。少なくとも7.1.0beta2時点では有効になっており、特に問題が見つからなければこのままリリースされるはずです。 [PHP-DEV] Enable Zend Signals by Default で、Zend Signalsって何? 「Zend Signals」または「Zend Signal Handling」というのはZend Engineの内部的なシグナルハンドリングの仕組みです。PHP言語の世界に新たな関数を追加するようなものではありません。 この有効・無効はphpinfo()で確認することができます。 先ほど紹介したML上での議論によれば、ざっくり次のような話のようです(かなり端折ってます)。 Dmitry「Zend Signalsを有効にすればOPcacheの

    PHP 7.1からデフォルトで有効になる「Zend Signals」とは何か - Qiita
    shimooka
    shimooka 2016/08/10
    『全体的に謎が多め』
  • 第六回闇PHP勉強会の発表資料まとめ - hnwの日記

    昨日11/22(日)に第六回闇PHP勉強会が開催されました。PHPの勉強会なのにPHPのコードが全部で10行も登場しないという毎度おなじみの展開でしたが、たくさんの方にご参加頂きました。当にありがとうございました。 では、発表を順に紹介します。 @hnw 「OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた」 まずは僕の発表からでした。PHP7からの新機能であるOPcacheのファイルベースキャッシュについてソースコードを交えて仕組みを紹介しました。機能について、個人的には若干ネガティブに見ていますが、今後「こういう状況では確かに便利だ」という事例が出てくれば判断も変わると思います。 @noldorinfoさん「SQLite2と3のエスケープ関数の違いとその対策」 SQLite3のエスケープ関数がSQLite2のものと実装が変わっており、バイナリアンセーフになっていて

    第六回闇PHP勉強会の発表資料まとめ - hnwの日記
  • PHP5とPHP7の違い(extension編) - Qiita

    PHP5用のextensionは変更なしではPHP7上で動きません。#ifで分岐して両対応にするのも厳しい印象で、多くのextensionは別ブランチで開発しているようです(調べた範囲ではAPCu、msgpack、memcachedなどが別ブランチで開発しているようです)。 今回PHP7用の実験的なextension「php7_explorer」を書いてみました。書いてみてPHP5用のextensionとの違いを改めて実感したので、ざっくりの違いをまとめてみます。 「おまじない」を書かなくてよくなった PHP5までは、Zend APIのプロトタイプ宣言最後にTSRMLS_DCを、呼び出し時の引数リストの最後にTSRMLS_CCをつけるという「おまじない」が必要でした。これはZTS (Zend Thread Safety)サポートのため、必要なときだけ余計な引数を引き回すようなマクロ定義です

    PHP5とPHP7の違い(extension編) - Qiita
    shimooka
    shimooka 2015/09/18
    拡張モジュールの対応具合によって、PHP7への移行が進むかどうかかなり違いそう。。。runkit対応マダー
  • PHP7で変わること - hnwの日記

    次の土曜日5/30のPHPカンファレンス関西2015で基調講演(10:30-11:15)をさせて頂くことになりました。タイトルは「PHP7で変わること——言語仕様とエンジンの改善ポイント」です。チケットは既に売り切れているそうですが、参加者の方は早起きして来て頂けると幸いです。 このところQiitaに「PHP7調査」というシリーズを連投していたのも発表を意識してのことです。PHP7の新機能を一つずつ実際に試してみて、その結果を簡単にまとめていました。 今回は発表前の区切りとして、私の書いたPHP7関連の記事・プレゼン資料を一覧形式でまとめなおしてみます。PHPカンファレンス関西2015ではこれらの内容を踏まえつつ、気になる点を重点的にお伝えしたいと考えています。 内部実装のリファクタリング PHP7の目玉と言える、速度改善に関わる内容がほとんどです。 PHP7はなぜ速いのか - Slide

    PHP7で変わること - hnwの日記
  • PHP7調査(26)無名クラスの導入 - Qiita

    PHP7から無名クラスがサポートされました。次のような文法で、クラス定義なしでオブジェクトが生成できます。 通常のクラス定義と同様にextendsやimplementsなども書くことができます。 この構文はnewまで必須です。newなしで無名クラスが第1級オブジェクトになりそうに見えますが、現時点ではそのような記述はできません。無名クラスのインスタンスを作ることだけが可能です。 ユースケース RFCによれば次のような状況で便利なのでは?とのことでした。 テスト用のモックオブジェクトで、その場限りでインターフェースを実装する状況。 そのクラスを外部に公開したくないような場合 オブジェクトメソッドが呼ばれたりするのは構わないが、継承して使われるのがイヤな場合…? 自明な実装でオートローダーを叩きたくない 1クラス1ファイルというルールで運用している場合、1ファイル増えてしまうのが悲しいこともあ

    PHP7調査(26)無名クラスの導入 - Qiita
  • PHP7調査(23)致命的エラーが例外としてキャッチできるようになった - Qiita

    (2015/07/02追記:PHP 7.0.0alpha2に合わせて修正しました) PHPのエラーは、エラー文言を表示するだけの警告・注意と、その場で処理を終了してしまう致命的エラー(fatal error)の2種類に大別できます。 ところで、PHP5の致命的エラーには不便な点があります。それは、set_error_handler()やその他の方法でエラーハンドリングできず、必ず終了してしまう点です。これでは致命的エラーをユニットテストするのも不便ですし、ReactPHPのようにサーバ動作させるようなプログラムも安心して使えません。 PHP7では致命的エラーが例外として実現されるようになり、エラーハンドリングの自由度が格段に上がりました。この変更の概要を紹介します。 例外のクラス階層の変更 まず、PHP7で例外クラスの階層がどう変わるかを説明します。PHP5までの例外のクラス階層は次のよう

    PHP7調査(23)致命的エラーが例外としてキャッチできるようになった - Qiita
  • PHPのJSONライセンス問題が一応決着 - hnwの日記

    2012年頃に、PHPのJSONエクステンションのソースコード中に次のようなライセンス文言が含まれていると話題になりました。 The Software shall be used for Good, not Evil. これはJSONライセンスと呼ばれるライセンスの一文です。「このソフトウェアを良いことに使うのはいいけど、悪いことには使っちゃダメ」といったところでしょうか。 これはフリーソフトウェアの定義に反しており*1、各種LinuxディストリビューションでJSONエクステンションを配布できないことになるため、ちょっとした騒動になったというわけです。 稿ではこのJSONライセンスへの対応が現在どうなっているかを紹介します。 各種Linuxディストリビューションの対応 PHPのJSONエクステンションはjson_encode()やjson_decode()などの重要な関数を提供するエクス

    PHPのJSONライセンス問題が一応決着 - hnwの日記
  • PHP7調査(10)名前空間のuseをまとめて書けるようになった - Qiita

    PHP7から、名前空間を使うときに複数のuseを中カッコでまとめて書くことができます。 具体的には次のように書けるようになりました。 <?php use Symfony\Component\Console\{ Input\InputInterface, Input\InputArgument, Input\InputOption, Output\OutputInterface, Output\ConsoleOutputInterface };

    PHP7調査(10)名前空間のuseをまとめて書けるようになった - Qiita
    shimooka
    shimooka 2015/04/14
    ほー
  • 2014年をふりかえる - hnwの日記

    年末なので今年のふりかえりを書きます。基的には自分用エントリなんですが、何かの参考になれば。 書いた 2014年ははてなダイアリーに記事を含め30の記事を書きました。人気があったのは下記の記事です。 GitHubユーザーのSSH鍵6万個を調べてみた PHP 5.4.4から==の挙動が一段と難しくなりました 平方数かどうかを高速に判定する方法 PHP7はなぜ速いのか(zval編) PHPでHTTPの並行ダウンロードを実現する(Guzzle編) RSA公開鍵から素数の積を取り出す方法 また、会社ブログにも3件記事を書きました。 PHPのセッションIDは暗号論的に弱い乱数生成器を使っており、セッションハイジャックの危険性がある Android NDKで使えないシステムコール・ライブラリ関数一覧 参加した 勉強会発表を3件行いました。 3/15 第五回闇PHP勉強会 資料:zval をダイエ

    2014年をふりかえる - hnwの日記
  • PHPを高速化するRecki-CTとは一体何なのか - hnwの日記

    @ircmaxellさん作の「Recki-CT」を試してみたので紹介します。作者によるブログ記事「ircmaxell's blog: Introducing Recki-CT」によれば処理によってはHHVMやHippy VMより速いらしいのですが、この記事だけでは詳細がよくわからずモヤモヤしていました。今回ソースコードまで確認してみて、前作のPHPPHPを超える変態作品だとわかりました(参照:「PHPPHPがド変態であることに今さら気づいた」)。 Recki-CTを試してみる Recki-CTの概要を説明すると、既存のPHP関数に型情報のアノテーションを記述して呼び出し方を少し変えることで、その関数をJITコンパイルしてネイティブコードとして実行するPHPライブラリです。JITコンパイルにはlibjitPHPバインディングであるJIT-Fuを利用しています。 では、さっそく試してみましょ

    PHPを高速化するRecki-CTとは一体何なのか - hnwの日記
  • PHPのlibjitバインディングであるJIT-Fuを試してみた - hnwの日記

    @krakjoeさんが作っているPHPエクステンションのJIT-Fuを試してみました。これはGNUのJITコンパイラライブラリlibjitPHPから使うためのものです。 インストール READMEの「Installation Instructions」に書いてある通りにlibjitとJIT-Fuをインストールします。今回はMacOSX 10.9+PHP 5.6.3の環境で試しました。 まずはlibjitをインストールします。僕はHomebrewと衝突するのがイヤで/opt以下にインストールしましたが、普通は/usr/localあたりにインストールすればいいと思います。 git clone git://git.sv.gnu.org/libjit.git cd libjit ./auto_gen.sh ./configure --prefix=/opt make sudo make inst

    PHPのlibjitバインディングであるJIT-Fuを試してみた - hnwの日記
  • PHPPHPがド変態であることに今さら気づいた - hnwの日記

    Anthony Ferraraさん(@ircmaxell)が2012年12月に公開したPHPで記述されたPHP実装「PHPPHP」について、今さらですが調べてみました。 @ircmaxellさんはPHPの内部構造についての解説サイト「PHP Internals Book」の筆者の一人であり、PHP 5.5で導入された新しいパスワードハッシュ関数の提案・実装者でもあります(参照:https://wiki.php.net/rfc/password_hash)。最近発表した「Recki-CT」も興味深いプロダクトです。 そんなわけでジョークレベルではないだろうとは思ってましたが、今回中身を見てみたらガチすぎて恐怖しました。どういうモチベーションでこんなもん作る気になるんだ…。 PHPPHPの挙動はおおよそ次のようなものです。 PHPソースコードを受け取って構文解析して抽象構文木(AST)を作る

    PHPPHPがド変態であることに今さら気づいた - hnwの日記
    shimooka
    shimooka 2014/12/23
    やっぱ頭おかしい(褒め言葉)
  • PHP7はなぜ速いのか(zval編) - hnwの日記

    この記事はPHP Advent Calendar 2014の7日目です。 僕は先日のPHPカンファレンス2014でPHP7に関するLTをしました(参照:「PHPNGの動向」)。ただ、時間が限られていたこともあり、あまり踏み込んだ内容には触れませんでした。 稿ではLTの内容から深掘りし、zvalという内部的な構造体がどう変わるのか、性能面のメリットにフォーカスして解説してみます。 PHPをとりまく状況 まず最近のPHPの話題をおさらいしておきましょう。 これまでPHPには実用レベルの別実装が存在しない状態が続いていましたが、HHVMの登場で状況が変わってきました。HHVMはFacebookが開発しているPHP実行環境で、PHPより高速で互換性も高いのが特徴です。Facebookで実際に利用されているだけでなく、他の企業でも商用サービスで利用する事例が増えてきています。 そんな中、2014年

    PHP7はなぜ速いのか(zval編) - hnwの日記
    shimooka
    shimooka 2014/12/09
    これは良いまとめ
  • PHPでHTTPの並行ダウンロードを実現する(Guzzle編) - hnwの日記

    PHPで最近注目のHTTPクライアントライブラリにGuzzleがあります。日での知名度はまだまだという印象ですが、かなり高機能かつ真面目にメンテナンスされている印象で、今後のデファクトスタンダードになりうるライブラリと言えるでしょう。 稿ではこのGuzzleを使ってWebサーバから並行にダウンロードする方法を紹介します。Webブラウザのように同時に複数コネクションを管理しながらKeep-Aliveでコネクションを使い回しますので、下手なコードで実現するより接続先Webサーバにも優しいはずです。 Guzzleの特徴 まずは、Guzzleについて僕が特徴的だと思う点を紹介します。 パッと見でわかりやすいインターフェース cURLは必須ではないがデフォルトでcURLを使う cURLの無い環境がありうるので、cURL無しでも動くのは嬉しい cURLのわかりにくいインターフェースを隠してくれるの

    PHPでHTTPの並行ダウンロードを実現する(Guzzle編) - hnwの日記