Death Lost
Javaのエンジニアであるハヅと、Linuxサーバ管理者の葉月の二人が繰り広げる技術的でもない良く解らない雑記
Latest Entries
Webアプリ製作記(1)
とりあえず、趣味がてらWebアプリを作ることに。
JavaBeansなどを読めるものさえ作れば
HTML同様にServletのクラスを作って、JSPで表示部分作るだけでOKなので
Webアプリのベース部分から作ろう!
と言う事でサクッと作っています。
eclipseを使ってササッと書いたので現在はパスのフォワード部分だけ。
パスなどの情報を1つのクラスで定義して使えるようにしないと駄目だなー。
簡単に使える部品も豊富に作りたい。
置き換えや正規表現、データベース、ファイルアップロード…
検索エンジンサンプル…ページ切り替え etc…
サニタイジングも簡単に使えるように考えないと駄目ですね。
新人が簡単にWebアプリを作れる…そんなものにしたいです。
結構大きな企画なので、
CVSを利用してコードを管理するようにしようと思って設定しています。
出来たら、ソース付で配布しようかな。
まずは、お手軽なBBSを作るための基盤を作ります。
JavaBeansなどを読めるものさえ作れば
HTML同様にServletのクラスを作って、JSPで表示部分作るだけでOKなので
Webアプリのベース部分から作ろう!
と言う事でサクッと作っています。
eclipseを使ってササッと書いたので現在はパスのフォワード部分だけ。
パスなどの情報を1つのクラスで定義して使えるようにしないと駄目だなー。
簡単に使える部品も豊富に作りたい。
置き換えや正規表現、データベース、ファイルアップロード…
検索エンジンサンプル…ページ切り替え etc…
サニタイジングも簡単に使えるように考えないと駄目ですね。
新人が簡単にWebアプリを作れる…そんなものにしたいです。
結構大きな企画なので、
CVSを利用してコードを管理するようにしようと思って設定しています。
出来たら、ソース付で配布しようかな。
まずは、お手軽なBBSを作るための基盤を作ります。
サニタイジング
仕事でせっかく書いたので
Webサイトの入力フォームから入力されたデータなど、
文字列データの危険性(HTMLタグ、JavaScript、SQL文など故意に悪意のある文を入力した場合、
誤動作となりうる文)を検出し、それらを他の文字列に置き換える処理・操作の事です。
日本語で「無害化」と翻訳でき、サニタイジングにより、
悪意のある文の解釈、また実行されることを防ぐのを目的とします。
BBSやBLOG、WEB HTML EDITERなどの入力内容を表示するサイトであれば、
文中に含まれるHTMLタグやSCRIPTをそのままサイトに反映・実行してしまう場合があり、
デザインの崩れや意図的なクロスサイトスクリプティングなどの被害を起こす可能性も
あります。
これらの入力データを無害化する事をHTMLサニタイジングと呼ぶ。
また、CSVでは,が含まれているフィールドを"でとじる、"が含まれているフィールドは""に
置き換え、データの無害化をする事をCSVサニタイジングと呼ぶ。
SQLでは、SQL文を故意に入力し、データベースを改ざん、情報の出力を行う事を
無害化する事をSQLサニタイジングと呼ぶ。
実際にjavaで無害化する場合・・・
■ タグの無害化
無害化したいString.replaceAll("<[^>]*>", "")
これで全てのタグ<>で囲まれた文字列を消せる。(タグが消えた事になる)
■ HTMLサニタイジングの基本
& は &
< は <
> は >
" は "
で変換。(その他、必要あれば変換を行う)
■ CSVサニタイジングの基本
, があるフィールドでは、"で囲む。
" があるフィールドでは"を""に直す。
Webサイトの入力フォームから入力されたデータなど、
文字列データの危険性(HTMLタグ、JavaScript、SQL文など故意に悪意のある文を入力した場合、
誤動作となりうる文)を検出し、それらを他の文字列に置き換える処理・操作の事です。
日本語で「無害化」と翻訳でき、サニタイジングにより、
悪意のある文の解釈、また実行されることを防ぐのを目的とします。
BBSやBLOG、WEB HTML EDITERなどの入力内容を表示するサイトであれば、
文中に含まれるHTMLタグやSCRIPTをそのままサイトに反映・実行してしまう場合があり、
デザインの崩れや意図的なクロスサイトスクリプティングなどの被害を起こす可能性も
あります。
これらの入力データを無害化する事をHTMLサニタイジングと呼ぶ。
また、CSVでは,が含まれているフィールドを"でとじる、"が含まれているフィールドは""に
置き換え、データの無害化をする事をCSVサニタイジングと呼ぶ。
SQLでは、SQL文を故意に入力し、データベースを改ざん、情報の出力を行う事を
無害化する事をSQLサニタイジングと呼ぶ。
実際にjavaで無害化する場合・・・
■ タグの無害化
無害化したいString.replaceAll("<[^>]*>", "")
これで全てのタグ<>で囲まれた文字列を消せる。(タグが消えた事になる)
■ HTMLサニタイジングの基本
& は &
< は <
> は >
" は "
で変換。(その他、必要あれば変換を行う)
■ CSVサニタイジングの基本
, があるフィールドでは、"で囲む。
" があるフィールドでは"を""に直す。
ApacheとTomcatの連携
備忘録程度に書いておきます。
○ ApacheとTomcatの連携。
Apacheのインストールしたディレクトリにbinディレクトリがあるので、
そこのhttpd.confを編集。
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
の#を消して、これらのモジュールをロードさせる。
(#はコメント行になる。#を消す事でこの行を有効にするということ)
最終行に
# Include Proxy Config
Include conf/extra/httpd-proxy.conf
と書く。
その後、extraディレクトリに
httpd-proxy.conf
というファイルをを作ってあげ、
ProxyPass ajp://localhost:8009/
と、記入し保存。
Location の/tomcat/はアクセスするURLの遷移用アドレスになる
ProxyPassは実際に遷移後のパスを書く。
(Tomcatではajpに8009ポートを使う。)
Tomcatを再起動。
Apacheを再起動。
再起動の方法が解らないならWindowsごと再起動で良い。
○ 環境チェック
http://localhost/tomcat/
で実際に、Tomcatのトップページが出れば成功。
なお、サイト公開時は80ポートだけ空けておいても対応可能。
(8009ポートの遷移はローカルで行われるのでグローバルに空ける必要は無い。)
80ポートだけでサーバが使えるので非常にセキュリティやその他に優しいですね。
○ ApacheとTomcatの連携。
Apacheのインストールしたディレクトリにbinディレクトリがあるので、
そこのhttpd.confを編集。
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
の#を消して、これらのモジュールをロードさせる。
(#はコメント行になる。#を消す事でこの行を有効にするということ)
最終行に
# Include Proxy Config
Include conf/extra/httpd-proxy.conf
と書く。
その後、extraディレクトリに
httpd-proxy.conf
というファイルをを作ってあげ、
ProxyPass ajp://localhost:8009/
と、記入し保存。
Location の/tomcat/はアクセスするURLの遷移用アドレスになる
ProxyPassは実際に遷移後のパスを書く。
(Tomcatではajpに8009ポートを使う。)
Tomcatを再起動。
Apacheを再起動。
再起動の方法が解らないならWindowsごと再起動で良い。
○ 環境チェック
http://localhost/tomcat/
で実際に、Tomcatのトップページが出れば成功。
なお、サイト公開時は80ポートだけ空けておいても対応可能。
(8009ポートの遷移はローカルで行われるのでグローバルに空ける必要は無い。)
80ポートだけでサーバが使えるので非常にセキュリティやその他に優しいですね。
ソースを見直そう
こんにちは、ハヅです。
めっきり更新をサボってしまいました。
3日坊主って所です。
今回は見やすいソースを心がけるという事を書いてみます。
多くの開発者が関わる仕事場では、
どのソースがどういう動きをしているか把握しなければ仕事が出来ません。
■ インデント
まず、これは基本中の基本ですね。
見やすいソースを作る為の第一歩です。
インデントとは、
"繰り返し処理"を繰り返す命令文{
繰り返し処理
}
とあるのに対し、
"繰り返し処理"を繰り返す命令文{
繰り返し処理
}
と字下げをしてソースを見やすくする方法です。
1行辺りを繰り返すのなら良いですが、
以下のように何行もの処理を繰り返す場合、
更にその繰り返す処理の中に繰り返す処理があった場合
非常に見難くなります。
"繰り返し処理"を繰り返す命令文{
繰り返し処理1行目
繰り返し処理2行目
繰り返し処理3行目
繰り返し処理4行目
繰り返し処理の中の繰り返し命令文{
繰り返し処理の中の繰り返し処理
}
繰り返し処理1行目
}
このように、字下げをすると多少は見やすくなります。
まずは、このインデントを身につけましょう。
■ コメント
命令ばかりのソースは非常に汚いといえます。
人に渡した時、この処理は何をするのか解らなければ意味がありません。
// プロンプトにhelloWorldと出す
System.out.println("helloWorld);
と、日本語でコメントを打てば
System.out.println("helloWorld);という文はプロンプトにhelloWorldと出すんだぞ!
と教える事が出来ます。
処理自体が明確に解らなくても流れを教える事が出来ます。
流れが解れば、バグになっている部分を見つける事も少し楽になります。
コメントは出来る限り付けましょう。
■ コメントと処理の整合性
コメントを出来る限りつけた場合でも、
処理とあっていないコメントの場合は逆に混乱させてしまいます。
その命令に該当するコメントをきちんと付けるのが見やすいソースの作り方です。
■ docを作ろう
処理に、メソッドやルーチン、またはスレッドなどと呼ばれるものがあります。
それは、何らかの処理を実行し、何らかの答えを返す処理の塊です。
その処理の固まりは他の処理からCALL(コール。つまり呼ばれる)されることもあります。
その塊に対して、
この塊は
・どういうコマンドを受け取って
・どういう答えを返すのか
を記入します。
また、java言語の場合は、それをjavadocと呼び、リファレンスを作成する事が出来ます。
お客様のところへ、このリファレンスを持って行き「どういう処理」で流れているか
説明の資料ともなりますので、出来るだけ記入するのが大事です。
以上の3つ以外にも色々と見やすいソースの方法はありますが
この3つも出来ない新人の多いこと多いこと。
出来るだけ早くこれらを使いこなせるようになり、開発にもっと関わって欲しいな
と、開発リーダーの僕は思います。
以上、ハヅでした。
めっきり更新をサボってしまいました。
3日坊主って所です。
今回は見やすいソースを心がけるという事を書いてみます。
多くの開発者が関わる仕事場では、
どのソースがどういう動きをしているか把握しなければ仕事が出来ません。
■ インデント
まず、これは基本中の基本ですね。
見やすいソースを作る為の第一歩です。
インデントとは、
"繰り返し処理"を繰り返す命令文{
繰り返し処理
}
とあるのに対し、
"繰り返し処理"を繰り返す命令文{
繰り返し処理
}
と字下げをしてソースを見やすくする方法です。
1行辺りを繰り返すのなら良いですが、
以下のように何行もの処理を繰り返す場合、
更にその繰り返す処理の中に繰り返す処理があった場合
非常に見難くなります。
"繰り返し処理"を繰り返す命令文{
繰り返し処理1行目
繰り返し処理2行目
繰り返し処理3行目
繰り返し処理4行目
繰り返し処理の中の繰り返し命令文{
繰り返し処理の中の繰り返し処理
}
繰り返し処理1行目
}
このように、字下げをすると多少は見やすくなります。
まずは、このインデントを身につけましょう。
■ コメント
命令ばかりのソースは非常に汚いといえます。
人に渡した時、この処理は何をするのか解らなければ意味がありません。
// プロンプトにhelloWorldと出す
System.out.println("helloWorld);
と、日本語でコメントを打てば
System.out.println("helloWorld);という文はプロンプトにhelloWorldと出すんだぞ!
と教える事が出来ます。
処理自体が明確に解らなくても流れを教える事が出来ます。
流れが解れば、バグになっている部分を見つける事も少し楽になります。
コメントは出来る限り付けましょう。
■ コメントと処理の整合性
コメントを出来る限りつけた場合でも、
処理とあっていないコメントの場合は逆に混乱させてしまいます。
その命令に該当するコメントをきちんと付けるのが見やすいソースの作り方です。
■ docを作ろう
処理に、メソッドやルーチン、またはスレッドなどと呼ばれるものがあります。
それは、何らかの処理を実行し、何らかの答えを返す処理の塊です。
その処理の固まりは他の処理からCALL(コール。つまり呼ばれる)されることもあります。
その塊に対して、
この塊は
・どういうコマンドを受け取って
・どういう答えを返すのか
を記入します。
また、java言語の場合は、それをjavadocと呼び、リファレンスを作成する事が出来ます。
お客様のところへ、このリファレンスを持って行き「どういう処理」で流れているか
説明の資料ともなりますので、出来るだけ記入するのが大事です。
以上の3つ以外にも色々と見やすいソースの方法はありますが
この3つも出来ない新人の多いこと多いこと。
出来るだけ早くこれらを使いこなせるようになり、開発にもっと関わって欲しいな
と、開発リーダーの僕は思います。
以上、ハヅでした。
SubVersion設定してみた
こんばんは ハヅです。
今回はプログラマとして重要なソースの管理やらVer管理やらのお話。
Subversion使うにしろ資料があまり無いですね。
Linuxであればネットから資料が出ますがWindows版はほとんど揃っていません。
1冊書籍が出ているが、ネットワークのことはあまり載ってない。
読んだ所、あまり詳しくなく後輩に1週間後あげました。
1日で読めるような内容で、サクサク読めるのが良いですが基本だけでした。
それと、若干Verが古いので今更読むなら、ツールのマニュアル読んだ方が早いです。
マニュアルだと文章ばかりです。画像を通して基礎を覚えたい人にはお勧めしますが
ただ、お金のことを考えるとやっぱマニュアルって貴重な資料だと思います。
オライリーくらいの技術書になると別物ですね。高くてもしっかり書かれています。
いや、解り難さもあります。オライリー書籍はしっかり書かれている分、敷居が高いですね。
そこで、雑記になっても仕方ないので
僕が普段使ってるSubVersion導入方法でも載せてみます。
基本ですが。
■ Subversion設定(サーバインストールとサービスインストール)
subversion公式ページから
『svn-1.4.5-setup.exe』をダウンロード。
(現在はVerあがっていると思いますのでそちらを)
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91
ここから落とせます。(現在は無理かも)
以下、インストール先フォルダを『c:\subversion』とします。
まずは、インストールしましょう。
普通にボタンを押してインストールしても構いません。
次に、管理する為の設定です。
リポジトリ(保存先)の親フォルダを作成します。
(ここでは例として『C:\SVN』にする)
コマンドプロンプトを開き、
『sc create svn binPath= "C:\subversion\bin\svnserve.exe --service --root C:\SVN" depend= tcpip start= auto』
と打ち込みサービスへ登録します。
(C:\SVNの部分は例以外のディレクトリであれば、変更しましょう)
こうするとWindowsが起動したらSVNがサービスとして自動実行できます。
(スタートアップみたいなものですね)
手動のコントロールとして、コマンドプロンプトで
『sc start svn』と打ち込めば、サービスを開始出来、
『sc stop svn』と打ち込めば、サービスを停止出来るようになってます。
確認は、
『netstat -an』と打ち込み、『TCP 0.0.0.0:3690』と表示されていればサービス中。
標準ポートは3690。設定から変えているなら変えたポート番号で出ます。
■ サーバ設定 (パスワードを掛ける)
コマンドプロンプトで
『C:\subversion\bin\svnadmin.exe create c:\SVN\musiclib』と打ち込み、リポジトリを作成する。
(musiclibの部分を作成するリポジトリ名に変更する。musiclibは僕の開発名です)
『c:\SVN\musiclib\conf\svnserve.conf』を開き、
『password-db = passwd』
『auth-access = write』
の2行のコメントを削除 (先頭の#を取る)
『c:\SVN\musiclib\conf\password』を開き、『user=password』を追加する。
この場合、userがユーザIDになってpasswordがパスワードとなるので変更しましょう。
つまり、上記だとuserというユーザIDのpasswordというパスワードが設定されます。
(別のユーザーを追加する場合は1行ごとに『ユーザー名=パスワード』のように追記)
■ Subclipse設定
EclipseでSVNを使うために、Subclipseというプラグインがあるのでそれで開発環境に設定します。
SVNリポジトリで設定する際、
サービスで開始しているSVNというフォルダはパスに含めないのが重要だったりします。
つまり、リポジトリは
「svn://localhost/SVN/musiclib」ではなくて、「svn://localhost/musiclib」と設定します。
良くミスするパターンですので注意。
後、
ホストネームに「www.ほにゃらら〜」っての使えないとマニュアルに書かれています。
svn://***.***.***,***/ってIPアドレスを直記しないと使えませんでした。
(環境によっては使えるそうです。)
これでリビジョン 0のSVNとして接続が出来ます。
これで、subversionの接続が出来ましたが、
Apacheと連携して使うよりSVN単独で起動した方がきちんと認識します。
これで仕事のVer管理も出来る。
あ、musiclibっていうのは音楽用ライブラリで僕が開発しています。
いつか公開できるといいですね。
以上、ハヅでしたー。
今回はプログラマとして重要なソースの管理やらVer管理やらのお話。
Subversion使うにしろ資料があまり無いですね。
Linuxであればネットから資料が出ますがWindows版はほとんど揃っていません。
1冊書籍が出ているが、ネットワークのことはあまり載ってない。
読んだ所、あまり詳しくなく後輩に1週間後あげました。
1日で読めるような内容で、サクサク読めるのが良いですが基本だけでした。
それと、若干Verが古いので今更読むなら、ツールのマニュアル読んだ方が早いです。
マニュアルだと文章ばかりです。画像を通して基礎を覚えたい人にはお勧めしますが
ただ、お金のことを考えるとやっぱマニュアルって貴重な資料だと思います。
オライリーくらいの技術書になると別物ですね。高くてもしっかり書かれています。
いや、解り難さもあります。オライリー書籍はしっかり書かれている分、敷居が高いですね。
そこで、雑記になっても仕方ないので
僕が普段使ってるSubVersion導入方法でも載せてみます。
基本ですが。
■ Subversion設定(サーバインストールとサービスインストール)
subversion公式ページから
『svn-1.4.5-setup.exe』をダウンロード。
(現在はVerあがっていると思いますのでそちらを)
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91
ここから落とせます。(現在は無理かも)
以下、インストール先フォルダを『c:\subversion』とします。
まずは、インストールしましょう。
普通にボタンを押してインストールしても構いません。
次に、管理する為の設定です。
リポジトリ(保存先)の親フォルダを作成します。
(ここでは例として『C:\SVN』にする)
コマンドプロンプトを開き、
『sc create svn binPath= "C:\subversion\bin\svnserve.exe --service --root C:\SVN" depend= tcpip start= auto』
と打ち込みサービスへ登録します。
(C:\SVNの部分は例以外のディレクトリであれば、変更しましょう)
こうするとWindowsが起動したらSVNがサービスとして自動実行できます。
(スタートアップみたいなものですね)
手動のコントロールとして、コマンドプロンプトで
『sc start svn』と打ち込めば、サービスを開始出来、
『sc stop svn』と打ち込めば、サービスを停止出来るようになってます。
確認は、
『netstat -an』と打ち込み、『TCP 0.0.0.0:3690』と表示されていればサービス中。
標準ポートは3690。設定から変えているなら変えたポート番号で出ます。
■ サーバ設定 (パスワードを掛ける)
コマンドプロンプトで
『C:\subversion\bin\svnadmin.exe create c:\SVN\musiclib』と打ち込み、リポジトリを作成する。
(musiclibの部分を作成するリポジトリ名に変更する。musiclibは僕の開発名です)
『c:\SVN\musiclib\conf\svnserve.conf』を開き、
『password-db = passwd』
『auth-access = write』
の2行のコメントを削除 (先頭の#を取る)
『c:\SVN\musiclib\conf\password』を開き、『user=password』を追加する。
この場合、userがユーザIDになってpasswordがパスワードとなるので変更しましょう。
つまり、上記だとuserというユーザIDのpasswordというパスワードが設定されます。
(別のユーザーを追加する場合は1行ごとに『ユーザー名=パスワード』のように追記)
■ Subclipse設定
EclipseでSVNを使うために、Subclipseというプラグインがあるのでそれで開発環境に設定します。
SVNリポジトリで設定する際、
サービスで開始しているSVNというフォルダはパスに含めないのが重要だったりします。
つまり、リポジトリは
「svn://localhost/SVN/musiclib」ではなくて、「svn://localhost/musiclib」と設定します。
良くミスするパターンですので注意。
後、
ホストネームに「www.ほにゃらら〜」っての使えないとマニュアルに書かれています。
svn://***.***.***,***/ってIPアドレスを直記しないと使えませんでした。
(環境によっては使えるそうです。)
これでリビジョン 0のSVNとして接続が出来ます。
これで、subversionの接続が出来ましたが、
Apacheと連携して使うよりSVN単独で起動した方がきちんと認識します。
これで仕事のVer管理も出来る。
あ、musiclibっていうのは音楽用ライブラリで僕が開発しています。
いつか公開できるといいですね。
以上、ハヅでしたー。

