Search Result: プログラム

大垣本を読んで「バリデーションはセキュリティ対策」について検討した

…ます。このサンプルはプログラムの最初の方でsession_start()を呼んでいますので、$_SESSIONの値はなんらかの配列のはずです。すなわち、上のスクリプトは、$_SESSIONが空配列の場合に、あらためて空配列を代入していることになります。しかし、これは恐らくバグで、$_SESSIONが空でない場合に空にしたいのでしょう*1。以下、私の推定が正しいと仮定して議論を進めます。 エラーハンドラは、セッション破棄の他に、スタックトレース、$_GET、$_POST、$_S…

11月24日(木)トレンドマイクロ&KCCS共催セミナーで講演します

…。といっても、特殊な話ではなくて、どの企業・団体でも考えなければならない内容だと思います。 来週の開催ですが、まだお席があるようですので、興味のある方はお申し込みください。 日時:2011年11月24日(木) 14:30〜17:00(受付開始 14:00)場所:トレンドマイクロセミナールーム 新宿マインズタワー12F費用:無料 プログラム詳細、お申し込みはこちら https://trendmicro-partner.jp/partnerseminar/cyberattack/

PHPのイタい入門書を読んでAjaxのXSSについて検討した(2)〜evalインジェクション〜

…ます。一般論として、プログラムをチェックする範囲を限定することによりバグを出にくくすることができますが、バグの一種である脆弱性についても同じことが言えます。 [PR]体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践作者: 徳丸浩出版社/メーカー: SBクリエイティブ発売日: 2011/03/01メディア: 単行本購入: 119人 クリック: 4,283回この商品を含むブログ (146件) を見る *1:本書P144にはJSONの動くサンプル…

もし『よくわかるPHPの教科書』の著者が徳丸浩の『安全なWebアプリケーションの作り方』を読んだら

…検索すれば、サンプルプログラムを見つけることができるので、参考にしてもよいでしょう。 現実問題として、多くのプログラマがこうやって、コピペでプログラムを作っている現実があるにしても、もう少し注意点も書けばよかったですね。すぐに思いつく注意として以下があります。 ライセンスに注意。コピペして使って良いとは限らない 品質に注意。バグがあるかもしれない セキュリティに注意。脆弱性があるかもしれない さて、先ほど引用したmakeLink()関数にはバグがあるようです。mb_eregの…

PHPカンファレンス2011にて講演します

…Oです。詳細は、講演プログラムをご覧ください。 タイトルは、「徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011」ということで、拙著「体系的に学ぶ 安全なWebアプリケーションの作り方」の中から、安全なPHPアプリケーション開発のための「10の鉄則」という形で提示いたします。以下は応募の際に提出したアジェンダです。 PHP本体の脆弱性はかなり少なくなってきましたが、PHPを使ってアプリケーションを開発する際には、陥りやすい落とし穴がまだまだ多いのが現状です。本発表では、拙著「…

phpMyAdminにおける任意スクリプト実行可能な脆弱性の検証

…れです。分かりにくいプログラムですね。 ここで、この脆弱性を修正したバージョン(3.4.3.1)の該当箇所を引用します。 if (!empty($_GET['session_to_unset'])) { session_write_close(); session_id($_GET['session_to_unset']); session_start(); // 以下同じ これなら分かりやすいですね。そして修正前のスクリプトでは、parse_str関数の呼び出しが、変数se…

僕が「ホワイトリスト」を採用しなかった訳

…リストにより入力値をプログラムが期待するもののみに限定できます。 http://www.openpne.jp/developer/secure-coding-guideline/#id7 例によって「ホワイトリスト」の定義はされていませんが、「プログラムが期待するもののみに限定」という表現があることから、ホワイトリスト=アプリケーション仕様であることが分かります。 さらに、OSコマンドインジェクション対策の項にもホワイトリストが出てきます。 他の手段で代替することができず、ど…

KCCSの「クラウド利用者必見!新春 情報セキュリティソリューションセミナー」で講演します

…いてです。 クラウドのセキュリティというと、文字通り雲をつかむような話になりがちですが、できるだけ明確なお話ができるように準備したいと思います。# たとえば、クラウドに対する脆弱性診断ってできるの? みたいな疑問にお答えします日時:2011年1月28日(金曜日) 14時30分〜17時20分場所:KCCS東京支社(東京都港区)最寄り駅は泉岳寺費用:無料プログラム詳細、お申し込みはこちら https://www.kccs.co.jp/news/events/110128.html

講演予告3題

…る脆弱性とその対策 プログラム、申し込みはこちら @random な勉強会日時: 2010.10.30 (土) 13:00〜17:00 場所: 龍谷大学深草学舎 21 号館 406 室。 参加費用: 500円 (学生は無料) タイトル: 文字コードに起因する脆弱性とその対策 プログラム、申し込みはこちら Internet Week 2010日時: 2010年11月24日(水) 13:00〜15:30 場所: 富士ソフト アキバプラザ タイトル: S3 今日こそわかる、安全なW…

PHPカンファレンス テックデイにて講演します

…Oです。詳細は、講演プログラムをご覧ください。 タイトルは、「[T-6]文字コードに起因する脆弱性とその対策」ということで、現在の文字コードのセキュリティのレビュー的な講演になります。専門家の方には目新しい話題はないかと思いますが、現状のまとめとしてお聞きいただければと思います。 講演の目玉として、「文字コードに起因する脆弱性のデモ6連発」を実演する予定です。 PHPカンファレンスですので全てのデモをPHPで記述したかったのですが、PHPでは再現しにくいものもあり、4つがPH…

“完璧なWAF”に学ぶWAFの防御戦略

…をご存じでしょうか?プログラムなどでは<IMG>タグは画像添付に必須であり、WAFで禁止することは難しいのが実情で、ブラックリスト方式の課題となっています。 「現状の課題と“完璧なWAF”」より引用「<IMG>タグでXSSが発動」が具体的にどのようなパターンを指すのか曖昧だが、XSS Cheat SheetにはIMG要素によるXSSがいくつか紹介されているので、このようなパターンを指しているのかもしれない。 <IMG SRC="javascript:alert('XSS');…

携帯電話向けWebアプリのセッション管理はどうなっているか

…出てこない。サンプルプログラムのCD-ROM上で session を検索しても出てこないので、セッションはどこでも使っていないのだろう。 そうは言っても、本書にはブログやSNSなど認証が必要なアプリケーションも登場する。本書で採用している認証方式はこうだ。 携帯電話の個体識別番号を用いた、いわゆる「かんたんログイン」のみを使う 認証状態をセッション管理機構で維持しない。全てのページで毎回認証する そのため、「iモードID」など、ユーザに確認せずに自動的に送信されるIDを用いる…

PHP逆引きレシピは概ね良いが、SQLインジェクションに関しては残念なことに

…れはいささか筋の悪いプログラムと言えるだろう。 また、SQLの文字列→数値の暗黙の型変換は色々問題がある。この暗黙の型変換の結果がどうなるかは処理系依存であって、この点は以前数値リテラルをシングルクォートで囲むことの是非 - ockeghem(徳丸浩)の日記で紹介した。さらに、id:teracc氏が2009-06-05 - T.Teradaの日記にて補足いただいた内容によると、DB2ではそもそも文字列→数値の「暗黙の型変換」はエラーになるとのことである。 MySQLの場合、実…

正規表現で「制御文字以外」のチェック

…すが、以下のサンプルプログラムは *match* を表示します。正規表現のオプションs, m, msのいずれを追加しても同じ結果でした。 my $a = "1234\n"; if ($a =~ /^[0-9]+$/) { print "*match*\n"; } Perlにとって行末の\nは空気みたいな存在なんでしょうか。Webアプリ場合、通常改行は\r\nですが、その場合はチェックできます。問題は\n(ラインフィード)だけがついている場合です。パーセントエンコードで書くと、…

SQLインジェクション攻撃はDB上の任意データを盗み出す

…断」は、対象サイトのプログラムをセキュリティチームが、手作業でチェックし、顕在化していなかった問題点を含めて明らかにしていきます。「ソースコード診断」の結果を擬似攻撃診断に反映して行うことで、相乗効果が期待でき、より精度の高い診断を実施することができます。 最高の品質|サービスの強み|プロアクティブ・ディフェンス 先のサンプルプログラムも、公開前に自社の「ソースコード診断」を受けておけばよかった。 なお、図2-1、図2-2、図2-3は前回(第3回)の図(文字コードの問題などの…

続:SQLのバインド機構は「エスケープ処理された値」をはめ込むのか

…しく対応する」というプログラムを書きさえすればSQLインジェクションは防げるのであるから、『実行を阻止』などという仰々しい表現を用いる必要はないのだ。こういう表現はIPSやWAFに対して用いるべきだろう。 また、私が指摘していなかった箇所についても変更が行われている。指摘があったのだろう。 しかし、LIKE句を含むSQL文などについてはバインド機構の適用に注意を要する。これは、「%」や「_」といったワイルドカード文字がバインド機構によってエスケープされないため、割り当てる変数…

「なぜPHPアプリにセキュリティホールが多いのか?」のセキュリティホール

…,echoがないと,プログラムの正常系としても動作しない。どこかから,突っ込みが入ったのであろう,その後echoが追加された。しかし,まだ根本的におかしい。 なぜなら,以下の部分が間違っているからだ。 ブラウザなど,“\”がエスケープ文字になっているシステム あいまいな表現だが,上記の文脈では,HTMLのエスケープに「\」を使用するというように読める。しかし,HTMLのエスケープは実体参照や文字参照を用いるので,「\」はエスケープ文字ではないので,先のサンプルは意図通りに動か…

Shift_JISを利用することの是非

…妥当性をチェックする目的の設定ではないので、もっと明示的に文字エンコーディングのチェックを入れるべきだと思う(mb_check_encoding関数を用いるとよい)。 徳丸からのお勧め PHPソースコードを記述する文字エンコーディングにはShift_JIS以外を選ぶ。他の理由がなければUTF-8がよい プログラムの先頭でmb_check_encoding関数により文字エンコーディングの妥当性確認を明示的に行う htmlspecialcharsには文字エンコーディングを指定する

Making PL/0(その1)

…rn kind; }プログラム全体はこちら*2。 プログラム全体をご覧いただけば分かることだが、はじめからテスト用のPL/0コードも埋め込んで、字句読み取り器をテストすることからはじめた。 ご覧のように、いかにも泥縄的だ。記憶を頼りに作っているので、PL/0の予約語に"program"が入っていたりする。これではPascalだ。それはともかく、いったんこう書いてみて、一旦はテストまでしたところで、これはいかにもダラダラしたプログラムになりそうだと思った。PL/0の原典であるP…

hiddenフィールドの典型的な誤用(2)

…渡しているのは、このプログラムに対する入力である。すなわち、指定された会員番号に対する会員情報を表示するプログラムと考えるのだ。指定された会員の情報を表示してよいかどうかは、会員の権限に依存する。管理者権限があれば任意会員の情報を表示してよいが、一般会員は自分自身の情報のみ表示できる、こういう仕様は一般的だ。だとすると、現在ユーザの権限を確認した上で、表示する・しないを決定する。そうすれば、この画面は非常に汎用的に利用することが出来る。この場合、ハンバーガーショップの店員は以…

わが最初の文字コードファイト

…イナリ・テキスト変換プログラムが重宝がられたのでした。ところが、当時のコミュニケーションツールの主力だった掲示板は、通常無手順でアップロードしていましたから、文字化けが起こったら化けっぱなしになりえたわけです。あるいは、ダウンロード中に文字化けする場合もありますが、一々ダウンロードしなおすのも面倒くさい。ここで、シフトJISの特性上、一箇所でも文字化けが生じると、その影響が伝播する場合があります。例えば、以下の文字列。 小文字abcdeと入力する 「字」のシフトJISコードは…

「サニタイズ言うな」の先駆け?

…・クオートを取り除くプログラムの例を図3に示した。 一般にこの種のテクニックはインターネットでは広く利用されているが,筆者はこの種の方法は望ましくないと考えている。その理由は後述するとして,ではなぜ「危険な文字を除去する」という方法が広く行われているのであろうか。筆者は,Webアプリケーションが広まり始めたころにPerl言語によるCGI(CommonGatewayInterface)が主流だったからではないかと考えている。Perl言語を使えば,特定文字列の除去などは1行で書け…

Firefoxのひどい脆弱性

…由で、クライアントのプログラムを実行できることを確認しました(^^; 対策は、 いずれにしても、被害に遭うのを避けるには、信頼できないWebサイトを閲覧したり、信頼できないリンクをクリックしてはいけないという助言は、各アドバイザリーに共通している。 しかないようです。困ったなぁ。しばらくOperaに変えようかしら。 追記 id:hasegawayosukeさんからのコメントで教えていただいた方法を試すと、以下のような警告が出るようになりました。これ、使えますね。よかった、Op…

FizzBuzzのプログラム書法

…てプログラマに・・・プログラムが書けないのか?に関して、FizzBuzz問題がネットを賑やかしてますね。 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 ワンライナーとかはゲームなのでそれにクレームをつけるのはヤボだというのは分かっているのですが、元ネタの趣旨から言うと、トリッキーなプログラムが書けることよりは、ご…

大昔のJavaScriptプログラム

JavaScriptでふと思い出しました。昔々、こういうプログラムを作ったのを。 JavaScriptにより数独(ナンバープレイス)を解く 1998年5月だから、もう9年前ですね。 いちおー、JavaScriptのprototypeを多用して作っています(HTMLソースでご確認を)。現代風のJavaScriptのオブジェクト指向的なプログラミングと比べたらダメダメでしょうが、考古学的な価値はあるかもしれません。

数値項目に対するSQLインジェクション対策

…対しては、正しく動くプログラムを書いていれば、結果として脆弱性対策にもなっている。文字列項目に対するエスケープ処理は、その典型的な例である。 数値項目に対してはどうだろうか。数値を前提とした変数に数値以外の文字が混入した状態はエラーとすべきであって、処理を継続してはならない。たとえば、購入商品の数量が「1 or TRUE」などとなっていたら、処理を継続するのはおかしい。 ここで、サニタイズ的な発想だと「数値以外の文字を除去する」というアプローチになるのだろうが、これも賛同でき…

JavaScriptの動的生成

…てみよう。 サンプルプログラムの提示するもの サンプルとして定時されたプログラムは、GETパラメータflagの内容にしたがって、alert('aaa')とalert('bbb')を切り替えるものである。 サンプルなので仕方ないのかもしれないが、もう少し現実的なものを提示してもらわないと、有用性がよくわからない。JavaScriptだけでやっても大して変わらないのではないか?おそらく、この方法で効果が出るのは、もっと大きなスクリプトの場合だろうと思う。しかし、大きなJavaSc…

不適切な脆弱性サンプル

…ードを変更するというプログラムが例として取り上げられています。 ユーザIDの欄に、「yamada' OR user_id ='sato」を入力するとSQLインジェクションが発生するというのですが・・・ そもそも、ユーザIDにyamada、satoを2回に分けて実行しても、パスワードは変更できる。 つまり、指定ユーザに対するパスワード変更ができるかどうかという権限チェックがされていない・・・されていたら、SQLインジェクションのサンプルも動かないはず。というわけで、SQLインジ…