ラベル Web の投稿を表示しています。 すべての投稿を表示
ラベル Web の投稿を表示しています。 すべての投稿を表示
2013/08/25

[書評]HTTPの教科書

HTTPの教科書
著者 : 上野宣
翔泳社
発売日 : 2013-05-25
ブクログでレビューを見る»
さらっと読めて、内容もまさにHTTPの教科書といった本。
HTTP関連の書籍といえば「Webを支える技術」もあるが、
こちらはどちらかと言うとネットワークとかプロトコル寄り。
あと、イラストなどもあり読みやすいので眠くならない(^_^;)
ずっとレビュー書いてなかったから少しどんな本だったか忘れ気味…。
SPDY についても解説していると話題になっていたので買いました。
簡単に概要がわかるのでオススメかと思います。
他にも Comet や WebSocket も合わせて解説してありました。

一点、ハッシュ化を暗号化と説明しているのが気になりましたが、
基本的にはわかりやすくて新人に読ませたいなぁと思いました。
というか僕が新人の時に読みたかったかも。
バーチャルホストとか知らなくて何言ってるかわからなかったことがあったので。

あと、Webを支える技術を引き合いに出してるけど悪い本じゃないよ。
HTTPの教科書が教科書ならWebを支える技術はどちらかというと辞書的だから眠くなっちゃうだけだよ!
REST API とか作る人は一回読んでおいた方が良い本です。オススメ。書評書いてないけど。
2012/09/04

[書評]ウェブデザインのつくり方、インターフェイスデザインの考え方。

ウェブデザインのつくり方、インターフェイスデザインの考え方。
矢野りん
発売日:2011-09-26
ブクログでレビューを見る»
Webデザインの基礎知識を幅広く解説した本。
Webデザインを始めたい人が読むのにちょうど良いボリューム。
デザインと言ってもアートなものではないのでプログラマも知っておいていいと思う。

「新しいウェブデザインの技法大全」と表紙にあるけどそこまでのものではないような気がするけども
一般的にWebデザインについて言われていることについてまとまっているので概要を知るのに役に立つ。

だいたいのことは知っていたけどオブジェクトとアクションに分けて分類するという考え方は知らなかった。
あと、カテゴリ分けの手法でLATCH法というのは知らなかった。
Location:位置, Alphabet:アルファベット, Time:時間, Category:分野, Hierarchy:階層で情報を分類する手法。
考え方が結構参考になる。

ウェブデザインのつくり方、インターフェイスデザインの考え方。
ウェブデザインのつくり方、インターフェイスデザインの考え方。
2012/06/09

パスワードとセキュリティ


最近パスワード漏洩とかで物騒ですね。
利用者側としても開発者側としても怖いです。
怖いからセキュリティについて少しだけ勉強したので知識の整理を。
勉強したてで間違ったことを書くかもしれません。
そんな時は派手に着火せずコメントでこっそり教えて下さい。

利用者側

パスワードを定期的に変更する理由は何ですか? - QA@IT

よく定期的にパスワードを変更しろって言われるけどなんで?ってことで
理由を体系的に学ぶ 安全なWebアプリケーションの作り方の著者が解説しています。
パスワードがハッシュ化(元に戻せないように変換)されていれば解析に時間がかかって
その間にパスワードを変えてしまえば大丈夫って理屈から
定期的にパスワードを変えろと言われるようになったみたいです。
でも最近は頑張れば解析時間を短縮できるから「定期的に」の基準がないみたいです。

あとは、実際にパスワードが漏れてもパスワードを変えてしまえば
変えた段階で悪用が止まるという理屈だそうです。
長期的にわたる盗聴的な悪用だったら意味があるけどすぐに何かを盗んだり改竄したりするような悪用だと意味無いです。
また、長期的にわたる悪用の場合でもパスワードが漏れた段階でシステムが対策してなかったら
パスワードを変えたところで再び漏れる可能性があるのでどうしようもないですね。
利用者にできるのは会員情報などをでたらめな情報に変更してから退会とかかな?
退会したからといって情報を削除しているとは限らないので…。

ユーザーはパスワードを定期的に変えろよーとか言われても面倒臭くてやりませんよねー
それどころかいくつも登録してると面倒でパスワードを同じにしてる人いるしね。
どこかでパスワードが漏れると全部危険になるので最低限パスワードは同じにしないとしても
それらをすべて定期的に変更とか現実的じゃないということでコレはなしですね。
あんまり変更しなくてもいいから各サイトのパスワードはバラバラにして長め(12文字くらい?)にした方が良さそうです。
英単語とかはダメですよ。辞書に載っているような単語とかを総当りでチャレンジしてくるからね。

開発者側

パスワードってどうやって保存すればいいの?

平文(入力値)のまま保存するとSQLインジェクションとかで漏れたら即死だぞー!早く対策しろー!どうなっても知らんぞー!
ということで元のパスワードに戻せないように変換(ハッシュ化)して保存したほうがいいです。
ハッシュ関数というので変換するのですが、そのアルゴリズム(変換方法)には
MD5、SHA-1、SHA-256などがあるようです。
ちなみに左から順に衝突しやすい(違う値を渡して同じハッシュ値が得られる、つまり違うパスワードでも正解ということに)。
MD5とか使ってもダメみたい。せいぜいファイルの同一性チェックのイメージしか無い。
SHA-1なら大丈夫かというと必ずしもそうでもないみたい。詳しくはこのあとに書きます。
SHA-256は今のところセーフ?技術やマシンが進歩するとどうなるかわからないから怖いです。
ハッシュ関数について軽く理解したい場合は「プロになるためのWeb技術入門とかいいんじゃないですかね。

SHA-1ハッシュ化されたパスワードは安全ですか? - QA@IT

ハッシュ化してしまえば元に戻すのはできないけど、ハッシュ化すること自体はできるんだから
総当り的に文字列をハッシュ化していって一致したら元の文字列がパスワードだってわかってしまいます。
その総当たりにどれだけの時間がかかるか、の勝負になるわけです。
しかも、レインボーテーブルと言って、文字列とハッシュ値のペアを持ったDBが存在するとか。
このレインボーテーブルのハッシュ値と漏洩したハッシュ値が一致すれば
パスワードは元の文字列だということになるわけです。ちなみにこの攻撃方法をレインボークラックと言うとか。
現在のコンピュータパワーだと文字列の長さは10文字程度までとのことなので、
パスワードは12文字とか長くしておいたほうがいいですね。
ユーザーが必ずしも長いパスワードを入力するとも限らないですし、
できるだけ安全性を高めるために開発者側はパスワードにソルトというものを付けてからハッシュ化したほうがいいようです。
ソルトを付けなかったがためにパスワードが漏洩したサービスがあるとか。

ソルトとは何ですか? - QA@IT

ソルト(salt)とは、
パスワードのハッシュ値を計算する際に、パスワードの前後に付加する文字列のことです。
たとえば、ソルト長が10文字、パスワードが最短8文字とすると、ソルトつきパスワードは最短18文字になります。
このように長いパスワードに対応するレインボーテーブルを作ることは現在のコンピューターパワーでは不可能なので、
ソルトはレインボーテーブルに対する効果的な対策です。
とりあえずハッシュ化する文字列が長ければレインボークラック対策になるってことですね。
ソルトを付けてからハッシュ化するので割とどんな文字でも良さそうかな?

パスワードのソルトの要件は? - QA@IT

じゃあソルトって何にしたらいいの?どう扱ったらいいの?って疑問に対しての回答。
とりあえずユーザー同士が同じパスワードを使っている場合には
各ユーザーのソルトが同じ場合は同じハッシュ値が得られることになってしまう。
すると同じハッシュ値のものはよく使われている単語によるパスワードだと推測できて
総当りによる攻撃がしやすくなるとのこと。ということでユーザーごとに異なるソルトを使いましょう。
ソルトの長さはパスワードと組み合わせてある程度の長さ(今のところ20文字程度?)があれば良いそうです。
今のところ10文字程度までの文字列しかレインボーテーブルにないので
パスワードにソルトを付けて十分の長さが得られれば良いということですね。
ソルトの文字列は別に乱数でなくても結局パスワードと組み合わせてハッシュ化するから関係ないかも。
でも乱数なら長さ的には申し分ないので乱数を使うのが多いそうです。
ハッシュ値とソルトは一緒にデータベースに保存するだろうけど漏れてしまえば
適当な文字列とソルトを結合してハッシュ化して試すだろうから
ソルトにそんなにこだわっても仕方ないかなという感じですね。
ユーザー毎に異なるソルトを十分な長さで使ってやればそれでいいみたいです。
無駄に長くするより何度もハッシュ化するストレッチングというのをする方が
解析する側の手間が増えて時間稼ぎになるらしいです。

これで十分?

ハッシュ化について結構書いたけど辞書式に総当り攻撃(ブルートフォースアタック)されたら
どれだけ安全なハッシュ化しようと関係ないんですよね…。
セキュリティはイタチごっこだから常に最新の情報を手に入れないと十分なんてことはないんだ!
だからセキュリティ関係の基礎知識を付けて最新情報を理解できるようにしよう!
2011年の記事だけど本当は怖いパスワードの話(1/4) - @ITにちゃんと書かれてます。
やっぱりこの記事も体系的に学ぶ 安全なWebアプリケーションの作り方の著者が書いてます。
著者の徳丸先生がBloggerやってるので読者になりました→徳丸浩の日記

こんな間違ってるかもしれない記事を書いたり読んだりしてないで著書を読めって話ですよね。すみません。
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
2012/06/03

[書評]「プロになるためのWeb技術入門」
なぜ,あなたはWebシステムを開発できないのか

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか
小森裕介
技術評論社
発売日:2010-04-10
ブクログでレビューを見る»
Webシステムを開発する上で必要な基礎知識を
Webアプリケーションの発展の歴史とともに学ぶことができる良書です。
なんとなくプログラミングできて、なんとなくフレームワークやデータベースを扱えて、
そんなプログラマがWebシステムを理解することができます。
Web系の企業でちゃんとしたエンジニアになりたいなら読んでおくべき一冊だと思います。
書籍案内:『プロになるためのWeb技術入門』―なぜ,あなたはWebシステムを開発できないのか|gihyo.jp 技術評論社
『プロになるためのWeb技術入門』サポートサイト

AndroidとかiOSとかでアプリばっかり作ってるからか、
Webシステムを作るための基礎知識が全然ありませんでした。
言葉は聞いたことあるけど理解していない、
実装する際に何がスタンダードなやり方なのか知らないという状況で、
コレはまずい!と思って急いで買ってきて読みました。

Web系の企業でWebシステムを開発するエンジニアは
この本に書いてある内容を理解していないとヤバいですね。
それくらいWebシステム開発の基礎知識が詰まっています。

半日くらいぶっ通しで読めば読み終わるくらいには読みやすいので
基礎知識に不安がある人は買ってきて土日で読むといいです。
読んだ翌週にはきっと生まれ変わったような感覚になれます。というかなりました。

目次を見ると古い技術から解説してあって今更そんな事知って何になるんだ、と思うかもしれませんが
Web技術の発展の過程で何が問題になってどのように解決していったのか、
どのように現在の高度化した技術が生まれたのかがわかるので
現在の技術、これからの技術を理解するのに役立ちます。

またWebシステムで必須のセキュリティ対策についてもわかりやすく書いてあり、
いきなり徳丸本を読むのはハードルが高いなぁって人にもオススメです。
他にも、戻るボタン問題やダブルサブミット問題についても書かれているので
困っている人には今すぐ役立つ内容になっています。

Web系企業ならこの本を研修とかで読ませればいいのに、と思いました。

2012/03/30

[書評]よくわかるPHPの教科書

よくわかるPHPの教科書
たにぐち まこと
毎日コミュニケーションズ
発売日:2010-09-14
ブクログでレビューを見る»
PHPをいっちょやってみっか!レベルの初心者には丁度いいかも。
Twitter風のサンプルも作れてノンプログラマには達成感あるかと思います。

訂正が多いけど第8刷以降なら大丈夫そう。
「よくわかるPHPの教科書」サポートサイト http://book.mycom.co.jp/support/pc/php/
マイナビ ブックス - よくわかるPHPの教科書
http://book.mycom.co.jp/book/978-4-8399-3314-2/978-4-8399-3314-2.shtml
実際にサンプルを動かしてないから中身空っぽな書評である。
軽く読んだ感じでは初心者向けに身近で適度に達成感のあるサンプルで満足させる系書籍という印象。
とりあえずPHPでどんな感じのことをやるのか知るのには丁度いいと思った。

そのへんがだいたいわかっている他の言語経験者は文法をPHP基礎文法最速マスター - Shin x blogで把握して、
PHP 逆引きレシピ (PROGRAMMER’S RECiPE)でやりたいことの方法を探すのが良さそう。

よくわかるPHPの教科書はブクログやAmazonなどで初心者から大絶賛されているけど…
もし『よくわかるPHPの教科書』の著者が徳丸浩の『安全なWebアプリケーションの作り方』を読んだら - ockeghem(徳丸浩)の日記
『よくわかるPHPの教科書』のSQLインジェクション脆弱性 - ockeghem(徳丸浩)の日記
生半可な知識でPHP触るの怖いっすなー

情報処理推進機構:情報セキュリティ:脆弱性対策:安全なウェブサイトの作り方
リンク貼っとかなきゃいけないような気がしたので。

次に読みたい
PHP 逆引きレシピ (PROGRAMMER’S RECiPE)
PHP 逆引きレシピ
(PROGRAMMER’S RECiPE)
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
体系的に学ぶ 安全なWebアプリケーションの作り方
脆弱性が生まれる原理と対策の実践
2012/01/20

Webの未来、Web Intentsのページを日本語訳してみた

Web Intentsとは

Google、複数のWebアプリでのコンテンツ編集を可能にするAPI「Web Intents」を立ち上げ - ITmedia ニュース
米Googleは8月4日(現地時間)、写真や文書などのオンラインコンテンツを多様なWebアプリで閲覧・編集・共有できるようにすることを目指すプロジェクト「Web Intents」を立ち上げたと発表し、APIを公開した。
同社のモバイルプラットフォームであるAndroidでは、既に「インテント」によってコンテンツを扱うアプリを呼び出せるようになっているが、Web Intentsは、この機能をWebアプリ向けに、より充実させたものになるという。
InfoQ: Web Intent: GoogleによるWebアプリ連携メカニズム
Google Chromeチームが Web Intentをリリースした。これはサードパーティサービスのカスタムAPIを使わずに、Webアプリケーションを連携可能にするAPIだ。Web IntentはAndroidのIntentのWeb版に相当するもので、実行時遅延バインディングを使ってアプリケーションとサービス間の疎な結合を可能にする。Web Intentはユーザフレンドリーな仕組みを提供することで、ユーザ自身によるサービス連携をコントロール可能にする。これにより、開発者の仕事も楽になる。
簡単にいえば、Web上でAndroidみたいにアプリ間の連携ができる凄い仕組みです。
Intentの仕組みを知り、Androidにハマった身としてはWeb Intentsはかなりアツい技術です。
公式ページはこちら:Web Intents : http://webintents.org/
今回はコチラのトップページと中段にあるDefault Intentsの各ページを日本語訳しました。

Web Intents http://webintents.org/

導入

ユーザーは、画像を共有する、ドキュメントを編集する、音楽を聞く、のような日々のタスクを処理するためにWeb上で多くのことなるサービスを使う。
ユーザーはそれらのアプリケーションがお互いにシームレスに接続され、動くことを期待する。

あらゆる新しいサービスを予測し、ユーザーが好むあらゆる存在する外部サービスと一体化することは開発者にとって不可能だ。
したがって、開発者にとって莫大な費用で数少ない選ばれたAPIと一体化することを選ばなければならない。

Web Intents はこれを解決する。
Web Intents はクライアント側のサービスの発見とアプリケーション間の通信のためのフレームワークである。
サービスはユーザーの利益になるようにアクションを処理できるインテンションを登録する。
アプリケーションは特定の動詞(共有、編集、閲覧、選択、など)のアクションをスタートする要求をし、
システムはユーザーの設定に基づいたユーザーが使うための適切なサービスをみつけるだろう。

Web Intents はユーザーをサービス統合のコントロールに置き、開発者の生活を簡単にする。

API

Web Intent API はシンプルに使うことが出来る。
サービス開発者は、サポートするつもりのインテントと、受け取ったデータでしたいことを定義する。
クライアントアプリケーションは単純に、与えられたパラメータで新しいアクションをプログラムを起動する。

インテントの登録

<intent
  action="http://webintents.org/share" 
  type="image/*" 
  href="share.html"
  disposition="window|inline"
 />

action

必須: 実行したいアクションを説明する動詞

type

オプション: タイプはフィルター

href

オプション: 指定されている場合、それはユーザーがサービスを選択した時に読み込まれているアクションを指すようになる。
未定義の場合、現在のページを使う。

disposition

オプション: 指定されている場合、それは"window"か"inline"のどちらかになる。
指定されていない場合、"window"がデフォルトになる。
"inline"が提供された時、サービスページはピッカーとして同じコンテクストで開かれる。
"window"の値は、新しいコンテクストでサービスを開く。

呼び出し

var intent = new Intent("http://webintents.org/share", 
  "text/uri-list", 
  "http://news.bbc.co.uk");
window.navigator.startActivity(intent);

デフォルトインテント

我々は、大多数のアプリケーションとサービスが使うことを望むデフォルトインテントの一式を照合する。
インテントを定義するために使われるスキーマURLは、自己文書化するようにデザインされている。

JavaScript Shim

これは根本的に新しいプラットフォームの機能で、どのブラウザでも実装されていない。
補正して、今日のリッチなアプリケーションを構築できるように、我々はAPIの互換性のあるJavaScriptシムを構築している。

始めることは簡単で、あなたのサイトに以下のコードを追加するだけだ。
現在、IE8, IE9, FF 3以上, Chrome 5以上, Safari を利用するユーザーが Web Intents の機能性を使うことができる。

<script src="http://webintents.org/webintents.min.js"></script>

コントリビュート

あなた自身がシムのホストしたい場合、the code repositoryに訪れてください。
議論に参加したい場合は、 Google Groupに参加して下さい。

拡張

インテントは、システムにハードコードされているどちらでもなく、アクションとデータタイプに基づいてマッチされている。
これは拡張やカスタマイズを簡単にする。
例えば、アクションの動詞がアクティビティストリーム"post"で、データタイプがアクティビティストリームオブジェクトのタイプの"audio"であってもよい。


以上がトップページの日本語訳です。
間違いや何か気になることがあったらコメントなどで指摘して下さい。

2012/01/15

[書評]WEB+DB PRESS 総集編 [Vol.1~60]

WEB+DB PRESS 総集編 [Vol.1~60]
森田 創,cho45,ミック,増井 俊之,山本 陽平,角谷 信太郎,
中島 拓,縣 俊貴,大塚 知洋,伊藤 直也,小飼 弾
技術評論社
発売日:2011-10-15
ブクログでレビューを見る»
各号の目次と書きおろしエッセイ「Topエンジニアが伝えたいこと」を読みました。
10年分のバックナンバーということでもはや古い内容もあるでしょうが、
この十年のWebを知るにはちょうどいいと思っています。
書きおろしエッセイも読む価値アリだと思います。

ちなみにバックナンバーは誤植訂正済みらしいです。
前に買ってから結構な積読期間があったんですが
こういうのを読んで感想を書ける場所(ココとかブクログとか)を手に入れて
調度良かったのでとりあえず冊子の方には目を通しました。

後はPDFに収録されている以前の総集編も読みました。
これからちょっとずつ毎号読んでいって感想を書こうかなと思っています。

それでは。

タグ(RSS)