タグ

phpに関するockeghemのブックマーク (412)

  • PHP :: Bug #49814 :: htmlentities/htmlspecialchars accept partial multibyte sequences still

    Strings related Bug Reported by hello@... Thu, 08 Oct 2009 14:15:55 +0000 PHP: 5.3.2-dev, OS: * Description: ------------ PHP 5 ChangelLog says "Fixed htmlentities/htmlspecialchars not to accept partial multibyte sequences." http://www.php.net/ChangeLog-5.php#5.2.5 But it has not been fixed in reality. Please correct the log, or investigate my patch. http://iwamot.com/misc/html.c.patch.20091008 Re

    ockeghem
    ockeghem 2009/10/09
  • htmlspecialcharsに関する残念なお知らせ - 岩本隆史の日記帳(アーカイブ)

    htmlspecialcharsのパッチ私案」に書いた件、バグレポートを出してみましたが、「すでに同じバグレポートがあるだろ」という理由により、あえなく却下されました。 せめて先方が「同じ」とみなしているレポート番号ぐらいは示してほしくて、そのようにコメントしましたが、お相手のjaniという人は気難し屋のようで*1、教えてもらえる気がしません。 私なりに探した結果、下記のレポートがくさいように感じました。 PHP :: Bug #43896 :: htmlspecialchars() returns empty string on invalid unicode sequence 「不正なUTF-8シーケンスの場合に空文字列を返すのはおかしい」というレポートで、私のそれとは正反対どころか、Shift_JISにもEUC-JPにも触れられていない別個のものです。もちろん、私はレポート送信前に

    htmlspecialcharsに関する残念なお知らせ - 岩本隆史の日記帳(アーカイブ)
  • htmlspecialcharsのパッチ私案 - 岩本隆史の日記帳(アーカイブ)

    PHPhtmlspecialchars関数について、文字エンコーディングの妥当性チェックが不充分であること、また場合によってはXSS攻撃が可能になることが、下記ふたつの記事で指摘されています。 htmlspecialcharsは不正な文字エンコーディングをどこまでチェックするか | 徳丸浩の日記 Shift_JIS では、htmlspecialchars() を使用しても XSS が可能な場合がある - t_komuraの日記 徳丸さんの記事では、仕様変更も提案されています。 冗長なUTF-8は不正なエンコーディングとして扱う(出力を空にする) Shift_JIS、EUC-JPの2バイト目が不正な場合も、エラーとして出力を空にする htmlspecialcharsは不正な文字エンコーディングをどこまでチェックするか | 徳丸浩の日記 さらに、id:t_komuraさんの記事をうければ:

    htmlspecialcharsのパッチ私案 - 岩本隆史の日記帳(アーカイブ)
    ockeghem
    ockeghem 2009/10/05
    これはすばらしい
  • Shift_JIS では、htmlspecialchars() を使用しても XSS が可能な場合がある - t_komuraの日記

    以下のページに関連して、htmlspecialchars() を使用している場合でも XSS が可能かどうか少し調べてみました。 http://www.tokumaru.org/d/20090930.html その結果、いくつかのブラウザで文字エンコーディングに Shift_JIS を使用していた場合、XSS が可能なことを確認しました。 テストコードは以下の通りです。リンクにマウスポインタを乗せると埋め込んだ Javascript が実行されます。 <?php $_GET['a1'] = "\xf0"; // \xf0 - \xfc で可能 $_GET['a2'] = " href=dummy onmouseover=alert(document.title) dummy=dummy"; header( "Content-Type:text/html; charset=Shift_JIS

    Shift_JIS では、htmlspecialchars() を使用しても XSS が可能な場合がある - t_komuraの日記
    ockeghem
    ockeghem 2009/10/05
    報告ありがとうございます。素晴らしいです。しかし、なぜそんな中途半端な仕様という気持ちで 少々のけぞりましたが、まあPHPですしね。今後この手の検証をする際は文字通り全てのパターンを検証することにします
  • htmlspecialcharsは不正な文字エンコーディングをどこまでチェックするか

    補足 この記事は旧徳丸浩の日記からの転載です。元URL、アーカイブはてなブックマーク1、はてなブックマーク2。 備忘のため転載いたしますが、この記事は2009年9月30日に公開されたもので、当時の徳丸の考えを示すものを、基的に内容を変更せずにそのまま転載するものです。 補足終わり このエントリでは、PHPhtmlspecialchars関数の第三パラメータ(文字エンコーディング指定)により、どこまで文字エンコーディングの妥当性チェックをしているかを報告します。 2007年4月に、寺田氏(id:teracc)の素晴らしいエントリ「htmlspecialcharsと不正な文字の話」により、htmlspecialcharsは、第三パラメータの文字コードを実質的に無視しており、不正な文字エンコーディングが指定された場合、その文字はチェックされずにすり抜けてしまうという結果が報告されています。

    ockeghem
    ockeghem 2009/09/30
    htmlspecialcharsはPHP5.2.5以降で不正な文字エンコーディングをある程度チェックするようになりました
  • PHPが文字エンコーディング攻撃に強い理由 – HTMLエスケープ

    (Last Updated On: 2018年8月13日)PHPが文字エンコーディング攻撃に比較的強い理由は入出力の文字エンコーディングのバリデーション(サニタイズ)が行えるだけではありません。PHPが提供するHTMLエスケープ関数が文字エンコーディング攻撃に対して強い事も理由の一つです。 PerlHTMLエスケープと言えば、<,>,&,”,’をエンティティ変換するコードが一番に見つかります。 「perl html escape」でググると一番に見つかったページは次のページです。このページではまだ3バイトEUCの場合の例、CGIモジュールを使った例も載っているので良い方でしょう。 http://saboten009.blogspot.com/2008/04/perlhtml-xss.html 少し前にPerl, Ruby,Pythonユーザは検索で有用なセキュリティ情報を得られるのか?と

    PHPが文字エンコーディング攻撃に強い理由 – HTMLエスケープ
    ockeghem
    ockeghem 2009/09/29
    ツッコミどころ多数。『何年も前から文字エンコーディングを考慮したエスケープを行っている』<壊れた文字エンコーディングのチェックはPHP 5.2.5(08 Nov 2007)から/日記書いた http://www.tokumaru.org/d/20090930.html#p01
  • 出力時の文字エンコーディング変換、妥当性確認について - t_komuraの日記

    大垣さんが以下のページで PHP について言及しておられますので、気になったことを書いておきたいと思います。 http://blog.ohgaki.net/rails-ruby-1-9 私は、現在、PHP で構築したサイト運用はしていませんので、出力時に文字エンコーディングを変換、妥当性確認する方法がどの程度有効で、どのような問題があるのかは十分把握していません。ある程度実施方法については書いておきますので、参考にされる方は、実用可能かどうかを十分検証してください。 出力時に文字エンコーディングを変換する方法 PHPで、似た様な動作にしたい場合(ブラウザ以外からの入力も怪しいなど)出力時に強制的に文字エンコーディング変換してしまえば良いです。例えば、 mbstring.internal_encoding = utf-8 mbstring.http_output = utf-8 と出力文字エ

    出力時の文字エンコーディング変換、妥当性確認について - t_komuraの日記
    ockeghem
    ockeghem 2009/09/28
    素晴らしいまとめ。出力時の文字エンコーディングチェックは本来htmlspecialcharsが担当すべきだが、中途半端なチェックしかしない。これについてはいずれ書く予定
  • #PHP でもutf8_decodeは使ってはならない

    (Last Updated On: 2009年9月22日)Twitterで書いた方が良いようなエントリですが、たまには良いでしょう。 #perl – utf8::decode()ではなくEncode::decode_utf8()を使うべき理由 という記事がありました。PHPにも似た関数、utf8_decodeがあります。PHPでも使ってはなりません。日人というよりマルチバイト圏で使っている人はほとんどいないはずです。理由はコードを見れば一目瞭然です。 /* All the encoding functions are set to NULL right now, since all * the encoding is currently done internally by expat/xmltok. */ xml_encoding xml_encodings[] = { { "ISO-

    #PHP でもutf8_decodeは使ってはならない
    ockeghem
    ockeghem 2009/09/22
    『マルチバイト圏で使っている人はほとんどいないはずです。理由はコードを見れば一目瞭然』<コードを見るまでもなく、マニュアルによると『シングルバイトのISO-8859-1に変換する』関数なので使う機会は少ないでしょう
  • PHP-dev リスト: 会員オプションログインページ

  • htmlspecialchars - 第45回PHP勉強会@関東 :: handsOut.jp

    スライド1: htmlspecialchars() についてkomura第45回 PHP 勉強会@関東(2009.08.01) スライド2: 自己紹介1. PHP暦(a) PHP 4.0.4 ~(2002年?)(b) 最近はPHPでスクリプトを書くよりPHPのソースを読んでいる時間の方が長い2. Webページ,日記など(a) t_komuraの日記http://d.hatena.ne.jp/t_komura/(b) 個人的なメモと備忘録http://www.asahi-net.or.jp/~wv7y-kmr/(c) PHPとWebアプリケーションのセキュリティについてのメモhttp://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html(d) PHPのmbstringに関するメモhttp://www.asahi-net.or.jp/~

    ockeghem
    ockeghem 2009/09/21
    おっと、これを見落としていました。僕も同じようなこと調べていましたが、ブログ書かなくてよくなったかも(書くかも)。t_komura++
  • [PHP-dev 1392] mbstring関連での微妙な挙動について

    Seiji Masugata s.masugata @ digicom.dnp.co.jp 2008年 3月 10日 (月) 16:03:50 JST 記事の並び順: [ 日付 ] [ スレッド ] [ 件名 ] [ 著者 ] こんにちわ、桝形です。 mbstring関連で、いくつか微妙な挙動に遭遇したので報告しておきます。 どちらもファイルアップロード絡みです。 -------------------------------------------------------------------- (1) 例えば c:\test\hoge\huga.txt というファイルをアップロードした場合 PHP的に色々と処理を行った結果、最終的には huga.txt と、 ファイル名だけになり、$_FILES 配列の ['name'] 項目に格納されます。 http://jp.php.net/fi

    ockeghem
    ockeghem 2009/09/21
    id:t_komuraさん経由。PHPはこういうのが多くて大変ですね
  • 文字エンコーディングの妥当性確認(バリデーション)について - t_komuraの日記

    大垣さんからコメントをいただきましたので、最後に追記しました(2009.09.22)。 少し時間が経ってしまいましたが、以下のページを読んで、PHP に関連する部分について思ったことを書きたいと思います。 http://blog.ohgaki.net/char_encoding_must_be_validated http://blog.ohgaki.net/is-char-encoding-problem-difficult 私の理解が間違っていなければ、「Web アプリケーションで文字エンコーディングに関連する問題を無くす」ことを目的として、全ての Web アプリケーション開発者が以下を実行しようという主張だと思います。 全ての入力文字列の文字エンコーディングの妥当性を確認する 文字エンコーディングを厳格に取り扱う データベースなどで「バイナリ」に近い文字エンコーディングは利用しない

    文字エンコーディングの妥当性確認(バリデーション)について - t_komuraの日記
    ockeghem
    ockeghem 2009/09/21
    詳しい解説をありがとうございます。『間違える人は少ないと思いますが、上記の設定だけでは、入力時の自動変換は有効になりません。mbstring.encoding_translation = On が必要です』<コピペした人は間違えそうですね。
  • PHP: Release Archives (museum)

    Index of / File Name  ↓ File Size  ↓ Date  ↓ patches/-2014-Nov-05 20:43 php-gtk/-2014-Nov-05 20:43 php1/-2014-Nov-05 20:43 php2/-2014-Nov-05 20:43 php3/-2014-Nov-05 20:43 php4/-2014-Nov-05 20:45 php5/-2020-Jul-07 10:32 php7/-2024-Jan-29 16:09 php8/-2021-Nov-25 13:27 win32/-2014-Nov-05 20:50

  • mb_check_encoding() の代替関数 - t_komuraの日記

    これまでに挙げた文字コードについて、正規表現を使用して mb_check_encoding() の代替用の関数を書いてみました。ある程度、妥当なものになっているとは思いますが、間違い等に気付いた方がおられましたら、ご指摘ください。 UTF-8 については、RFC3629 を参考にしました。各文字は4バイト以下、冗長な表現、サロゲートペアの領域を FALSE と判定します。 <?php function is_valid_encoding( $str, $encoding ) { switch ( $encoding ) { case 'ASCII' : $regex = '/(?:' . '[\x00-\x7f]' // ASCII (mb_check_encoding) // . '[\x00\x09\x0a\x0d\x20-\x7f]' // ASCII (mb_detect_enco

    mb_check_encoding() の代替関数 - t_komuraの日記
  • 文字コードのセキュリティ - 2009-09-14 - ロンリースター個々一番

    ごめんなさいあからさまにいいっぱなし投げっぱなしです。 http://blog.ohgaki.net/char_encoding_must_be_validated http://www.tokumaru.org/d/20090914.html#p01 不正な文字列は + バリデータではじく + そもそも最初の入力時点でエラーではじいてしまう 僕個人の考えではフレームワークにNULLの文字列削除のコードと一緒に削除するものを、(可能であればデフォルトで動作する)プラグインとして提供するほうがいいと考えてはいる。 その上で今ないものに対しては、マルチバイト圏の僕らが各フレームワークにつっこんでいく必要があるのかなぁと無責任に思った。 、外国産のフレームワークはmbstring系の拡張が嫌がられるというものあるので、id:t_komuraさんの下記の記事を参考に組み込むのがいいかなと考えてます

    文字コードのセキュリティ - 2009-09-14 - ロンリースター個々一番
    ockeghem
    ockeghem 2009/09/15
    『マルチバイト圏の僕らが各フレームワークにつっこんでいく必要があるのかなぁ』<こういう議論がどんどん起きるといいですね
  • PHPカンファレンス2009 ビジネスデイに参加する - Kwappa開発室

    ockeghem
    ockeghem 2009/09/14
    言及ありがとうございます
  • PHPカンファレンスで「PHPを見える化する」を発表しました

    10th PHPカンファレンスで発表してきました! photo by lllnorikolll まず、こういった発表の機会を与えて下さった実行委員会の皆さんにお礼を言いたいと思います。ありがとうございましたm(_ _)m また、拙い発表を聞いて下さった皆さんありがとうございました。いくつか反応を頂けて、とても嬉しかったです。 PHPカンファレンスでの発表は、目標としていたところだったので、檀上に立った時は緊張と共に感激していました:-D 発表では、初めはふわふわした感じで正直結構緊張していたのですが、途中からはわりと落ち着いてきました。スライドが抜けていたり、プロジェクタの表示が左端が切れていたり、時間が足りなかったりはあったのですが、最後は笑って貰えたので良かったです:-D 当はプロファイリングをもっと解説したかったのですが、時間が足りず、すっ飛ばしました。。。プロファイリングツールの

  • PHP5.3.0 VC6でgo-pear.bat失敗する問題 - ひとりしずかに。

    C:\php>go-pear.bat phar "C:\php\PEAR\go-pear.phar" does not have a signaturePHP Warning: require_once(phar://go-pear.p har/index.php): failed to open stream: phar error: invalid url or non-existent phar "phar://go-pear. phar/index.php" in C:\php\PEAR\go-pear.phar on line 1236 続行するには何かキーを押してください . . . zipアーカイブを展開して、まずはgo-pear.batを実行すると上記のようなエラーで失敗します。 これ、どうやらリリースアーカイブの問題らしく、検索してみたところ、 go-pear.batに-

    PHP5.3.0 VC6でgo-pear.bat失敗する問題 - ひとりしずかに。
  • PEAR MDB2でPHPからデータベースを操作する

    はじめに PHPにはデータベースにアクセスする方法がいくつか用意されています。そのような方法の一つに、「PEAR MDB2」があります。名前の通りPEARのライブラリとして公開されています。PEARにはMDB2のほかに「DB」や「MDB」といったライブラリがあり、現在でも利用することができます。しかしながら、これらの開発はすでに終了しており、開発者はMDB2に移行することが推奨されています。 稿では、PEAR MDB2を使って、PHPからデータベースを操作する次のような基的な方法を紹介します。 PEAR MDB2を使うとデータベース管理システム(MySQLやPostgreSQLSQLite等)に依存しないコードを書くことができる。 SQLの実行には、プリペアードステートメントを使うのが基である(例外あり)。 PHPにはPEAR MDB2の他にもデータベースへのアクセス手段が数多く用

    PEAR MDB2でPHPからデータベースを操作する
    ockeghem
    ockeghem 2009/09/09
    丁寧なまとめだが、prepare呼び出し時に型を指定するべきだと思う。綺麗な構文ではないが、仕方ない
  • PEAR :: Manual :: MDB2

    目次導入 -- 機能概要DSN -- データソース名 (Data Source Name)接続 -- データベースへの接続および接続の解除クエリ -- クエリの実行クォートおよびエスケープ -- 値を適切にクォートしてクエリを作成するデータ型 -- データ型の処理の概要結果 -- クエリ結果からのデータの取得準備と実行 -- プリペアドステートメントトランザクション -- トランザクションの処理モジュール -- モジュールの読み込みとコールManager モジュール -- データベースの構造を管理するためのモジュールReverse モジュール -- データベースの構造を管理するためのモジュールautoPrepare & autoExecute -- SQL 文を自動的に準備・実行する可搬性 -- データベースの可搬性に関する機能シーケンス -- シーケンスおよび自動採番FAQ -- よくあ