タグ

ブックマーク / blog.ohgaki.net (14)

  • StackExchangeが攻撃されたReDoSの効果

    (Last Updated On: 2018年8月13日)StackExchangeがReDoS攻撃に遭いサイトがダウンした原因をStackExchangeのブログで紹介していました。 PHPへの影響があるか試してみました。結論を書くと、脆弱な正規表現を使っていて攻撃者が入力をコントロールできる場合、簡単に攻撃できるようです。PCRE、Onigurumaの両方で試してみましたがどちらも脆弱でした。 参考:正規表現でのメールアドレスチェックは見直すべき – ReDoS Onigurumaでは破滅的なReDoSが可能です。以前からメールアドレスのチェックに利用する正規表現には注意喚起していましが、どの程度浸透していたのだろうか? ReDoSとは ReDoSはこのブログでも紹介しています。正規表現のアルゴリズムを利用してDoS攻撃する攻撃です。 参考: 正規表現を使ったDoS – ReDoS R

    StackExchangeが攻撃されたReDoSの効果
  • PHP 5.6の新機能

    (Last Updated On: 2018年8月13日)PHP Advent Calender 2013、3日目の参加エントリです。前日のPHP の配列を使った手品とその種明かしに続き3日目です。PHPの配列(ハッシュ)のキーはバイナリセーフなので何でも入れられる、ということはあまり知られていないですよね。面白い話だったと思います。 私のネタには面白さはありません。予めご了承ください :-) さて今日のテーマのPHP5.6新機能です。PHPプロジェクトのgitレポジトリでは既にPHP5.6用のブランチが作成されています。PHP 5.6は来春リリース予定です。 大ニュース(?)だったので多くの方はご存知だと思いますが、PHPは毎年新しいマイナーバージョンをリリースします。メンテナンスされるのは2つのバージョンのみです。つまりPHP 5.6がリリースされるとPHP 5.4はEOL(メンテナン

    PHP 5.6の新機能
  • PHP 5.4 リリース!!

    (Last Updated On: 2018年8月13日)PHP 5.4がリリースされました。 詳細はソースに添付されているUPGRADINGとNEWS、マニュアルのマイグレーションガイドから参照できます。 注目の新機能 Trait 配列の省略記法  $array = [1, 2, 3]; $array = [‘a’=>1, ‘b’=>2, ‘c’=>3]; 配列を返す関数の添字へ直接アクセス foo()[0] などと利用可能 オブジェクト生成時のメンバーアクセス (new foo)->method(), (new foo)->property タイプヒントにcallableが追加 function(callable $func)などと利用可能 CLI Server 個人的にはCLI Serverは非常に便利だと思います。PHPのWebアプリを少し試したい、といった場合にWebサーバを別途

    PHP 5.4 リリース!!
  • echo:comma vs dot

    (Last Updated On: 2018年8月13日)昨日、echo ‘abc’,’xyz’  (カンマ) と echo ‘abc’.’xyz’ (ドット) とどちらが速い?と言う話になったので簡単な実験をしてみました。 PHPのソースコードを見るとどちらも有利な点と不利な点があります。随分前に試した時も一般にカンマの方が速いと思える結果でしたがPHP5.3ではどうなのか試してみました。 コード <?php $text = ' Prevent possible crash when joining to a scalar function Prevent transitory data corruption of GIN indexes after a crash Prevent data corruption on TOAST columns when copying data Fi

    echo:comma vs dot
  • gihyo.jp セキュリティ対策が確実に実施されない2つの理由

    (Last Updated On: 2018年8月13日)gihyo.jpで新しい記事が公開されました。 なぜ簡単な対策で防げる脆弱性でもセキュリティ対策が確実に実施されないのか?それには理由があります。 その理由とはこの2つではないでしょうか。 セキュリティ対策とコーディングのベストプラクティスは相反することを理解していない セキュリティ対策の基中の基を理解していない 続きは http://gihyo.jp/dev/serial/01/php-security/0044 でご覧ください。 こちらはその記事のはてなブックマークです。 http://b.hatena.ne.jp/entry/gihyo.jp/dev/serial/01/php-security/0044 コメント一つ一つにコメントを付けるつもりはありませんが、モノリシックなコードと処理が重複しているかいないかは関係ありま

    gihyo.jp セキュリティ対策が確実に実施されない2つの理由
  • PHP 5.4から配列定義は超簡単に、そして落とし穴も – yohgaki's blog

    (Last Updated On: 2018年8月13日)PHP 5.4 Advent Calender 2011用のエントリです。(まだ空きがあるので是非どうぞ) このエントリを書いているのは11/23です。初めの方から重いネタだと後の方が苦労する(?)ので軽い話です。 PHP 5.3までの動作 現時点ではPHP Manualの配列のページには記載されていませんが、配列の定義が簡略化されます。まず現状の配列の定義方法は <?php $a = array('foo'=>123, 'bar'=>456, 789); var_dump($a); こんな感じですね。これを実行すると $ ../php-src-5.4/php arr.php array(3) { ["foo"]=> int(123) ["bar"]=> int(456) [0]=> int(789) } このような出力になります。

    PHP 5.4から配列定義は超簡単に、そして落とし穴も – yohgaki's blog
  • RealIP Module for PHP

    (Last Updated On: 2018年8月14日)リバースプロキシの背後にあるPHP用に$_SERVER[‘REMOTE_ADDR’]をX-Real-IPやX-Forwarded-Forヘッダに設定されたIPアドレスに書き換えるRealIPを書きました。 https://github.com/yohgaki/realip 少しGoogleで検索しても見つからなかったので作ったのですが、既にありそうな気がします。 PHPスクリプトで書き換えても良いのですが、アプリをバージョンアップした時に忘れる可能性があります。プロキシ・Webサーバで何とかする方法もありますが、プロキシ・Webサーバの仕様に合わせた設定が必要だったり、と不便な所もありモジュールの方が便利なので書きました。同じ事をするには他の方法がありますが、必要な方はどうぞ。 多分、PHP5.2でもコンパイルできると思います。コン

    RealIP Module for PHP
  • PHPセッションアダプションをスクリプト側で修正する方法

    (Last Updated On: 2018年8月13日)PHPのスクリプトを使ってアダプティブなPHPセッションをアダプティブにしない方法を紹介します。 このブログで紹介していたかどうか覚えていないですが、セッションアダプション対策としてsession_regenerate_id()が導入された時に議論・紹介されているので知っている方も多いと思います。(というより、PHPerの常識ですよね?) まずはセッションアダプションの原理と対策の復習をしておきます。 原理: 未初期化のセッションIDを受け入れる 対策: 初期化済みセッションIDのみ受け入れる session_regenerate_id()は新しいセッションIDを生成して新しいセッションクッキーを作成して、セッションデータを保存するようになっています。session_regenerate_id()を呼んだだけでは、なんらかの方法で複

    PHPセッションアダプションをスクリプト側で修正する方法
  • PHP 5.4の文字エンコーディング設定

    (Last Updated On: 2018年8月13日)PHP 5.4 RC1が公開されています。PHP 5.4のリリースが近いです。PHP 5.3の–enable-zend-multibyeの問題でバグレポートをした関係でinternals MLでメールのやり取りをして分った事とその他をまとめておきます。主にSJISを使う場合の注意点です。間違い・勘違いもあるかも知れないので気が付いたらコメントを下さい。 PHP 5.4はデフォルトの内部エンコーディングがISO-8859-1になる SJISでコードを書く場合はzend.script_encoding=SJISを書く SJISでコードを書く場合は内部エンコーディングをSJIS(mbstring.internal_encoding=SJIS)に設定する SJISで出力する場合はmbstring.http_output=SJIS (outp

    PHP 5.4の文字エンコーディング設定
  • phpのescapeshellcmdの余計なお世話を無くすパッチ

    (Last Updated On: 2018年8月13日)徳丸さんのブログでescapeshellcmdの余計なお世話の件が指摘されていたのでパッチを作りました。これmagic quoteと同じレベルの余計なお世話なのですが放置されています。個人的にはどのような関数にも全てバリデーション済みの文字列しか渡さないのでセキュリティ問題は発生しないのですが、UNIX系OSではペアとなる”と’はエスケープしない仕様に気が付いていないプログラマも多いかもしれません。 先ほど「UNIX系OSでは」と書きましたがWindowsでは異なる動作をします。この関数は仕様がいい加減でWindowsの場合は”と’も問答無用でエスケープします。(加えて%もエスケープします)ですから、徳丸さんが指摘された問題はWindowsを使っていれば発生しません。UNIX系とWindowsで動作が異なる、という厄介な関数でもあり

    phpのescapeshellcmdの余計なお世話を無くすパッチ
  • httpOnlyをFirefoxで

    (Last Updated On: 2018年8月13日)PHP 5.2.0のsetcookie/setrawcookie関数からhttpOnly属性をクッキーにつける事ができるようになりました。httpOnly属性はMicrosoftが独自に拡張した仕様で、JavaScriptからクッキーの値を使用できなくする機能です。httpsでのみクッキーを送信するsecure属性に似ています。 Microsoftの独自拡張なのでIEでは利用できましたがFirefoxでは利用できません。しかし、アドオンを使用することでhttpOnly属性をFirefoxでも利用できるようです。 httpOnly by Stefan Esser Adds httpOnly cookie support to Firefox by encrypting cookies marked as httpOnly on the

    httpOnlyをFirefoxで
  • OSX+Android(Xperia)+オープンソースでテザリング

    (Last Updated On: 2018年8月14日)Xperiaを購入したのでOSXを無料でテザリングする方法探してやってみました。流石にテザリングソフトを購入した方が簡単ですが、一旦環境を作ってしまえば使うのはそれほど手間ではありません。 Wikiに手順をまとめておいたので興味がある方はどうぞ。 必要な物は、Android SDK, Azilink(Android側のVPNアプリ), OpenBlick(Mac OSX用のVPN GUI – openvpnだけでも何とかなるがこれが無いとネットワーク設定が面倒)です。詳しくはWikiを見てください。 制限事項 ping はできない(UDP pingでエミュレーションしているため) USB接続(Wifi, Bluethooth接続は無理) 自己責任。パケホーダイなら最大約1万3千円のようですが、スマートフォンの最大金額(約6000円)

    OSX+Android(Xperia)+オープンソースでテザリング
  • SET NAMESは禁止

    (Last Updated On: 2018年8月13日)MySQLには文字エンコーディングを変更する「SET NAMES」SQL文が用意されています。(PostgreSQLも同様のSQL文、SET CLIENT_ENCODINGがあります)この機能はSQLコンソールからは使ってよい機能ですが、アプリケーションからは使ってはならない機能です。SQLインジェクションに脆弱になる場合があります。 Ruby on Railsを読んでいて、ActiveRecordを説明している部分にMySQLの文字エンコーディングを変更する場合の例としてSET NAMESが利用されていました。アプリケーションからはSET NAMESは使ってはならない事を周知させるのは結構時間が必要かなと思いました。 PHPも5.2の途中からMySQLモジュールにlibmysqlの文字エンコーディング設定APIのラッパー関数が

    SET NAMESは禁止
  • yohgaki's blog

    なんだかやけに長い説明ばかり検索に引っかかったので書きました。 Linuxのローカル環境でDockerコンテナ内のXアプリ(GUIアプリ)を利用するには $ xhost localhost + を実行した後に $ docker run --rm --net host -e "DISPLAY" container_image_name x_app_binary_path とすれば良いです。 もっと読む SSHなどよく知られたサービスポートで何も対策せずにいると数えきらないくらいの攻撃リクエストが来ます。不必要なログを増やしてリソースを無駄にし、もし不用意なユーザーやシステムがあると攻撃に成功する場合もあります。 SshguardはC作られており、flex/bisonのパーサールールを足せば拡張できますがカスタム版をメンテナンスするのも面倒です。必要なルールを足してプルリクエストを送ってもマー

    yohgaki's blog
  • 1