フリーソフトで作るWindowsセキュア環境
Windowsをフリーソフトでセキュアにするよ。
ネットまわりの危険軽減から紛失対策まで。
ファイヤーウォール&アンチウイルス編
インターネットセキュリティ総合製品を入れていない場合や、お使いのアンチウイルスにファイヤーウォールがない場合に。
■ ZoneAlarm Free Firewall(ファイヤーウォール)
http://www.zonealarm.com/security/en-us/zonealarm-pc-security-free-firewall.htm
有名なファイヤーウォールソフト。
インバウンドのチェックだけでなく、アウトバウンドのチェックや実行ファイルの改変チェックなどできます。
ウイルスに感染した際に、一番問題になるのはアウトバウンドなので、ない場合には入っていると安心。
最悪アウトバウンドさえ遮断できれば情報の流出を防ぐことができます
※Windows標準のファイヤーウォールはアウトバウンドのチェックはしてくれない
※個人ユーザーおよび非営利の慈善団体、行政機関と教育機関のみ無料で使えます
ブラウジング(FireFox)編
ファイヤーウォール&アンチウイルス意外でさらに安全にする為に。
ブラウザはFireFoxを前提にしています。
FlashPlayerなどは常に最新を保つように!
■ NoScript(Scriptの自動実行を抑制)(FireFoxアドオン)
https://addons.mozilla.org/ja/firefox/addon/722
FireFoxを安全にするための有名なアドオン。
JSなどの実行許可や、クロスドメインでのIFRAME呼び出しなどをドメイン単位で管理&制御するアドオン。
JSが標準で無効になるので不便よりも安全をとるのであれば。
ファイル&パスワード編
パスワードを普通にテキストファイルなどに書いて管理していたりすると、マシンを落とした場合などに大変なことになります。
USBメモリなどに機密情報をいれて持ち歩いているも同じです。
暗号化しましょう。
■ TrueCrypt(暗号化仮想ドライブ作成)
http://www.truecrypt.org/downloads
http://www.forest.impress.co.jp/article/2008/02/08/truecrypt5.html
暗号化した仮想ドライブの作成ソフト。
Portable KeePassを選べばUSBメモリなどに入れてスタンドアローン実行可能なバージョンも利用できます。
ドライブをまるまる暗号化することもできますが、仮想ドライブのイメージをファイルとして作成して、必要なときにパスワードを入力してマウントする機能がおすすめ。
マウント後は普通の外部ドライブのように読み書きできます。
トラベラーディスク作成機能というのがあり、TrueCryptのないマシンでも(パスワードを入力して)マウントできるUSBメモリ等を作成できます。
■ KeePass(パスワード管理&暗号化)
http://keepass.info/download.html
パスワード管理に便利。
マスターパスワードで暗号化されたファイルでパスワードを管理できます。
パスワードジェネレート機能やパスワードの強度チェックなどの機能もあります。
とりあえずここらへんで。
※入れたからといって安全を保障するものではありません
※入れたソフトに脆弱性がある可能性もゼロではないのでインストールは自己責任で
mac book設定メモ3『買ったらとりあえず設定しとけ。windowsユーザーのためのMACキー配置設定。』
MAC買ってはじめに戸惑うことはキー配置だと思います。
実際キー配置さえwindowsにあわせてしまえば、そこまでOSの使用感に違いを感じることはありません。
mac book設定メモ3は「とりあえず設定しとけ。windowsユーザーのための迷わないMACキー配置設定。」です。
MacOS編
『システム環境設定→キーボードとマウス→キーボードタブ→装飾キー』で装飾キーの配置を変更します。
「キーボードを選択」プルダウンでキーボード毎に設定できます。
キーボードの左下の方が
CapsLock | A | S | ... |
Shift | X | X | ... |
Ctrl | Windows | Alt | ... |
のようなWindowsキーボードでの動作になるべく近いものにするため、Macのキー配置を
CapsLock | A | S | ... |
Shift | X | X | ... |
Command | Option | Control | ... |
という配置に変更します。
※人によっては Option と Control が逆の方がしっくりくるかも。
● Windowsキーボード編
CapsLock | → | CapsLock |
Control | → | Command |
Option | → | Control |
Command | → | Option |
● ショートカットの変更
『システム環境設定→キーボードとマウス→キーボードショートカットタブ』で変更できます。
Windows+Dでデスクトップ表示など必要に応じて変更します。
※キーボード毎に個別設定できないのでキーボードを両方使う人は極端にいじらない方が良いです。
WindowsOS編(BootCamp等で起動する場合)
キーボードの左下の方が
CapsLock | A | S | ... |
Shift | X | X | ... |
Ctrl | Windows | Alt | ... |
となるように設定します
● Macキーボード編(Windowsキーボードを使用する場合には特に気にする必要ないのでMacキーボード設定のみ)
http://www.vector.co.jp/soft/winnt/util/se394317.htmlをインストールし
CapsLock | → | Ctrl |
Control | → | CapsLock |
Option | → | Windows |
Command | → | Alt |
と設定する
※ソフトのインストールは自己責任でお願いします
※右側のキー設定は好みに応じて Command → Alt などとしておいたほうが便利かもしれない
※Windowsキーボード接続時はAppleKbWinを無効にする
mac book設定メモ2『windowsとmacでThunderbirdを共有(同一プロフィール実行)』
id:toytools:20090502
にて「windows」「mac」「共有領域」の3パーティション構成の構築を行ったがThunderbirdのプロファイルを「共有領域」に保存し、データを完全同期をする方法
※windows→macの順でインストールをすることを前提に書いています。
前準備編
- Thunderbirdのデータを置きたいフォルダを共有領域に作成する(以下「共有領域プロファイル保存フォルダ」とする)
windows編
- まだアカウントを作成していない場合
- Thunderbirdをインストールする
- Thunderbirdを起動しアカウントを作成する
- Thunderbirdを終了
- C:\Documents and Settings\[ユーザ名]\Application Data\Thunderbird\Profiles\に移動(XPの場合)
- 「共有領域プロファイル保存フォルダ」にprofilesフォルダを移動
- profiles.iniを開いて編集する
- IsRelativeを0にする(絶対パスを有効にする設定)
- Pathを「共有領域プロファイル保存フォルダ/profiles/****.default」のようにプロファイルを保存したディレクトリに書き換える
- Thunderbirdを起動して正しく読み込めていれば完了
mac編
- Thunderbirdをインストールする
- Thunderbirdを起動しアカウントを作成せずに終了
- ~/Library/Thunderbird/Profiles/profiles.iniをwindowsの場合と同様に編集
- ただしパスはmac(unix)表記のパス
- macにはパスをコピーする機能はないのでAmCopyPathCMXをインストールしておけばOK
- Thunderbirdを起動して正しく読み込めていれば完了
mac book設定メモ1『windows・mac・共有領域の3パーティション構成(+windowsは単独でも仮想でも起動可能)作成方法』
windows・mac・共有領域の3パーティション構成(+windowsは単独でも仮想でも起動可能)作成方法
mac book購入しました。
システム領域を共有領域にするのは危ないのでwindows、macとは別にそれぞれからアクセスできる専用のパーティションをきる構成の作成メモ
・「windows、mac、共有フォルダ」の3パーティション構成
・windowsはbootcampでもParallels Desktop(仮想)でも同一windowsを起動可能
・共有パーティションはwindows、macどちらからでもアクセス可能
でのセットアップのメモ
最終的な構成は
■ インストール&パーティション構築編
※操作は以下の順番を守ってください
1)Boot Campアシスタントを使ってwindows用パーティションをきる
- 容量はとくに32G以下とかでなくてよい
この時点でのパーティション構成(順番も含め) mac(HFS+) windows(FAT32)※windows未インストール
- ※この時点ではwindowsをインストールする予定の領域は要領に限らずFAT32です
2)付属のmacOSインストールCDを入れて再起動
-
- ※ジャーンって音がするまでCボタンを押したままにしてCDからブートする
3)CDからブートしたらインストールに進まずに上部に表示されているメニューの「ユーティリティ」から「ディスクユーティリティ」を選択して起動
4)macが入っているパーティションをさらに分割する
- ※ディスクユーティリティはmacのアプリケーションフォルダ内に存在するが全体で3パーティション以上の場合、CDからブートしないとほぼ失敗する(2時間くらいまっても分割終わらないしプロセスもほとんど処理を行っていなかったのでプロセスを強制終了するはめになりました。。。)
- ※この時点では共有パーティションはHTS+(通常のまま)にしておく
この時点でのパーティション構成(順番も含め) mac(HFS+) 共有パーティション(HFS+) windows(FAT32)※windows未インストール
5)ここでいったん終了してmacを起動
6)windowsのディスクを入れて再起動
-
- ※ジャーンって音がするまでCボタンを押したままにしてCDからブートする
7)通常通りwindowsをインストール
- インストールするパーティションは必ずbootcampで作成したパーティション(通常はCドライブ)を指定する
- インストール中に出てくるHDDフォーマットの選択の際にはかならずフォーマットを行う
- 32G以上を確保していたら必ずNTFSでフォーマット
- 32G以下であればFAT32かNTFSどちらでもよい
- フォーマットはクイックでもいいので絶対やる
- キーボード選択
- 「s」キーを押して「そのほかのキーボードを選択」して、次の画面で「106 Japanese Keyboard(Including USB)」を選択する
- 何度か再起動がかかるのでその際には再起動時にoptionキーをおしておき、ブート選択画面を表示しwindowsのブートを選択してあげる
10)macを起動
11)アプリケーションからディスクユーティリティを起動して共有ディレクトリを選択したメニューから「削除」メニューでフォーマットをFAT32に変換する
この時点で初めてパーティション構成(順番も含め)は mac(HFS+) 共有パーティション(FAT32) windows(NTFS) となる
[PHP][日記] PHPerだけど正規表現まわりの問題がもりあがっているようで一言
追記しました
サーバー側書くときには特別な理由がない限りPHP使う、PHPerだけど
404 Blog Not Found - 「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ
に対して一言。
まぁ内容が正規表現ゆえゆえというより、「PHP使いはもうメアドの正規表現をblogに書くな」という内容なってしまっているのでその流れで。
メアドの正規表現はそこまで厳密にやる意味ない
厳密にやると「一部の携帯のメアドが通らない」ってのがあるけど、それの対応した時点で何をもって厳密なメアドの正規表現とするのかは不明になっていまう。
携帯のメアドに対応したとして、日本の携帯以外にもRFC2822に準拠していないメアドは存在する可能性があるので、上記を対応しただけでは微妙(携帯だけ対応しただけでは厳密でもなければ、完全でもない中途半端)なものになってしまう。
※自分の予想を超えたメアドが存在する可能性は0ではない
そのメアドを選んだ人の問題だといわれればそれまでだが、携帯のメアドも選んだ人の問題だと言ってしまえばそれまでで、どのラインで切るかは人それぞれの感覚にゆだねることとなってしまう。
メアドを正規表現チェックする意味
メアドを正規表現でどんなに厳密にチェックを行ったところで、そのメアドが存在するかもわからない。
厳密な意味でのValidなチェックはメール認証など他の処理によって担保されるので、
メアドを正規表現でチェックする理由は単純なヒューマンエラーのチェックを行うことで入力ミスをへらすといったそういう程度の理由でしかない。
言語でくくって考えるのは違うのでは
どんな言語でも、凄い人もいるし、覚えたての人もいるわけで単純に○○erは〜ってくくることは違うのではと思います。
※日本人は〜、韓国人は〜、白人は〜、黒人は〜と言っていることとなんら変わりはない。
こういうこと言ってると「これだからPHPerは〜」とか言われるのだろうか
追記1
るとさんからコメントで指摘をいただきましたので、追記します。
このエントリーで言いたかったことは、メールに関して「極端に厳密なチェック」は必要ないということです。
もとの記事(PHP)で紹介されている正規表現のように+を含むメアド等を存在するのにはじいてしまうのは問題だと思います。
厳密にやりすぎて、存在しうるメアドをはじいてしまう可能性があるのであれば、存在しうるメアドを全て通す程度の簡易チェックのほうが望ましいと個人的には思っているので、RFCに準拠したチェックに日本の携帯は例外として通すといった処理はナンセンスだと思ったのでこのエントリーを書きました。
※日本の携帯以外にも例外が存在する可能性は0ではないので例外を通すのであれば、許容範囲をより広げるほうが良い
また、システムによってはRFC準拠のもののみ許容といったチェックもありえると思います
Airの制約を越えるFlashアプリを作る。C#とFlashをExternalInterface経由で相互通信。
何が良いって、Adobe Airとかの制約も一切受けずにもっとディープなアプリケーション作れちゃうよ!
Flashでできないポートのリッスンとかいろいろな実装をC#に委譲できちゃうし!
簡単にExternalInterfaceをC#で使うためのライブラリをダウンロードする
http://www.adobe.com/support/documentation/jp/flash/samples/
Programming_ActionScript3.0_samples.zipをダウンロード
解答したしたフォルダの
/Samples/IntrovertIM_CSharp/ExternalInterfaceProxy
以下のCSクラス群がC#でExternalInterfaceを簡単に実装するためのラッパー実装
DLLの配置
id:toytools:20070906 で述べているような方法でFlashアクセス用のDLLを配置する。
DLLはダウンロードしたファイル内に含まれているので上記の記事のところからダウンロードしなくても大丈夫(なはず)。
※今回は前に作ったものの修正にExternalInterfaceを使いたかったので、DLL再配置などはしていないので未確認
FlashからC#への通信
C#
private ExternalInterfaceProxy proxy; public void InitializeExternalInterfaceCallBack(){ /* * this.flashは配置したAxShockwaveFlashフラッシュオブジェクトインスタンス */ proxy = new ExternalInterfaceProxy(this.flash); /* * コールバックを追加. */ proxy.ExternalInterfaceCall += new ExternalInterfaceCallEventHandler(proxy_ExternalInterfaceCallBack); } private object proxy_ExternalInterfaceCallBack(object sender, ExternalInterfaceCallEventArgs e){ /* * e.FunctionCall.FunctionNameにコールされたメソッド名が格納されている * e.FunctionCall.Argumentsに引数のリストが格納されている */ switch (e.FunctionCall.FunctionName){ case "SomeMethodName1": /* * こんな感じで引数は取得 */ string firstArgument = (string)e.FunctionCall.Arguments[0]; break; case "SomeMethodName2": break; case "SomeMethodName3": break; } return null; }
ActionScript3.0
/* * 通常のExternalInterfaceのcallの実装 */ ExternalInterface.call( "SomeMethodName1" , "someArgumentValue" );
C#からFlashへの通信
C#
/* * proxyは上記で作成したproxyと同様のもの * private ExternalInterfaceProxy proxy; */ proxy.Call("someCStoFlashMethod", someArgumentVar );
ActionScript3.0
/* * 通常のExternalInterfaceのリッスンの実装 */ ExternalInterface.addCallback( "someCStoFlashMethod" , _someCStoFlashMethod); public function _someCStoFlashMethod( someArgumentVar:Number ):void{ //do some function. }
オブジェクト指向な大規模JS開発とかに便利なクラス定義JS(ネームスペースとpublic,private分離)作ってみたよ
(2009/3/6)バグを調整
オブジェクト指向な大規模JS開発とかに便利なクラス定義JS(ネームスペースとpublic,private分離)作ってみたよ
複数人が書くと、結構みんなばらばらの書き方になっちゃうし。
特徴は
- ネームスペース定義できる
- privateとpublicの分離
- 固定されたクラス定義シンタックス
等です
使い方
- public,private,
protectedstaticの順に定義します - public内、private内であればthis参照でいけます
- またpublic,privateをまたいでコールする場合には、this.public、this.privateのスコープでコールする必要があります
- staticなど必要ないところは未指定で飛ばすことができます
- コンストラクタはパブリック空間にConstructを定義すればOK(引数の制限などはありません)
Class.register( "com.somedomain.SomeClass" , { //PUBLIC MEMBERS },{ //PRIVATE MEMBERS },{ //STATIC MEMBERS } });
テスト
■テストクラス
Class.register( "net.toytools.TestClass" , { //PUBLIC MEMBERS publicMember:null, Construct:function( value ){ this.publicMember = value; console.log("Construct : " + value); }, publicMethod:function(){ //public to private this.private._publicToPrivate(); //public to public this.publicToPublic( "THIS SCOPE" ); this.public.publicToPublic( "PUBLIC SCOPE" ); }, privateToPublic:function(){ console.log( "privateToPublic : " + this.publicMember ); }, publicToPublic:function( value ){ console.log( "publicToPublic : " + value ); } } , { //PRIVATE MEMBERS _publicToPrivate:function(){ console.log("_publicToPrivate : " + this.public.publicMember); //private to public this.public.privateToPublic(); } } ,{ //STATIC MEMBERS TEST_STATIC_VAR:"test static var!!", testStaticMethod:function(){ console.log("testStaticMethod"); } } );
■実行
net.toytools.TestClass.testStaticMethod(); var o1 = new net.toytools.TestClass( "Construct Arguments" ); o1.publicMethod();
■結果
testStaticMethod Construct : Construct Arguments _publicToPrivate : Construct Arguments privateToPublic : Construct Arguments publicToPublic : THIS SCOPE publicToPublic : PUBLIC SCOPE
ソース
ソース
そのうちどっかにあげるかもだけどめんどくさいのでとりあえず。
/** * (c) kaw( http://d.hatena.ne.jp/toytools/ ) */ var Class = function( ){ var pub = { /** * クラスを登録する. * @param namespace クラスまで含んだネームスペース文字列(例:"net.toytools.TestClass") * @param publicMembers パブリックメンバーオブジェクト * @param privateMembers プライベートメンバーオブジェクト */ register:function( namespace , publicMembers , privateMembers , staticMembers ){ if( !publicMembers ) publicMembers = {}; if( !privateMembers ) privateMembers = {}; if( !staticMembers ) staticMembers = {}; var pub = function(){} var pri = function(){} pub.prototype = publicMembers; pri.prototype = privateMembers; var splittedNamespace = namespace.split('.'); var clazz = function(){ var pubIns = new pub(); var priIns = new pri(); pubIns.private = priIns; priIns.public = pubIns; pubIns.public = pubIns; priIns.private = priIns; if( pubIns["Construct"] ) pubIns.Construct.apply( pubIns , arguments ) return pubIns; }; staticMembers.__CLASS_NAME__ = namespace; for( var i in staticMembers ){ clazz[i] = staticMembers[i]; } _registerClass( splittedNamespace , clazz , _namespacesRoot ); _namespacesDic[namespace] = clazz; }, /** * クラスを取得する. * @param namespace ネームスペース文字列 */ get:function( namespace ){ return _namespacesDic[namespace]; }, /** * クラスは登録されているか. * @param namespace ネームスペース文字列 */ isRegistered:function( namespace ){ return _namespacesDic[namespace] != undefined; } }; //PRIVATE MEMBERS var _namespacesRoot = window; var _namespacesDic = {}; var _registerClass = function( splittedNamespace , registerClass , nextTarget ){ var next = splittedNamespace.shift(); if( nextTarget[next] == undefined ) nextTarget[next] = {}; if( splittedNamespace.length == 0 ){ nextTarget[next] = registerClass; return nextTarget[next]; }else{ return _registerClass( splittedNamespace , registerClass , nextTarget[next] ); } } return pub; }();