タグ

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

  • ActiveRecordのSQLインジェクションパターン

    (Last Updated On: 2018年10月7日)Railsで多用されているActiveRecordのインジェクションパターンを簡単に紹介します。出典はrails-sqli.orgなのでより詳しい解説はこちらで確認してください。特に気をつける必要があると思われる物のみをピックアップしました。 Exists?メソッド User.exists? params[:user] params[:user]などの使い方は危険です。RailsPHPなどと同様にuser[]というパラメーターで配列化します。 ?user[]=1 が入力の場合、 SELECT 1 AS one FROM "users" WHERE (1) LIMIT 1 となり不正なクエリが実行されます。 Calculateメソッド CalculateメソッドはSQLの集約関数を実行するメソッドです。average、calcula

    ActiveRecordのSQLインジェクションパターン
  • PHPer向け、Ruby/Railsの落とし穴

    (Last Updated On: 2018年8月13日)Railsアプリケーションを作る機会も多くなったと思います。今までPHPのみを使ってきた方の為に、開発者がよく落ちてしまうRails/Rubyの落とし穴を少しだけ紹介します。RailsからWebアプリをはじめる方にも役立つと思います。 to_iやto_fは型変換ではない 私のブログ読者はPHP開発者の方が多いと思うので基的なところから紹介します。RubyPHPよりデータ型に厳格です。例えば、””(空文字列)や0は偽(false)と評価されません。 2.0.0p247 :001 > true == true => true 2.0.0p247 :002 > true == false => false 2.0.0p247 :003 > "" == true => false 2.0.0p247 :004 > "" == false

    PHPer向け、Ruby/Railsの落とし穴
  • フレームワーク対決:Node.js+SailsとPHP+Phalconのベンチマーク

    (Last Updated On: 2018年8月13日)Node.jsは速いと言われています。Node.jsのMVCフレームワークであるSailsとPHP最速フレームワークであるPhalconとの性能を比較しました。 テスト環境はFedora19 x86_64です。Node.jsとPHPはFedora付属の物を使い予めインストールされているものとします。性能比較は公正を期すためにシングルプロセスで行います。 Node.jsは1つのコアしか使いません。Node.jsも複数のインスタンスを実行すればマルチコアも利用可能ですが、PHP+Apacheを利用するとホストのコア全部を使ってしまいます。あまりに不公平なのでシングルプロセス(PHPのビルトインWebサーバー)でのベンチマークにしました。 SailsとPhalconのインストール まずSailsのインストールから起動までのコマンドです。

    フレームワーク対決:Node.js+SailsとPHP+Phalconのベンチマーク
  • RailsのJavaScript文字列エスケープ

    (Last Updated On: 2018年8月13日)RailsJavaScript文字列エスケープメソッドをサポートしています。JavaScript文字列エスケープのエントリで様々な議論があったようです。弊社ではRailsアプリのソースコードも検査しているので、参考としてRailsのソースコードを確認したことを追記をしたました。Rails開発者に直して頂きたいので独立したエントリにしました。 参考: JavaScript文字列のエスケープ JavaScript文字列エスケープの解説 JavaScript文字列のエスケープを回避する方法 結論から言うとRailsJavaScript文字列エスケープメソッドには問題があります。問題点の指摘の前にどのようなコードになっているかを見てみます。 module ActionView module Helpers module JavaScri

    RailsのJavaScript文字列エスケープ
  • Rails4セキュリティ リローデッド(仮)

    (Last Updated On: 2018年8月8日)前回公開したRails4セキュリティのスライドは誤解をされる可能性があるのでは?と指摘される方も居たので「Rails4セキュリティ リローデッド」として追加情報を加えたスライドを作ろうかと思っていました。確かに、今見直したら肝心な所で追加し忘れてる部分があって誤解しやすい、というか言いたい事が分からないかも知れません。 入力パラメータをバリデーションするとは、バリデーションするメソッドを作ってバリデーションする、ことです。必須・許可設定だけだとモデルに渡すデータがどれかしか分かりません。許可設定と同時にバリデーションする事が良い、という事です。少なくともここだけは直した方が良さそうです。 あまり時間が取れなかったのでスライドを作るために作ったメモを取り敢えず公開します。スライドにして欲しいという方が多ければスライドにするかも知れません

    Rails4セキュリティ リローデッド(仮)
  • 岡山Ruby会議02のプレゼンテーション資料「Rials4 Security」

    (Last Updated On: 2018年8月13日)岡山Ruby会議02が先週末の土曜日にありました。私は「Rails 4 セキュリティ」をテーマに講演させていただきました。 プレゼン資料だけでは分かりづらいと思いますが、参考までに公開します。 Rails4Security.pdf 追記:肝心なところで記述漏れがあり、誤解もあったので解説を追加しています。こちらも合わせてご覧ください。 http://blog.ohgaki.net/rails4 資料の最後の方で必ずチェックすべき資料として紹介している文書のリンクを掲載しておきます。 Rails Security Guide OWASP TOP 10 SANS/CWE TOP 25 Rails4のサイトからリンクされているので見た方も多いと思いますが、Rails4: Zombie Outlawsは非常によくできたRails4紹介動画だ

    岡山Ruby会議02のプレゼンテーション資料「Rials4 Security」
  • 知っているようで知らないプリペアードクエリ

    (Last Updated On: 2018年8月19日)PostgreSQL Advent Calender 2012用のエントリです。 PostgreSQLや他のDBMSを利用していてプリペアードクエリを知らない方は居ないと思いますが、プリペアードクエリを使いこなす為のTIPSです。役に立つかどうか、は多少疑問ですが、内部がどうなっているか知っているとなにかの役に立つかも知れません。時間的制約で多少端折っているところは勘弁してください。 完全なSQLインジェクション対策は以下を参照してください。 完全なSQLインジェクション対策 libpqを知る libpqとはPostgreSQLデータベースサーバにアクセスするためのC言語のライブラリです。PHP,Ruby,Perl,Python,NodeJS,etcはlibpqを利用してPostgreSQLにアクセスするAPIを提供しています。 で

    知っているようで知らないプリペアードクエリ
  • セッションアダプションとセッションフィクセイションとセッションハイジャックの違いとは

    (Last Updated On: 2018年8月13日)徳丸さんがセッションアダプションをなくしても、セッションハイジャックが出来るのでsession_regenerate_id(true) (trueを付けると古いセッションデータは削除される)をしなければならないという記事を書かれています。 セッションアダプションがなくてもセッションフィクセイション攻撃は可能 http://tumblr.tokumaru.org/post/37676352092/session-adoption-and-session-fixation まず結論を書きます。徳丸さんが「セッションフィクセイション攻撃は可能」と言われているのは間違いです。正しくは「セッションハイジャックが可能」です。 この議論は別々の異なる脆弱性を一緒にした議論で正しい議論とは言えません。セッションアダプション、セッションフィクセイショ

    セッションアダプションとセッションフィクセイションとセッションハイジャックの違いとは
  • セッションアダプション脆弱性がないセッション管理が必要な理由

    (Last Updated On: 2018年8月18日)徳丸さんから「ブログ読みました。サンプルも動かしました。問題は分かるのですが、セッションアダプションがないPHPだと、何が改善されるのかが分かりません。教えて下さい 」とあったのでツイッターで返信するには少し長いのでこちらに書きます。まだ直していない脆弱性を詳しく解説するのはあまりよくないのですが、今なら影響を受けるアプリはほぼないと思うので構わないでしょう。 まず前提として、Webサーバと同様にJavascriptからもクッキーが設定できます。Javascriptインジェクションに脆弱なコードがサイトに1つでもあると、サイト上のセッションアダプション脆弱性をもつアプリへの攻撃が可能になります。この攻撃を緩和する対策もありますが、それはそれ、これはこれなので省略します。 セッションアダプションに脆弱なセッション管理機構で困る代表的な

    セッションアダプション脆弱性がないセッション管理が必要な理由
  • allow_url_fopen

    (Last Updated On: 2018年8月13日)追記: 現在のPHPではリモートファイル読み込みを制御するphp.ini設定としてallow_url_fopen(URL等のファイルとして読み込むフラグ)とallow_url_include(URLなどをPHPスクリプトとして読み込むフラグ)があります。php://input(標準入力用のURL。Webアプリの場合、POSTリクエストなどが読み込める)もallow_url_include=Offでは利用できません。このためallow_url_include=Offの場合、リモートスクリプトからの読み込みを防止できます。 基的には allow_url_includeは常に無効(JSONなどでなくPHPスクリプトとしてリモートデータを読む、などの場合は局所的に有効化) allow_url_fopenは全く必要ないなら無効 とすると良い

    allow_url_fopen
  • 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エスケープ
  • セキュリティ専門家でも間違える!文字エンコーディング問題は難しいのか?

    (Last Updated On: 2018年8月13日)一見徳丸さんのブログは分かりやすいように思えますが、それは単純な実験により分かりやすいように見えるだけで複数の間違いがあります。 その間違いとは 意図の取り違い – 誤読 言語の仕様と実装の理解不足 HTTPやPHP仕様の理解不足 セキュリティ対策をすべき場所の理解不足 です。(※0) 徳丸さんは非常勤とは言え、国の出先機関の研究員であるし、その出先機関は職務放棄とも言える文書(「例えば、PHPを使用しない」と勧める文書)を公開している(いた?)のでしっかり反論しておく必用がありますね。IPAのあの文書は職務放棄と言える文書だと思っています。これについても後で意見を述べます。 意図の取り違い – 誤読 最初の間違いは私のブログのエントリ「何故かあたり前にならない文字エンコーディングバリデーション」に対する理解です。特にPHPユーザに

    セキュリティ専門家でも間違える!文字エンコーディング問題は難しいのか?
  • yohgaki's blog - これからのプログラムの作り方 - 文字エンコーディング検証は必須

    (Last Updated On: 2016年3月3日)最近PostgreSQLMySQL両方にSJISエンコーディングを利用している際のエスケープ方法の問題を修正がリリースされています。この件は単純に「データベースシステムにセキュリティ上の脆弱性があった」と言う問題ではなく「アプリケーションの作り方を変える必要性」を提起した問題です。 参考:セキュアなアプリケーションのアーキテクチャ – sandbox化 PostgreSQLMySQLの脆弱性は特にSJIS等、マルチバイト文字に\が含まれる文字エンコーディングが大きな影響を受けますが、同類の不正な文字エンコーディングを利用した攻撃方法が他の文字エンコーディングでも可能です。例えば、UTF-8エンコーディングは1文字を構成するバイト列の最初のバイトの何ビット目までが1であるか、を取得してUTF-8文字として1バイト~6バイト必要なのか

    yohgaki's blog - これからのプログラムの作り方 - 文字エンコーディング検証は必須
  • PHP6移行で増える脆弱なWebアプリ

    (Last Updated On: 2009年9月19日)PHP6のリリースはまだまだ先の話なのですが、PHP6への移行で脆弱なWebアプリが大量に発生する可能性があります。 理由は2つ – mb_check_encodingで全ての入力文字エンコーディングが正しいかチェックしていない – PHP6のhtmlentities/htmlspecialcharにはマルチバイト文字チェックコードが削除される PHPのコードを書いている人も自覚していないと思いますが、この影響はかなりあると考えられます。 近日中にgihyo.jpのセキュリティブログに詳しい情報を記述します。 追記:PHP5.3のコードを見てみたら、バックポートすべきではないのにバックポートされてました。つまり、PHP6がリリースされたらと言う問題ではなく、今ある問題になっています。一応、改修を提案するつもりですがどうなるか判りませ

    PHP6移行で増える脆弱なWebアプリ
  • 1