Essential ActionScript3.0 読書メモ 第36回 グローバル関数

名前の無いpackageの中に定義された関数は、プログラムのどこからでもinport文を使わずに参照できるため、グローバル関数と呼ばれる。

例:

package {
import flash.system.*;
public function isLinux () {
return Capabilities.os == "Linux";
}
}

isLinux()関数は、flashの実行環境がLinuxであればtrueを返す。この関数は名前の無いpackageの中で定義されているため、import文を必要とせず、プログラムのどこからでも呼ぶことができる。

組み込みのグローバル関数の中で、最も便利なのがtrace()関数である。trace()は可変長の引数を取り、Flashオーサリングツールの出力パネルやログファイルに出力を行う。画面上に直接何かを表示するわけではないので、デバッグ用の関数である。

今日の進捗:199→201/1644

『安全なWebアプリケーションの作り方』読書メモ 1章~3章1節(HTTPとセッション管理)まで #wasbook

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

電子版

セキュリティをしっかりやりたいPHPerにオススメです。コードはほとんどPHP。

本書では、脆弱性のある環境に攻撃を仕掛ける実習もできます。が、実習環境はWindowsを前提としています。仮想化ソフトのVMWareはWindows版(VMWare Player)は無料だけどMac版(VMWare Fusion)は有料だし、HTTP通信を確認するFiddlerもWindows環境限定。

Macでの実習に関しては以下のエントリが参考になります。

#wasbook の実習をmacでやる環境を作った

私の環境は次の通り。

・OS:Mac OS X MountainLion
・仮想化:VMWare Fusion 5 なお、VirtualBoxでも代用可能っぽい
・HTTP:HttpFoxとFirebugを併用

以下、覚えておきたい部分や詰まった箇所をメモしていきます。

1. 仮想マシンセットアップ

「この仮想マシンは移動またはコピーされた可能性があります」ダイアログが出た際に、「移動しました(正解)」ではなく、「コピーしました(間違い)」を選んでしまいました(ダイアログで、「よくわからないなら「コピーしました」を選択してください」と出てくるので…)。

「コピーしました」を選ぶと、eth0が存在しない等、ネットワーク関係の設定がおかしくなります。必ず「移動しました」を選びましょう。

2. hiddenパラメーターの書き換え

p.36では、FiddlerでHTTP通信を途中で止めて書き換えています。私の使っているHttpFoxには同等の機能が見当たらなかったので、Firebugで<input type=”hidden”>のformのvalueの値を書き換えて送信してみました。このやり方でもhiddenパラメーターの書き換えは行えます。

3. Base64エンコードされた文字列の復号(p.41)

Basic認証の際にidとパスワードを入力すると、Base64エンコードされたidとパスワードがAuthorizationヘッダーに入れて送信されます。このBase64エンコードされた文字列を復号するのに、本書ではFiddlerの機能を使っています。Fiddlerが使えなくても、該当文字列をコピーして、PHPのbase64_decode()に渡せば復号できます。

$str_base64_encoded = 'dXNlcjE6cGFzczE=';//dXN…はBase64エンコードされた文字列
$str_decoded = base64_decode(
$str_base64_encoded);//復号
echo $str_decoded;//「user1:pass1」という文字列が出力される

☆ブラウザーとサーバーのやり取りを会話にたとえていて、わかりやすい。

☆Cookieの属性の推奨設定
・Domain属性は原則として設定しない
・原則としてHttpOnly属性を設定し、JavaScriptからアクセス出来ないようにする
 PHPの場合、php.iniに「session.cookie_httponly = On」を書くとHttpOnly属性が付く。

Essential ActionScript3.0 読書メモ 第36回 packageレベルの関数

package内のどこでも利用したり、プログラム全体で利用したりできる関数を作るには、packageの本文に直接関数定義を配置する。

その関数を含むpackage内でのみアクセス可能にしたい際はアクセスコントロール修飾子internalを使用する。
例:

package packaneName {
internal function identifier() {
}
}

プログラム全体からアクセス可能にするには、アクセスコントロール修飾子publicを用いる。

package packaneName {
public function identifier() {
}
}

アクセスコントロール修飾子が設定されていない場合は、ActionScriptは自動的にinternalを用いる。

AdobeのコンパイラーはActionScriptのソースを記述したファイル(.asファイル)に2つの制限を設けている。これらはpackageレベルの関数に影響する。

(1) 全ての.asファイルは外部から見える定義を1つだけ持たなければならない。それは、internal又はpublicとして定義された、クラス・変数・関数・インターフェース・名前空間のいずれかである。

(2) .asファイルの名前は、外部から見える定義の名前と一致しなければならない。

理論上は、ActionScriptはpackageレベルの関数に何らの制限を設けていない。しかし、Adobeのコンパイラーは、packageレベルのinternal/public関数が、関数名に対応した名前をもつ個別の.asファイルに定義されていることを要求している。

外部の.asファイルに定義された関数を別の.asファイルで用いるには、importを行う。

package utilities {
import flash.system.*;
}

今日の進捗:197→199/1644

[読書メモ]エンジニアのための超速読法(Software Design 2013年2月号)

Software Design 2013年2月号の、エンジニアのための勉強法が興味深い内容だったのでメモ。以下は「超速読法」だが、他に「メモ」「教育」の方法についても触れている。

☆エンジニアのための超速読法
(1) 読む目的を明確にする
(2) 目次を見て、どこに何が書かれているかを見極める
(3) 重要事項を書き留める
(4) 1項目終わったら、残り時間をチェック
    (a) まだ時間がある → (2)へ戻る
    (b) もう時間がない →おわり

以上の工程を、制限時間を決めて行う。読書時間の目安は15分~1時間。

[PHP]func_get_args()で可変長引数

PHPマニュアルのfunc_get_args()のサンプルを一部改変。

    function foo()
{
$arg_list = func_get_args();
for ($i = 0; $i < func_num_args(); $i++) {
echo 'args no.', ($i + 1), ' is ', $arg_list[$i], PHP_EOL;
}
}

任意の個数の引数を与えると、全ての引数を表示する関数です。func_get_args()は、func_get_args()が呼ばれた関数に対して与えられた引数を配列として返します。func_num_args()は与えられた引数の個数を返します。