2009-01-01から1年間の記事一覧
前回の記事にて、妥当なユーザIDとパスワードを決めました。そこで、さっそくバリデーション処理をBDDで実装しようとしたのですが、適切なシナリオがなかなか決まりません。たとえば、ユーザID。許可する文字種は英数字および「-」「.」「_」です。妥当な文…
趣味のWebアプリ製作において、ユーザ登録処理を現在実装中で、バリデーション仕様をどうするか考えてみました。その過程を晒します。何が妥当かなんて人それぞれだとは思いますが、一例ということで。 ユーザID 設計上、一部のURIにユーザIDが含まれる。URI…
なぜCucumberを選んだのか BDDでユーザ登録処理を実装し始めた。テスティングフレームワークにはCucumberを使っている。Cucumberを選んだのは、前提条件(Given)を明示的に書けるのが気に入ったからだ。以前使っていたRSpecでは書けなかった(RSpec::Story…
このところ、スケーラビリティについて私が考えても無駄ではないかと思い始めている。私が仕事で作っているのは小規模のWebアプリだし、転職する予定も今はない。趣味のほうはといえば、Webアプリ運営に使える予算などたかが知れていて、安いVPSが1台借りら…
id:samurai20000 さんの書かれた、クックパッドのレシピへのリンクに「つくれぽ」件数を追加するユーザースクリプト「cookpad_tukurepo」が、クックパッドのマークアップが変わって動かなくなっていたので、fork してみました。
「アーキテクチャ」という言葉を下記のように理解してかまわないのでしょうか。 たとえば Ruby on Rails が、Merb でも Sinatra でもない、現在の Ruby on Rails のような形になるにあたって下されたであろう設計判断の総体、および「現在の Ruby on Rails …
MVC とは「Model と View と Controller を分ける作法」のことである。そのような作法を総称して、一般に「アーキテクチャスタイル」や「アーキテクチャパターン」とよぶ(例:「REST は WWW のアーキテクチャスタイルだ」) Smalltalk というアーキテクチャ…
認証時にセッションIDを発行し、HTTPリクエストに含まれるセッションIDで認証済み状態を維持する手法を「セッション管理」とよぶ(すなわち、セッション管理は「認証」とは別物である) 認証やセッション管理の不備によるセッションID漏洩に備えることを「セ…
外出のため確認が遅くなってしまったのですが、「htmlspecialcharsに関する残念なお知らせ」という記事で触れたバグレポートが、reopenされ、fixされました。「改善される見込みは薄い」という私の予測は外れたわけで、申し訳ないと思うと同時に、htmlspecia…
「htmlspecialcharsのパッチ私案」に書いた件、バグレポートを出してみましたが、「すでに同じバグレポートがあるだろ」という理由により、あえなく却下されました。せめて先方が「同じ」とみなしているレポート番号ぐらいは示してほしくて、そのようにコメ…
PHPのhtmlspecialchars関数について、文字エンコーディングの妥当性チェックが不充分であること、また場合によってはXSS攻撃が可能になることが、下記ふたつの記事で指摘されています。 htmlspecialcharsは不正な文字エンコーディングをどこまでチェックする…
以前、設計勉強会でご一緒させていただいた坂本さんが、おもしろい記事を書かれています。 技術/TDD/JavaにおけるUnitTest時のMockオブジェクトの導入手法 - Glamenv-Septzen.net DIを使わずに依存オブジェクトをモックに差し替える手法を紹介する記事です。…
はてなブックマークモバイル版の脆弱性 昨日、はてなブックマークモバイル版の脆弱性に関する報告が公開されました。 「はてなブックマーク モバイル版」の脆弱性を利用した不正アクセスに関するご報告 - はてなブックマーク日記 - 機能変更、お知らせなど …
どのような脆弱性か 先日書いた「Rails 2系のXSS脆弱性がRuby 1.9では影響なしとされる理由」という記事に、奥さん(id:kazuhooku)より、下記のブックマークコメントをいただきました。 たとえばブログの場合、誰かに壊れたUTF-8を含むコメントを書き込まれ…
Rails 2系のXSS脆弱性を修正するパッチが先日公開されました。 4日(米国時間)、Ruby on Railsの2系すべてのバージョンにXSSの脆弱性があることがRiding Rails: XSS Vulnerability in Ruby on Railsにおいて発表された。特定のUnicode文字列を使ってチェック…
いわゆる「文字エンコーディング問題」は、セキュリティ専門家の間でも意見が分かれているようなので、そちらにおまかせします。今回は、RESTについて久々に考えてみます。日本Ruby会議2008で、山本陽平さんが「REST信者から見たRuby on Rails 2.0」と題した…
大垣さんの書かれた: 不正な文字エンコーディングを利用した攻撃は、文字エンコーディングを厳格に取り扱い、文字エンコーディングをバリデーションすれば無くなります。これを怠ると、システムのどこで問題が発生するか予想できなくなります。つまり、いい…
PHPのフレームワークを使った実際のプロジェクトでどういう風に設計し、その結果、どこが良かったか/いまいちだったかを皆で持ち寄って議論できればと思います。 第3回設計勉強会 - events.php.gr.jp という主旨の勉強会に、PHPのフレームワークを実際のプロ…
Webアプリケーションを作成する際には,POSTのリクエストをリダイレクトして,そのまま別のURLにPOSTさせるということはできないと思っておいたほうが良さそうですね. POSTリクエストをリダイレクトするとGETされる?POSTされる? - はこべにっき ♨ HTTP/1.1…
Ruptaに続いては、MVCのVに関わるライブラリを作ろうと思っています。さて、あるリソースについて、さまざまな表現でクライアントに返したいことがあります。単純な例は、コレクションリソースをHTML文書として返したり、Atomフィード文書として返したりする…
前々回の記事で「次回は、Ruptaを作成・公開するにあたって工夫した点や苦労した点について書こうと思っています」と予告しました。前回の記事ではライブラリインターフェースについて触れただけでしたので、今回は、工夫した点と苦労した点について触れなが…
前回の記事で「次回は、Ruptaを作成・公開するにあたって工夫した点や苦労した点について書こうと思っています」と予告しました。予告はしたものの、どこから書こうか迷っていたら、恰好のコメントをid:takahashimさんよりいただいたので、その辺りについて…
Ruptaという名前のRubyライブラリをGitHubで公開しました。 http://github.com/iwamot/rupta/tree/master http://iwamot.github.com/rupta/ (ドキュメント) Ruptaは、いわゆるWebアプリケーション用のルータライブラリです。ライブラリと名乗るのもおこが…
最近なんとなく: クラスの保持するインスタンス変数をなるべく少なくする インスタンス変数を使わないメソッドをクラスに含めない ようにすれば適切にクラス分割できるんじゃないかと考えていました。今日「凝集度と結合度:このコードのどこが悪いのか? -…
お題:クラス名からそのクラスを得るライブラリ Webアプリのフレームワークを作っていて、クラス名からそのクラスのインスタンスを生成したくなりました。リクエストURIによって呼び出したいコントローラが変わるためです。そこで、下記のような ClassGetter…
思いついた。デメテルの法則(Law of Demeter、デメテルの掟とも)とは、あるオブジェクトのメソッドの中で: オブジェクト自身 メソッドの引数 メソッドの中で生成したオブジェクト インスタンス変数 以外のオブジェクトのメソッドを呼び出すと大変なことに…
RSS BanditというWindows用フィードリーダーがあります。製作者のひとりであり、Microsoftのエンジニアでもある Dare Obasanjo 氏が、自身のブログで「RSS readers modeled after email clients are fundamentally broken」(Eメールクライアントに倣ったRSS…
前回の記事「RESTクライアントが知っているべきこと」に、id:nsiena さんからトラックバックをいただきました。 RESTful API の後方互換性 - Siena.の日記 斜め上の応答になってしまうかもしれませんが、思ったことを書いてみます。 API変更の性格分類とサー…
クライアントとサーバの密結合を避けられるのが、RESTスタイルに従って得られるメリットのひとつです。クライアントが、アプリケーションの挙動に関する知識をほとんど持たなくてよいわけです。とはいっても、まったく何も知らないではクライアントたりえま…
最近、HTTPやらWADLやらMVCやらについて考えていたのは、Webアプリケーションフレームワーク*1を自作する*2うえで必要な作業だったからでした。方向性は見えてきた(と思いたい)ので、今回は「フレームワークにおいてHTTPステータスコードをどう扱うべきか…