PHPに新たな脆弱性が見つかって、CGIモードで動作するPHPの場合コマンドライン引数がHTTP経由で渡せてしまうため、-sオプションを渡すとPHPのソースコードが丸見えになるというのが話題になってます。(-sオプションはhtmlでシンタックスハイライトまでしてくれてコードが見やすくなる) そこでFacebookに向けてこれを試してみると・・・ https://www.facebook.com/?-s こんな情報が!! <?php include_once 'https://www.facebook.com/careers/department?dept=engineering&req=a2KA0000000Lt8LMAS'; このURLにアクセスすると、セキュリティエンジニアの求人情報ページに行きます :) おしゃれー
28C3(28th Chaos Communication Congress)において、Effective Denial of Service attacks against web application platforms(Webプラットフォームに対する効果的なサービス妨害攻撃)と題する発表がありました(タイムスケジュール、講演スライド)。 これによると、PHPをはじめとする多くのWebアプリケーション開発プラットフォームに対して、CPU資源を枯渇させるサービス妨害攻撃(DoS攻撃)が可能な手法が見つかったということです。この攻撃は、hashdos と呼ばれています。 概要PHPなど多くの言語では、文字列をキーとする配列(連想配列、ハッシュ)が用意されており、HTTPリクエストのパラメータも連想配列の形で提供されます。PHPの場合、$_GET、$_POSTなどです。 連想配列の実装には
第3引数を指定していない場合の影響前述のように、htmlspecialchars関数の第3引数を指定していない場合、PHP5.3までは、文字エンコーディングがISO-8859-1が指定されたとみなされます。この場合、入力内容にかかわらず不正な文字エンコーディングと判定されることはありません。したがって、文字エンコーディングのチェックが働かない代わりに、エラーになることもありませんでした。 これに対して、PHP5.4の仕様により文字エンコーディングがUTF-8とみなされた場合に、Shift_JISやEUC-JPの2バイト文字が入力されると、高い確率で「UTF-8として不正」というエラーになり、htmlspecialchars関数の出力は空になります。つまり、プログラムが正常に動作しません。 htmlspecialchars関数の第3引数を指定しておらず、内部文字エンコーディングがShift_
7. ウェブアプリの入力、処理、出力入出力ウェブサーバウェブアプリ(PHP など)外部 API サーバ(Facebook API 、決済会社など)入出力処理入出力データベースサーバ(MySQL など)ウェブブラウザ 10. ウェブサーバーを通したウェブブラウザからの入力の仕様を考えようPHP に入ってくる値は何かを知る可変長のバイト列 (文字列ではない!!)GET パラメータPOST パラメータアップロードファイルリクエストヘッダ (Cookie など)実際の処理に渡すべき値は何かを考える文字列か、バイト列か?文字コードは何か?(ウェブサーバーでバイト列を処理することってあまりないので、 PHP では基本的に文字コードのバリデーションは必要だと思って良い)長さはどうか?どういう文法や構造を持つデータ?入力された値を実際の処理に渡すべき値かどうかを確認することを「バリデーション」という 11
このエントリでは、あるPHPの入門書を題材として、Ajaxアプリケーションの脆弱性について検討します。全3回となる予定です。 このエントリを書いたきっかけ twitterからタレコミをちょうだいして、作りながら基礎から学ぶPHPによるWebアプリケーション入門XAMPP/jQuery/HTML5で作るイマドキのWeという本を読みました。所感は以下の通りです。 タレコミ氏の主張のように、本書はセキュリティを一切考慮していない 主な脆弱性は、XSS、SQLインジェクション、任意のサーバーサイド・スクリプト実行(アップロード経由)、メールヘッダインジェクション等 脆弱性以前の問題としてサンプルスクリプトの品質が低い。デバッグしないと動かないスクリプトが多数あった 上記に関連して、流用元のソースやデバッグ用のalertなどがコメントとして残っていて痛々しい 今時この水準はないわーと思いました。以前
昨日のブログエントリ「PHP5.3.7のcrypt関数に致命的な脆弱性(Bug #55439)」にて、crypt関数の重大な脆弱性について報告しました。脆弱性の出方が近年まれに見るほどのものだったので、twitterやブクマなどを見ても、「どうしてこうなった」という疑問を多数目にしました。 そこで、このエントリでは、この脆弱性がどのように混入したのかを追ってみたいと思います。 PHPのレポジトリのログや公開されているソースの状況から、PHP5.3.7RC4までこのバグはなく、PHP5.3.7RC5でこのバグが混入した模様です。RC5はPHP5.3.7最後のRelease Candidateですから、まさに正式リリースの直前でバグが入ったことになります。 バグの入る直前のソースは、ここの関数php_md5_crypt_rから参照することができます。以下に、おおまかな流れを図示します。まずはバ
PHP5.3.7のcrypt関数には致命的な脆弱性があります。最悪のケースでは、任意のパスワードでログインできてしまうという事態が発生します。該当する利用者は、至急、後述する回避策を実施することを推奨します。 概要 PHPのcrypt関数は、ソルト付きハッシュ値を簡単に求めることができます(公式リファレンス)。crypt関数のハッシュアルゴリズムとしてMD5を指定した場合、ソルトのみが出力され、ハッシュ値が空になります。これは、crypt関数の結果がソルトのみに依存し、パスワードには影響されないことを意味し、crypt関数を認証に用いている場合、任意のパスワードでログインに成功する可能性があります。 影響を受けるアプリケーション crypt関数を用い、ハッシュアルゴリズムとしてMD5を指定しているアプリケーション。 環境にも依存しますが、デフォルトがMD5の場合もあります。筆者のテスト環境
たにぐちまことさんの書かれた『よくわかるPHPの教科書(以下、「よくわかる」)』を購入してパラパラと見ていたら、セキュリティ上の問題がかなりあることに気がつきました。そこで、拙著「体系的に学ぶ 安全なWebアプリケーションの作り方(以下、徳丸本)」の章・節毎に照らし合わせて、「よくわかる」の脆弱性について報告します。主に、徳丸本の4章と5章を参照します。 4.2 入力処理とセキュリティ 「よくわかる」のサンプルや解説では、入力値検証はほとんどしていません。しかし、入力値検証をしていないからといって即脆弱かというとそうではありません。徳丸本でも強調しているように、入力値検証はアプリケーション要件(仕様)に沿っていることを確認するもので、セキュリティ対策が目的ではないからです。 「よくわかる」の中で、私が見た範囲で唯一の入力値検証は、郵便番号のチェックをするものです。以下に引用します(「よくわ
Login with Google Account GoogleのアカウントにOpenIDでログインする実装チュートリアルが公開されています 実装コードはPHPで、参考にしてGoogleにログインして名前とメールアドレスを表示させるようなものになっているみたいです。 本番等にそのまま使うのはよくないと思いますが、たたき台として参考にできるかもしれません PHP+MySQL+PHP-Sessionを利用して実装されているみたいです。 関連エントリ ログイン/ユーザ登録といったフォーム実装用のフレームワーク「jFormer」 色々なサービスへ一発でログインできるオープンソース「Clipperz Community Edition」
WordPressのログインURLは何もしなければ 知っている方にはバレバレです。個人サイト なら気になりませんが、納品物だと少し不安 ではあるかなと思います。URLを変更するには .htaccessを触る必要がありますが、ハードル が高かったりして手を出せない方もいるかと思 います。 少し前にWordPressを使ってWeb制作をする為の手順リストっていう記事を書いたんですが、この中で紹介したプラグインが便利なのにまだ知名度が低い印象なので改めてご紹介。 WordPressで構築されているサイトのログインURLは基本的にhttp://domain.com/wp-login.phpで共通なので、知ってる人にはバレバレ。これはちょっと気持ち悪いので変更したいところです。 変えるには.htaccessにrewriteコードを追記するんですが、慣れていないと若干ハードルが高い印象です。これを、直
MyDB Studio: Simplify your MySQL admin ! (Best MySQL front end) SSHトンネリングに対応したMySQL管理GUIアプリ「MyDB Studio」。 フリーでダウンロード可能です。phpMyAdminをSSL経由でたたければいいのですが、SSL導入は証明書や作業コスト等何かと面倒で普通のhttp通信にしちゃってる場合もありそう。 大切なデータを生でネットワークに流すのはあんまりよろしくなさそうで、仮にユーザアカウントテーブルなどを参照した際、パスワードがハッシュ化されていなければそのままデータが漏洩することになりそうですね。 SSHトンネリングならばセキュアな通信が出来る上、なかなか高機能なGUIツールみたいなので、便利に使えそうです。 (追記:phpmyadmin等をポートフォワードしてもいいですね。) サーバにつないでデータ
先日ペコリンという Web サービスを公開したのですが、これが初めての WordPress との複合会員向けサービスだったためか、ログインが途中で切れたり、記事投稿時のリダイレクトがかかるタイミングなどで SESSION が切れてしまうことがありました。 しかし Twit Delay では長期的にログインが保持されていたり、mixi とかではログイン時間を指定できたりするので、なんとかできるものだろうと考えていたら Twitter で教えてもらいましたのでまとめておきます。 SESSION だけを使ったログインの保持では長期ログインは不可 私は今までログインの保持は以下のようにしていました。 1 2 3 4 5 <?php ini_set('session.gc_maxlifetime', 60*60*24); ini_set('session.gc_divisor', 10000); s
今日は、調べ物をしていて気が付いた点が ありましたので、メモも兼ねて記事にします。 WordPressのコメント欄はhttp://で始まる テキストを自動でリンクに変更してくれる親 切機能付きですが、ユーザーの意思でもな く、サイトの管理者の意思でも無いので、不要 に感じていたらこれを防ぎましょう、というもの。 スパムコメントの選別法の一つに、コメントに含まれるリンクの数があった場合に、スパム判定してくれなくなるのかな?という疑問があるのですが、Askimetに関して詳しい方がいらしたらご教授願います。「自動リンクそのもの」は関係ないと思っているんですが・・ちょっと情報が見当たりませんでした。 ハイパーリンクに自動置換する このようにコメント欄のurlのテキストは自動でリンク化されます。 コード 以下のコードを、お使いのテーマファイル内にあるfunctions.php内に書きます。 rem
ちょっとご質問頂いたのでついでに記事 にします。WPで、ログインユーザーにだけ 見せたいコンテンツ、よく見るのはログイン フォームとか管理画面へのリンクとかです かね。そういったユーザーのみにしか見せ たくないコンテンツを作りたい、という時に 使うコードです。 例えばマルチユーザーのサイトなんかにも良さそうですが、基本的に好きなコンテンツを入れる事が可能ですのでアイデア次第で利便性をあげられるかと思います。 コードです。 <?php if(current_user_can('read_private_pages')) : ?> ログインしないと見れない場所 <?php endif; ?> こんな感じで囲ってあげればOK。「ログインしないと見れない場所」の部分が隠したい場所になりますのでログインフォームなりチャットシステムなりお好きなコンテンツを入れてあげてください。納品物ならカレンダーなん
_問題点の概要 CodeZineから発表されている「PHPで作成する携帯会員サイトの基本」という記事はツッコミどころ満載で、既にいくつかの問題が修正されているのだが、まだ残っている問題があることや、修正内容にも疑問があるので、いくつか指摘してみたい。ざっと書いたところ、ものすごく長くなりそうだったので、小出しで「連載」の形で書く。忙しいので途中でやめるかもしれない。今回は、問題点の概要を報告する。 くだんの記事をざっと見たところ、以下の問題を見つけた。 IPアドレス制限のない「かんたんログイン」 Net_UserAgent_Mobileを用いて携帯電話の端末IDを取り出し、かんたんログインを実装しているが、ゲートウェイのIPアドレス経由であることを確認していない。以下のリストは、端末IDを取り出しているところ(4ページ目)。 $agent = Net_UserAgent_Mobile::s
JavaScript Cryptography JavaScript用暗号ライブラリ色々まとめ。 次のように多数のJS用暗号化ライブラリがまとまっていて、JSで暗号化をするような場合にはもうお腹いっぱいと言ってしまいそうな量が紹介されています。 自分で暗号を実装する、というのは時間がかかりますのでこうしたライブラリを活用させて頂いて素早く開発ができそうです。 関連エントリ PHP暗号化ルーチンのサンプル集 PHPで暗号化の際に便利に使えるCrypterクラスが公開 PHPで暗号化・復号化
How to create captcha in PHP using GD library ? Script tutorials PHPとGDを使ってCaptchaを自作するチュートリアル。 ライブラリを使えば簡単にできるものの、実際に作ってみるとなると、やったことがない場合難しいですが、このチュートリアルを参考にすることでCaptchaを自作出来ます。 とりあえずこれで作り方を覚えて、ライブラリなどを参考にしつつよりオリジナルなCaptchaを作ってみるのも良いかもしれませんね。 関連エントリ PHPで使えるCAPTCHA画像作成ライブラリまとめ GoogleライクなCAPTCHAをPHPで作成するサンプル PHP等で実装できる動画でCAPTCHAできるより強固な「NuCaptcha」 jQueryで実装するシンプルなグラフィックCAPTCHA「jQuery SimpleCaptcha」
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く