[ja] サマリー => 概要
This commit is contained in:
@@ -425,4 +425,4 @@ Javaに親しい読者はideaには不慣れだと思います、ideaはプラ
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [Goのコマンド](<01.3.md>)
|
||||
* 次へ: [サマリー](<01.5.md>)
|
||||
* 次へ: [概要](<01.5.md>)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 1.5 サマリー
|
||||
# 1.5 概要
|
||||
|
||||
この章では主にどのようにしてGoをインストールするかについてご紹介しました。Goは3つの種類のインストール方法があります:ソースコードインストール、標準パッケージインストール、サードパーティツールによるインストールです。インストール後開発環境を整え、ローカルの`$GOPATH`を設定します。`$GOPATH`設定を通じて読者はプロジェクトを作成することができます。次にどのようにプロジェクトをコンパイルするのか説明しました。アプリケーションのインストールといった問題はたくさんのGoコマンドを使用する必要があります。そのため、Goで日常的に用いられるコマンドツールについてもご説明しました。コンパイル、インストール、整形、テストなどのコマンドです。最後にGoの開発ツールについてご紹介しました。現在多くのGoの開発ツールには:LiteIDE、sublime、VIM、Emacs、Eclipse、Ideaといったツールがあります。読者は自分が一番慣れ親しんだツールを設定することができます。便利なツールで素早くGoアプリケーションを開発できるよう願っています。
|
||||
|
||||
|
||||
@@ -15,5 +15,5 @@ GoはCに似たコンパイラ型言語です。ですが、このコンパイ
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第一章サマリー](<01.5.md>)
|
||||
* 前へ: [第一章概要](<01.5.md>)
|
||||
* 次へ: [こんにちは、Go](<02.1.md>)
|
||||
|
||||
@@ -236,4 +236,4 @@ runtimeパッケージにはgoroutineを処理するいくつかの関数が含
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [interface](<02.6.md>)
|
||||
* 次へ: [サマリー](<02.8.md>)
|
||||
* 次へ: [概要](<02.8.md>)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 2.8 サマリー
|
||||
# 2.8 概要
|
||||
|
||||
この章では主にGo言語のいくつかの文法をご紹介しました。文法を通してGoがいかに簡単かご覧いただけたかと思います。たった25個のキーワードです。もう一度これらキーワードが何に使われるのか見てみることにしましょう。
|
||||
|
||||
|
||||
@@ -7,6 +7,6 @@ Webのプログラミングの基礎を勉強することはあなたにとっ
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第二章サマリー](<02.8.md>)
|
||||
* 前へ: [第二章概要](<02.8.md>)
|
||||
* 次へ: [webでの作業方法](<03.1.md>)
|
||||
|
||||
|
||||
@@ -154,5 +154,5 @@ httpパッケージへの分析を通して、全体のコードの実行プロ
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [Goはどのようにしてweb作業を行うか](<03.3.md>)
|
||||
* 次へ: [サマリー](<03.5.md>)
|
||||
* 次へ: [概要](<03.5.md>)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 3.5 サマリー
|
||||
# 3.5 概要
|
||||
この章ではHTTPプロトコル、DNS名前解決のプロセス、どのようにしてgoで簡単なweb serverを実装するかご紹介しました。net/httpパッケージのソースコードに触れるうちにこのserverを実装する秘密についてお分かりいただけたかと思います。
|
||||
|
||||
この章の学習を通じて、GoによるWeb開発の初歩をご理解いただければ幸いです。我々はまた対応するコードを見ることでGoでWebアプリケーションを開発することがとても便利でまた相当柔軟であると分かりました。
|
||||
|
||||
@@ -21,6 +21,6 @@ HTTPプロトコルはステートレスなプロトコルです。ではどの
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第三章サマリー](<03.5.md>)
|
||||
* 前へ: [第三章概要](<03.5.md>)
|
||||
* 次へ: [フォームの入力を処理する](<04.1.md>)
|
||||
|
||||
|
||||
@@ -152,5 +152,5 @@
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [フォームの多重送信の防止](<04.4.md>)
|
||||
* 次へ: [サマリー](<04.6.md>)
|
||||
* 次へ: [概要](<04.6.md>)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 4.6 サマリー
|
||||
# 4.6 概要
|
||||
这一章里面我们学习了Go如何处理表单信息,我们通过用户登陆、上传文件的例子展示了Go处理form表单信息及上传文件的手段。但是在处理表单过程中我们需要验证用户输入的信息,考虑到网站安全的重要性,数据过滤就显得相当重要了,
|
||||
この一章ではGoでどのようにフォームの情報を処理するか学びました。ユーザのログインから、ファイルのアップロードの例で、Goがformの情報およびファイルをアップロードする手段についてご説明しました。しかし、フォームを処理する過程ではユーザの入力した情報を懸賞する必要があります。ホームページのセキュリティの重要性を考慮すると、データのフィルタリングは相当重要です。そのため、以降の章では異なる方面のデータフィルタリングをご説明します。同時にGoの文字列に対する正規表現についても述べます。
|
||||
|
||||
|
||||
@@ -10,6 +10,6 @@ Goはどのようなデータベースの使用もbuiltinではサポートさ
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第四章サマリー](<04.6.md>)
|
||||
* 前へ: [第四章概要](<04.6.md>)
|
||||
* 次へ: [database/sqlインターフェース](<05.1.md>)
|
||||
|
||||
|
||||
@@ -111,5 +111,5 @@ mgoの操作方法とbeedbの操作方法はほとんど似ていることがわ
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [beedbライブラリを使用してORM開発を行う](<05.5.md>)
|
||||
* 次へ: [サマリー](<05.7.md>)
|
||||
* 次へ: [概要](<05.7.md>)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 5.7 サマリー
|
||||
# 5.7 概要
|
||||
この章ではGoがどのようにdatabase/sqlインターフェースを設計するのかご説明しました。その後、サードパーティによるリレーショナルデータベースドライバの使用をご紹介しました。次にbeedbというリレーショナルデータベースに基づくORMライブラリがどのようにしてデータベースに対して簡単な操作を行うかご説明しました。最後にNOSQLのいくつかの知識をご紹介しました。現在GoのNOSQLに対するサポートはなかなかよくできています。Goは21世紀のC言語ですから、21世紀のデータベースに対するサポートも非常によくできています。
|
||||
|
||||
この一章の学習を通じて、いろいろなデータベースをどのように操作するか学んできました。Webの中でも重要なデータの保存に関する問題が解決したので、みなさんのdatabase/sqlの設計思想により一歩進んだ理解が深まることを願っています。
|
||||
|
||||
@@ -8,6 +8,6 @@ Web開発ではどのようにしてユーザの閲覧家庭のすべてをコ
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第五章サマリー](<05.7.md>)
|
||||
* 前へ: [第五章概要](<05.7.md>)
|
||||
* 次へ: [sessionとcookie](<06.1.md>)
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ sessionメカニズムはサーバサイドのメカニズムです。サーバ
|
||||
|
||||
sessionメカニズム自身は特に複雑ではありませんが、その実装と設定の柔軟性は複雑を極めます。これは一回の経験やひとつのブラウザ、サーバのみの経験でもって普遍的に通用するものではありません。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
|
||||
上述の通り、sessionとcookieの目的は同じです。どちらもhttpプロトコルのステートレスであるという欠点を克服するためにあります。しかしその方法は異なります。sessionはcookieを通じてクライアントにsession idを保存します。またユーザの他のセッション情報はサーバのsessionオブジェクトに保存されます。これとは対照的に、cookieはすべての情報をクライアントに持たせる必要があります。そのためcookieにはある程度潜在的な脅威が存在します。例えばローカルのcookieに保存されたユーザ名とパスワードが解読されたり、cookieが他のホームページに収集されます(例えば:1.appAが主導的にゾーンBのcookieを設定し、ゾーンBにcookieを取得させます;2.XSS、appAでjavascriptを通じてdocument.cookieを取得し、自分のappBに送信します)。
|
||||
|
||||
|
||||
@@ -206,7 +206,7 @@ Webアプリケーションにはユーザのログアウト操作がありま
|
||||
|
||||
GCが十分にtimeパッケージのタイマー機能を利用していることがおわかりいただけるかと思います。時間が`maxLifeTime`を超えた後GC関数をコールした際、これによって`maxLiefTime`時間内でsessionが利用できることを保証できます。このような方法はまたオンラインユーザの数といった統計に用いることもできます。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
これまでに、WebアプリケーションにおけるグローバルなSession管理に用いられるSessionManagerを実装してまいりました。Sessionを提供するために用いられるストレージを定義し、Providerのインターフェースを実装しました。次の節では、インターフェースの定義を通してProviderを実装します。ぜひご参考ください。
|
||||
|
||||
## links
|
||||
|
||||
@@ -86,4 +86,4 @@ sessionが始まると、生成されたsessionIDの時間を記録する一つ
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [sessionストレージ](<06.3.md>)
|
||||
* 次へ: [サマリー](<06.5.md>)
|
||||
* 次へ: [概要](<06.5.md>)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 6.5 サマリー
|
||||
# 6.5 概要
|
||||
この章ではsession/cookieとは何かを、また両者の関係について勉強しました。しかし現在Goのオフィシャルパッケージではsessionがサポートされていません。そのため、sessionマネージャを設計しました。sessionの作成から破棄に至る全体の過程を実装し、Providerのインターフェースを定義することによって、各バックエンドのsessionストレージをサポートできるようにしました。第三節ではメモリストレージによってどのようにsessionの管理を実装するのかご紹介しました。第四節ではsessionハイジャックの過程と、どのようにsessionハイジャックを防止するのかを解説しました。第一章の解説を通して、読者の皆様方にはsessionの実行原理とどのように実現されるか、またどのように安全にsessionを使用するかについて理解いただけるよう望んています。
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# 7 テキスト処理
|
||||
Web開発においてテキスト処理は非常に重要な要素です。往々にして出力または入力する内容に対して処理を行う必要があります。ここでのテキストには文字列、数字、Json、XML等々が含まれます。高性能な一言語としてのGo言語では、これらのテキストの処理はすべてオフィシャルの標準パッケージにサポートされています。また利用中にGo標準ライブラリが巧みに設計されていることに気がつくでしょう。またユーザからすれば非常に簡単にこれらのテキストを処理することができます。本章では4つの節を通してユーザにGo言語のテキスト処理のよい知識をご紹介したいきたいと思います。
|
||||
|
||||
XMLは現在多くの標準インターフェースの対話型言語となっています。多くの場合Javaで書かれたwebserverとのやりとりはどれもXML標準にもとづいて行われます。7.1節ではどのようにXMLテキストを処理するかご紹介します。XMLを使用した後あまりに複雑だと気づきます。現在多くのインターネット企業の対外的なAPIでは多くがJSON形式を採用しています。この形式は描写が簡単ですが、意味をよく表現することができます。7.2節ではどのようにこういったJSON形式のデータを処理するかご説明します。正規表現は人に愛され、また恨まれる道具です。このテキスト処理能力は非常に協力です。我々は前のフォームの検証でその強力さをすでに味わっています。7.3節ではどのようにGoの正規表現を利用するのがよいかより詳しく解説していきます。Web開発において非常に重要な部分としてMVCの分離があります。Go言語ではWeb開発中Vにおいて`template`という専門的にサポートするパッケージがあります。7.4節ではテンプレートをつかってコンテンツをどのように出力するのか詳細に解説していきます。7.5節ではどのようにしてファイルとディレクトリを操作するのか詳しくご紹介します。7.6節のサマリーでは文字列に関する操作についてご紹介します。
|
||||
XMLは現在多くの標準インターフェースの対話型言語となっています。多くの場合Javaで書かれたwebserverとのやりとりはどれもXML標準にもとづいて行われます。7.1節ではどのようにXMLテキストを処理するかご紹介します。XMLを使用した後あまりに複雑だと気づきます。現在多くのインターネット企業の対外的なAPIでは多くがJSON形式を採用しています。この形式は描写が簡単ですが、意味をよく表現することができます。7.2節ではどのようにこういったJSON形式のデータを処理するかご説明します。正規表現は人に愛され、また恨まれる道具です。このテキスト処理能力は非常に協力です。我々は前のフォームの検証でその強力さをすでに味わっています。7.3節ではどのようにGoの正規表現を利用するのがよいかより詳しく解説していきます。Web開発において非常に重要な部分としてMVCの分離があります。Go言語ではWeb開発中Vにおいて`template`という専門的にサポートするパッケージがあります。7.4節ではテンプレートをつかってコンテンツをどのように出力するのか詳細に解説していきます。7.5節ではどのようにしてファイルとディレクトリを操作するのか詳しくご紹介します。7.6節の概要では文字列に関する操作についてご紹介します。
|
||||
|
||||
## 目次
|
||||

|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第六章サマリー](<06.5.md>)
|
||||
* 前へ: [第六章概要](<06.5.md>)
|
||||
* 次へ: [XMLの処理](<07.1.md>)
|
||||
|
||||
@@ -342,7 +342,7 @@ Webアプリケーションを作る時はテンプレートの一部が固定
|
||||
|
||||
>単一の集合のようなテンプレートは互いを知っています。もしあるテンプレートが複数の集合によって使用された場合、複数の集合の中で別々にパースされる必要があります。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
テンプレートに対する上記の詳細な紹介で、どのようにして動的なデータとテンプレートを融合させるかご理解いただけたかと思います:ループしたデータの出力、関数を定義、テンプレートのネスト等々。テンプレートの技術を応用することで、MVCパターンのVの処理を完成させることができます。以降の章ではどのようにMとCを処理するかご紹介します。
|
||||
|
||||
## links
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# 7.5 ファイルの操作
|
||||
どのようなコンピュータ設備でも、ファイルは必要です。またWebプログラミングでは、ファイルの操作はWebプログラマがよくぶつかる問題です。ファイルの操作はWebアプリケーションにおいて必須で、非常に有用です。我々はよくディレクトリ、ファイル(フォルダ)の編集といった操作を生成することになります。ここではGoによるこれらの操作に対して詳細なサマリーを作成し、どのように使用するか実例をお見せします。
|
||||
どのようなコンピュータ設備でも、ファイルは必要です。またWebプログラミングでは、ファイルの操作はWebプログラマがよくぶつかる問題です。ファイルの操作はWebアプリケーションにおいて必須で、非常に有用です。我々はよくディレクトリ、ファイル(フォルダ)の編集といった操作を生成することになります。ここではGoによるこれらの操作に対して詳細な概要を作成し、どのように使用するか実例をお見せします。
|
||||
## ディレクトリの操作
|
||||
ファイル操作の大部分の関数はどれもosパッケージにあります。以下にいくつかディレクトリの操作を行うものを挙げます:
|
||||
|
||||
|
||||
@@ -155,4 +155,4 @@
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [ファイルの操作](<07.5.md>)
|
||||
* 次へ: [サマリー](<07.7.md>)
|
||||
* 次へ: [概要](<07.7.md>)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 7.7 サマリー
|
||||
# 7.7 概要
|
||||
この章ではみなさんにXML、JSON、正規表現およびテンプレートの技術といったテキスト処理のツールをいくつかご紹介しました。XMLとJSONを使って様々な意味を表現することができます。正規表現ではテキストの検索/置換/切り取りといった処理を行うことができます。テンプレート技術を使うとこれらのデータをユーザに表示させることができます。これらはどれもWebアプリケーションを開発する過程で必要となる技術です。この節のご紹介を通じてどのようにテキストを処理、表示するかご理解いただけたかと思います。
|
||||
|
||||
## links
|
||||
|
||||
@@ -16,5 +16,5 @@ Go言語は21世紀のC言語です。性能と簡単さを追求するため、
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 次へ: [第七章サマリー](<07.5.md>)
|
||||
* 次へ: [第七章概要](<07.5.md>)
|
||||
* 前へ: [Socketプログラミング](<08.1.md>)
|
||||
|
||||
@@ -318,7 +318,7 @@ UDPサーバがどのように処理するか見てみましょう;
|
||||
}
|
||||
}
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
TCPとUDP Socketプログラミングの描写と実装を通して、GoはすでにSocketプログラミングを完全にサポートしていることがお分かりいただけたかと思います。使用に際してもとても便利です。Goはたくさんの関数を提供しています。これらの関数を使って簡単に高性能なSocketアプリケーションを書くことができます。
|
||||
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ GoにはRESTに対する直接のサポートはありません。しかし、RE
|
||||
上のコードではどのようにRESTなアプリケーションを書くかご覧いただきました。我々がアクセスするリソースはユーザです。異なるmethodによって異なる関数にアクセスしました。ここではサードパーティライブラリ`github.com/drone/routes`を使用しています。前の章でどのように自分で定義したルータを実現するかご紹介しました。このライブラリは自分で定義したルートと便利なルートのルールを反映させます。
|
||||
これを使って簡単にRESTのフレームワークを実装することができます。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
RESTはフレームワークスタイルの一種です。WWWの成功経験を汲み取っています:ステートレス、リソースを中心とし、HTTPプロトコルとURIプロトコルを十分利用しています。統一したインターフェース定義を提供し、Webサービスを設計する方法の一つとして流行しました。ある意味で、URIとHTTPといった黎明期のInternet標準を強調することで、RESTは大型のアプリケーションプログラムサーバ時代の前のWeb方式に回帰しています。現在GoはRESTに対するサポートはやはり簡単です。自分dね定義したルーティングを通して、異なるmethodに異なるhandleを実装することができます。このようにRESTのフレームワークは実現されています。
|
||||
|
||||
## links
|
||||
|
||||
@@ -383,7 +383,7 @@ json-rpcはTCPプロトコルにもとづいて実装されていることがお
|
||||
|
||||
}
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
GoはすでにRPCに対して良いサポートを提供しています。上のHTTP、TCP、JSON RPCの実装を通して、多くの分散型のWebアプリケーションの開発を簡単に行うことができます。読者であるあなたはすでにここまでマスターしたものと思われます。ただ残念なことに現在GoはまだSOAP RPCのサポートを提供していません。幸い現在すでにサードパーティのオープンソースで実現されています。
|
||||
|
||||
|
||||
@@ -391,4 +391,4 @@ GoはすでにRPCに対して良いサポートを提供しています。上の
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [REST](<08.3.md>)
|
||||
* 次へ: [サマリー](<08.5.md>)
|
||||
* 次へ: [概要](<08.5.md>)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 8.5 サマリー
|
||||
# 8.5 概要
|
||||
この章では現在流行しているいくつかの主なネットワークアプリケーションの開発方法についてご紹介しました。第一節ではネットワークプログラミングの基礎をご紹介しました。Socketプログラミングです。なぜなら現在ネットワークはクラウドの方向に急速に進化しています。この技術で展開されるsocket知識の基礎は開発者としてマスターしておかなければなりません。第二節では現在流行しつつあるHTML5の重要な特徴であるWebSocketについてご紹介しました。これを使うとサーバは主導的に情報をpushできるようになります。昔のajaxポーリングパターンの簡略化も述べました。第三節ではRESTプログラミングパターンをご紹介しました。これらのパターンは特にネットワークアプリケーションAPIの開発に適しています。上の四種類の開発方法において、Goはすでに良いサポートを提供しています。netパッケージおよびそのサブパッケージはいずれもネットワークプログラミングのツールの在り処を含んでいます。もしより詳しく関連する実装の詳細に足を踏み入れるのであれば、このパッケージのソースコードを試しに読んでみてください。
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
|
||||
@@ -16,5 +16,5 @@ Webアプリケーションプログラムのセキュリティ問題の理由
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第八章サマリー](<08.5.md>)
|
||||
* 前へ: [第八章概要](<08.5.md>)
|
||||
* 次へ: [CSRF攻撃の予防](<09.1.md>)
|
||||
|
||||
@@ -84,7 +84,7 @@ tokenを検証
|
||||
|
||||
このように基本的には安全なPOSTを実現しました。しかしもしtokenのアルゴリズムが暴かれてしまったらと思われるかもしれません。しかし理論上は破られることは基本的に不可能です。ある人が計算したところ、この文字列を無理に破るにはだいたい2の11乗の時間が必要です。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
クロスサイトリクエストフォージェリ、すなわちCSRFは非常に危険なWebセキュリティ問題です。Webセキュリティ界隈では"眠れる巨人"と呼ばれています。リスクレベルはこの"肩書き"を見ればお分かりでしょう。この節ではクロスサイトリクエストフォージェリの紹介にとどまらず、このようなセキュリティホールを生み出す原因の所在についても詳しくご説明しました。これでもって攻撃への防御を促し、読者に安全なWebアプリケーションを書いていただけますよう望んでいます。
|
||||
|
||||
## links
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
CleanMap["username"] = username
|
||||
}
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
データのフィルタリングはWebセキュリティにおいて基礎となる作用です。多くのセキュリティ問題はデータのフィルタリングと検証を行わなかったことによるものです。例えば前の節のCSRF攻撃と以降に説明するXSS攻撃、SQLインジェクション等はどれも真面目にデータをフィルタリングしなかった事によって引き起こされます。そのため、この部分の内容は特に重視する必要があります。
|
||||
|
||||
## links
|
||||
|
||||
@@ -43,7 +43,7 @@ XSSに関するより詳しい分析は"[新浪微博XSS事件分析](http://www
|
||||
このようにすることでブラウザにhtmlを出力させずjavascriptコードを解釈させることができます。
|
||||
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
XSSセキュリティホールはとても危険なものです。Webアプリケーションを開発している時、必ずデータをフィルタリングするよう肝に銘じておいてください。特にクライアントに出力する前に。これは現在のところXSSを防止する手段として有効です。
|
||||
|
||||
## links
|
||||
|
||||
@@ -61,7 +61,7 @@ SQLインジェクション攻撃の被害はこれだけ大きく、どのよ
|
||||
5. アプリケーションをデプロイする前になるべく専門のSQLインジェクション検査ツールを使って検査を行い、発見されたSQLインジェクションセキュリティホールにはすぐにパッチをあてる。ネット上ではこの方面のオープンソースツールがたくさんあります。例えばsqlmap、SQLninja等です。
|
||||
6. ページがSQLのエラー情報を出力するのを避ける。例えば型のエラー、フィールドのミスマッチ等です。コードのSQLクエリが暴露されることで攻撃者がこれらのエラー情報を利用してSQLインジェクションを行うのを防ぎます。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
上の例によってSQLインジェクションは被害が相当大きいセキュリティホールであるとわかりました。そのため我々が通常書くWebアプリケーションに対してはどのような小さな事でも非常に重視する必要があります。小さな事が命運を分けます。生活も同じ、Webアプリケーションを書くことも同じです。
|
||||
|
||||
## links
|
||||
|
||||
@@ -77,7 +77,7 @@ Go言語のこの三種類の暗号化アルゴリズムの実装は以下の通
|
||||
|
||||
上の方法によってユニークな対応するパスワードの値を取得することができます。これは現在までもっともクラックが難しいものです。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
ここまででもしあなたに危機感が芽生えたのだとすれば、行動すべきです:
|
||||
|
||||
- 1)もし普通のユーザであれば、LastPassによってパスワードを保存/生成するのをおすすめします。異なるサイトで異なるパスワードを使用します。
|
||||
|
||||
@@ -112,11 +112,11 @@ Go言語の`crypto`では双方向暗号の高度な暗号化/復元パッケー
|
||||
|
||||
この3つの関数は暗号化/復元操作を実現します。詳細な操作は上の例をご覧ください。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
この節ではいくつかの暗号化/復元アルゴリズムをご紹介しました。Webアプリケーションを開発している時は要求に合わせて異なる方法によって暗号化/複合を行うことができます。一般的なアプリケーションではbase64アルゴリズムを採用することができます。より高度な場合はaesやdesアルゴリズムを採用することができます。
|
||||
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [パスワードの保存](<09.5.md>)
|
||||
* 次へ: [サマリー](<09.7.md>)
|
||||
* 次へ: [概要](<09.7.md>)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 9.7 サマリー
|
||||
# 9.7 概要
|
||||
この章ではCSRF攻撃、XSS攻撃、SQLインジェクション攻撃といったWebアプリケーションの典型的な攻撃手法をご紹介しました。これらはどれもアプリケーションがユーザの入力に対して良いフィルタリングを起こさなかったことによるものです。そのため、攻撃の方法をご紹介する以外に、これらの攻撃の発生を防止する方法としてどのようにして有効にデータをフィルタリングするかについてもご紹介しました。また、日増しに発生する重大なパスワード漏洩事件に対し、Webアプリケーションを設計する上で採用可能な暗号化ソリューションについて基礎から専門的なものまでご紹介しました。最後に慎重に扱うべきデータに対する暗号化/復元をご紹介しました。Go言語では三種類の双方向暗号化アルゴリズムを提供しています:base64、aesとdesの実装です。
|
||||
|
||||
この章を書いた目的は読者の意識でセキュリティの概念を強化して欲しいと思ったからです。Webアプリケーションを書く時はぜひご注意していただき、我々が書くWebアプリケーションをハッカー達の攻撃から遠ざけるようにしてください。これらのパッケージを十分に利用することで、安全なWebアプリケーションを作ることができます。
|
||||
|
||||
@@ -21,5 +21,5 @@
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第九章サマリー](<09.7.md>)
|
||||
* 前へ: [第九章概要](<09.7.md>)
|
||||
* 次へ: [デフォルトロケールの設定](<10.1.md>)
|
||||
|
||||
@@ -76,7 +76,7 @@ URLアドレスをもっとRESTfulな見た目にしたいと思うかもしれ
|
||||
|
||||
当然ユーザにあなたが提供するセレクトボックスや他の何らかの方法で対応するlocaleを設定させることもできます。ユーザの入力した情報を、このアカウントに関連するprofileに保存し、ユーザが再度ログインした時にこの設定をlocale設定にコピーします。これによってこのユーザの毎回のアクセスで自分が以前に設定したlocaleをもとにページを取得するよう保証することができます。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
上のご紹介から、Localeの設定にはいくつもの方法があるとわかりました。要求の違いによって異なるLocaleの設定方法を選択する必要があります。ユーザが最もよく知る方法で我々が提供するサービスを得る事で、アプリケーションのユーザビリティを高めます。
|
||||
|
||||
## links
|
||||
|
||||
@@ -126,7 +126,7 @@ Localeの違いによってビューを表示させる場合もあるかもし
|
||||
|
||||
このような方法を採用することでビューとリソースをローカライズすると、用意に拡張を行うことができます。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
この節ではどのようにしてローカライズリソースを使用し、保存するかご紹介しました。ある時は置換関数によって実装する必要があり、またある時はlangによって設定する必要があります。しかし最終的にはどれもkey-valueの方法によってLocaleに対応したデータを保存することになります。必要な時に対応するLocaleの情報を取り出して、もしそれがてkしうと情報であれば直接出力し、もし時間や日時または通過であった場合は`fmtPrintf`を使ったりその他のフォーマッタ関数によって処理する必要があります。異なるLocaleのビューとリソースに対しては最も簡単で、パスにlangを追加するだけで実装することができます。
|
||||
|
||||
## links
|
||||
|
||||
@@ -171,10 +171,10 @@
|
||||
|
||||
{{.V.Money | M}}
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
この節を通して多言語パッケージのWebアプリケーションをどのようにして実現するかわかりました。カスタム言語パッケージでは便利に多言語を実装することができます。また、設定ファイルによって非常に簡単に複数の言語を拡張することもできます。デフォルトではgo-i18nはパブリックな設定ファイルをロードします。例えば時間、通貨等です。非常に簡単に使用することができ、同時にテンプレートにおいてこれらの関数をサポートするため、対応するテンプレート関数も実装しました。このようにしてWebアプリケーションを開発する際直接テンプレートにおいてpipelineの方法で多言語パッケージを操作することができます。
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [ローカライズリソース](<10.2.md>)
|
||||
* 次へ: [サマリー](<10.4.md>)
|
||||
* 次へ: [概要](<10.4.md>)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 10.4 サマリー
|
||||
# 10.4 概要
|
||||
この章の紹介を通じて、読者はどのようにしてi18nを操作するかに対して深く理解が得られたはずです。私もこの章の内容にもとづいてオープンソースのソリューションであるgo-i18nをご紹介しました:https://github.com/astaxie/go-i18n このオープンソースライブラリを通して多言語バージョンのWebアプリケーションを非常に簡単に実現することができ、我々のアプリケーションに気楽に国際化を実現させることができます。もしこのオープンソースライブラリに間違いや足りない部分があれば、ぜひこのオープンソースプロジェクトに参加することで、このライブラリがGoの標準ライブラリになるよう手助けしてください。
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
|
||||
@@ -15,5 +15,5 @@ Webアプリケーションを開発するにあたって、エラーは避け
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第十章サマリー](<10.4.md>)
|
||||
* 前へ: [第十章概要](<10.4.md>)
|
||||
* 次へ: [エラー処理](<11.1.md>)
|
||||
|
||||
@@ -192,7 +192,7 @@ Goはエラー処理においてCに似た戻り値を検査する方法を採
|
||||
|
||||
上で示したとおり、viewにアクセスした際異なる状況によって異なるエラーコードとエラー情報を取得することができます。これははじめのバージョンに比べてコード量にさほど変化はありませんが、これが表示するエラーはよりわかりやすくなっています。提示されるエラー情報のユーザビリティが高められ、拡張性もはじめのものに比べてよくなっています。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
プログラムの設計において障害の許容は重要な仕事の一部です。Goではエラー処理によってこれを実現します。errorはひとつのインターフェースに過ぎませんが、多くに変化させることができます。自分の需要に合わせて異なる処理を実装することができます。最後にご紹介したエラー処理の方法で、皆様によりよいWebエラーの処理の方法を設計するにあたってご助力になれば幸いです。
|
||||
|
||||
## links
|
||||
|
||||
@@ -241,7 +241,7 @@ GDBが実行している現在のプログラムの環境ではいくつかの
|
||||
|
||||
goroutinesのコマンドを確認することでgoroutineの内部がどのように実行されているのか詳しく理解することができます。各関数のコールされる順番はすでにはっきり表示されています。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
この章ではGDBデバッグにおけるGoプログラムの基本コマンドのいくつかをご紹介しました。`run`、`print`、`info`、`set variable`、`continue`、`list`、`break`といったよく使われるデバッグコマンドを含め、上のデモで行ったように、読者はすでにGoプログラムに対してGDBを使ったデバッグを基本的に理解したものと信じています。もしより多くのデバッグテクニックを知りたければオフィシャルのページのGDBデバッグの項目をご参照ください。
|
||||
|
||||
## links
|
||||
|
||||
@@ -139,11 +139,11 @@ Go言語はあらかじめ用意されている軽量なテストフレームワ
|
||||
|
||||
上の結果は我々がどのような`TestXXX`なユニットテスト関数も実行していないことを示しています。表示される結果は耐久テスト関数のみを実行しただけです。第一行には`Benchmark_Division`が500000000回実行され示し、毎回の実行が平均で7.76ミリ秒であったことを示しています。第二行は`Benchmark_TimeConsumingFunctin`が500000000回実行され、毎回の平均実行時間が7.80ミリ秒であったことを示しています。最後の1行は全体の実行時間を示しています。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
上のユニットテストと耐久テストの学習を通じて、`testing`パッケージが非常に軽量で、ユニットテストと耐久テストを書くのは非常に簡単であるとわかりました。ビルトインの`go test`コマンドを組み合わせることで、非常に便利にテストを行うことができます。このように我々が毎回コードを修正し終わる度に、go testを実行するだけで簡単に回帰テストを行うことができます。
|
||||
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [GDBを使用したデバッグ](<11.2.md>)
|
||||
* 次へ: [サマリー](<11.4.md>)
|
||||
* 次へ: [概要](<11.4.md>)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 11.4 サマリー
|
||||
# 11.4 概要
|
||||
この章では3つの節に分けてGo言語においてどのようにエラーを処理するか、どのようにエラー処理を設計するかをご紹介しました。第二節ではどのようにしてGDBを使ってプログラムをデバッグするかご紹介しました。GDBを使うことで我々は簡単にステップ実行、変数の表示、変数の修正、実行過程の出力等を行うことができます。最後にどのようにしてGo言語がはじめから持っている軽量なフレームワーク`testing`を利用してユニットテストと耐久テストを書くかについてご紹介しました。`go test`を使用することで便利にこれらのテストを行うことができ、将来のコードがアップグレードされ、修正された後でも簡単に回帰テストを行うことができます。この章はあなたがプログラムのロジックを書くことに対して何の助けにもならなかったかもしれません。しかし、あなたが書いたプログラムコードの質を高く保つには非常に重要です。なぜならよくできたWebアプリケーションは必ずよくできたエラー処理メカニズム(エラーの表示がユーザフレンドリーで拡張性がある)を持っているからです。ユーザフレンドリーなユニットテストと耐久テストは実運用が開始された後のコードが良い性能を保ち、予定通り実行されることを保証してくれます。
|
||||
|
||||
## links
|
||||
|
||||
@@ -7,5 +7,5 @@
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第十一章サマリー](<11.4.md>)
|
||||
* 前へ: [第十一章概要](<11.4.md>)
|
||||
* 次へ: [アプリケーションログ](<12.1.md>)
|
||||
|
||||
@@ -157,7 +157,7 @@ seelogはカスタムなログ処理の定義をサポートしています。
|
||||
|
||||
このような方法によって簡単に対応する情報を探し出すことができます。これにはアプリケーションログに対して統計と分析を行えるという利点があります。また、ログのサイズを考慮する必要もあります。高トラフィックのWebアプリケーションにとって、ログの増加は恐るべきものです。そのため、seelogの設定ファイルでlogrotateを設定することで、ログファイルが絶え間なく増大し我々のディスクスペースが足りなくなるといった問題を引き起こさないよう保証することができます。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
上のseelogシステムとこれに基づいてどのようにログシステムを定義するかを学ぶことによって、非常に気軽に強力で適切な機能を持つログシステムを作成できることができました。ログシステムはデータ分析に信用できるデータソースを提供します。例えばログの分析を通して、システムをより一歩改善することができますし、アプリケーションに問題が発生した時に問題の位置を特定しやすくなります。また、seelogはログのレベル分け機能もサポートしています。minlevelの設定によって簡単にテストや配布版の出力情報のレベルを設定することができます。
|
||||
|
||||
## links
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
上ではエラーと例外の区別をご紹介しました。我々がプログラムを開発する時はどのように設計すべきでしょうか?ルールは非常に簡単です:もしあなたが定義した関数が失敗する可能性があるなら、エラーを返さなければなりません。他のpackageの関数をコールする時、もしこの関数の実装がとてもよい場合、panicの心配をする必要もありません。本当に例外を発生させなければならない状況ではないのに発生させてしまっているにしても、私がこれを処理するいわれはないはずです。panicとrecoverは自分が開発したpackageで実装されたロジックや、特殊な状況に対して設計されます。
|
||||
|
||||
## サマリー
|
||||
## 概要
|
||||
この節では我々のWebアプリケーションをデプロイした後どのようにして各種のエラーを処理するかについてまとめました:ネットワークエラー、データベースエラー、オペレーティングシステムのエラー等、エラーが発生した際、我々のプログラムはどのようにして正しく処理するのでしょうか:ユーザフレンドリーなエラーインターフェースを表示し、操作をロールバックし、ログを記録し、管理者に通知するといった操作を行います。最後にどのようにしてエラーと例外を正しく処理するかについてご紹介しました。一般的なプログラムにおいてはエラーと例外はよく混同されます。しかし、Goではエラーと例外は常に明確な区別がなされます。そのため、我々がプログラムを設計するにあたってエラーと例外を処理する際はどのような原則に従うべきかについてご紹介しました。
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
- 1.2. [GOPATHとワーキングディレクトリ](01.2.md)
|
||||
- 1.3. [Goのコマンド](01.3.md)
|
||||
- 1.4. [Goの開発ツール](01.4.md)
|
||||
- 1.5. [サマリー](01.5.md)
|
||||
- 1.5. [概要](01.5.md)
|
||||
* 2.[Go言語の基礎](02.0.md)
|
||||
- 2.1. [こんにちは、Go](02.1.md)
|
||||
- 2.2. [Goの基礎](02.2.md)
|
||||
@@ -12,20 +12,20 @@
|
||||
- 2.5. [オブジェクト指向](02.5.md)
|
||||
- 2.6. [interface](02.6.md)
|
||||
- 2.7. [マルチスレッド](02.7.md)
|
||||
- 2.8. [サマリー](02.8.md)
|
||||
- 2.8. [概要](02.8.md)
|
||||
* 3.[Webの基礎](03.0.md)
|
||||
- 3.1 [webでの作業方法](03.1.md)
|
||||
- 3.2 [Goで簡単なwebサーバを立てる](03.2.md)
|
||||
- 3.3 [Goはどのようにしてweb作業を行うか](03.3.md)
|
||||
- 3.4 [Goのhttpパッケージ詳細](03.4.md)
|
||||
- 3.5 [サマリー](03.5.md)
|
||||
- 3.5 [概要](03.5.md)
|
||||
* 4.[フォーム](04.0.md)
|
||||
- 4.1 [フォームの入力を処理する](04.1.md)
|
||||
- 4.2 [フォームに入力された内容の検証](04.2.md)
|
||||
- 4.3 [クロスサイトスクリプティングの予防](04.3.md)
|
||||
- 4.4 [フォームの複数回送信の防止](04.4.md)
|
||||
- 4.5 [ファイルのアップロード処理](04.5.md)
|
||||
- 4.6 [サマリー](04.6.md)
|
||||
- 4.6 [概要](04.6.md)
|
||||
* 5.[データベースへのアクセス](05.0.md)
|
||||
- 5.1 [database/sqlインターフェース](05.1.md)
|
||||
- 5.2 [MySQL データベースの使用](05.2.md)
|
||||
@@ -33,13 +33,13 @@
|
||||
- 5.4 [PostgreSQLデータベースの使用](05.4.md)
|
||||
- 5.5 [beedbライブラリを使用してORM開発を行う](05.5.md)
|
||||
- 5.6 [NOSQLデータベースの操作](05.6.md)
|
||||
- 5.7 [サマリー](05.7.md)
|
||||
- 5.7 [概要](05.7.md)
|
||||
* 6.[sessionとデータの保存](06.0.md)
|
||||
- 6.1 [sessionとcookie](06.1.md)
|
||||
- 6.2 [Goはどのようにしてsessionを使用するか](06.2.md)
|
||||
- 6.3 [sessionストレージ](06.3.md)
|
||||
- 6.4 [sessionハイジャックの予防](06.4.md)
|
||||
- 6.5 [サマリー](06.5.md)
|
||||
- 6.5 [概要](06.5.md)
|
||||
* 7.[テキスト処理](07.0.md)
|
||||
- 7.1 [XMLの処理](07.1.md)
|
||||
- 7.2 [JSONの処理](07.2.md)
|
||||
@@ -47,13 +47,13 @@
|
||||
- 7.4 [テンプレートの処理](07.4.md)
|
||||
- 7.5 [ファイルの操作](07.5.md)
|
||||
- 7.6 [文字列の処理](07.6.md)
|
||||
- 7.7 [サマリー](07.7.md)
|
||||
- 7.7 [概要](07.7.md)
|
||||
* 8.[Webサービス](08.0.md)
|
||||
- 8.1 [Socketプログラミング](08.1.md)
|
||||
- 8.2 [WebSocket](08.2.md)
|
||||
- 8.3 [REST](08.3.md)
|
||||
- 8.4 [RPC](08.4.md)
|
||||
- 8.5 [サマリー](08.5.md)
|
||||
- 8.5 [概要](08.5.md)
|
||||
* 9.[セキュリティと暗号化](09.0.md)
|
||||
- 9.1 [CSRF攻撃の予防](09.1.md)
|
||||
- 9.2 [入力フィルタリングの確保](09.2.md)
|
||||
@@ -61,30 +61,30 @@
|
||||
- 9.4 [SQLインジェクションの回避](09.4.md)
|
||||
- 9.5 [パスワードの保存](09.5.md)
|
||||
- 9.6 [データを暗号化/復元する](09.6.md)
|
||||
- 9.7 [サマリー](09.7.md)
|
||||
- 9.7 [概要](09.7.md)
|
||||
* 10.[国際化とローカライズ](10.0.md)
|
||||
- 10.1 [デフォルトロケールの設定](10.1.md)
|
||||
- 10.2 [ローカライズリソース](10.2.md)
|
||||
- 10.3 [国際化サイト](10.3.md)
|
||||
- 10.4 [サマリー](10.4.md)
|
||||
- 10.4 [概要](10.4.md)
|
||||
* 11.[エラー処理、デバッグとテスト](11.0.md)
|
||||
- 11.1 [エラー処理](11.1.md)
|
||||
- 11.2 [GDBを使用したデバッグ](11.2.md)
|
||||
- 11.3 [Goによるテスト例](11.3.md)
|
||||
- 11.4 [サマリー](11.4.md)
|
||||
- 11.4 [概要](11.4.md)
|
||||
* 12.[デプロイとメンテナンス](12.0.md)
|
||||
- 12.1 [アプリケーションログ](12.1.md)
|
||||
- 12.2 [サイトのエラー処理](12.2.md)
|
||||
- 12.3 [アプリケーションのデプロイ](12.3.md)
|
||||
- 12.4 [バックアップとリストア](12.4.md)
|
||||
- 12.5 [サマリー](12.5.md)
|
||||
- 12.5 [概要](12.5.md)
|
||||
* 13.[どのようにしてWebフレームワークを設計するか](13.0.md)
|
||||
- 13.1 [プロジェクトプラン](13.1.md)
|
||||
- 13.2 [カスタムルータの設計](13.2.md)
|
||||
- 13.3 [controllerの設計](13.3.md)
|
||||
- 13.4 [ログとデプロイ設計](13.4.md)
|
||||
- 13.5 [ブログの追加/削除/修正の実装](13.5.md)
|
||||
- 13.6 [サマリー](13.6.md)
|
||||
- 13.6 [概要](13.6.md)
|
||||
* 14.[Webフレームワークの拡張](14.0.md)
|
||||
- 14.1 [静的ファイルのサポート](14.1.md)
|
||||
- 14.2 [Sessionのサポート](14.2.md)
|
||||
@@ -92,6 +92,6 @@
|
||||
- 14.4 [ユーザ認証](14.4.md)
|
||||
- 14.5 [多言語サポート](14.5.md)
|
||||
- 14.6 [pprofのサポート](14.6.md)
|
||||
- 14.7 [サマリー](14.7.md)
|
||||
- 14.7 [概要](14.7.md)
|
||||
* 付録A [参考資料](ref.md)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user