fuelphpのSQLインジェクション対策とSQLインジェクションの機械的チェック
fuelphpのSQLインジェクション対策についていろいろ調べた。
http://d.hatena.ne.jp/Kenji_s/20111222/1324526139
Query Builderを使った場合はエスケープしてくれる。
DB::query()だけ注意。
DB::query()の場合もbindで値を渡す場合はエスケープしてくれる
\DB::query('select * from hoge where id=' . $id)->execute();
こういう書き方がアウト
そこで上記の書き方を検索する正規表現を作った。
/query\([^)]*?\$.*?\)/
query引数内に$があればヒットする。\$とかにもヒットするけど、SQL内で$は使わない・・・はず。
これをJenkinsさんとかにビルド毎にソースをgrepしていただいて、
見つかったらエラーにしてもらうと、とても便利な気がした。
あとドライバがmysqliだと複文が使えなくなっててなお良し。
※セキュリティチェックこそ自動化すべきだよね。デスマ中とかにセキュリティ意識したコードとか不可能。
AWS CLIでcloud watchのデータを取得する。
↑公式からダウンロード
EC2インスタンス情報
aws ec2 describe-instances
cloud watchからCPU情報取得
aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-hoge --statistics Average --period 60 --start-time 2014-02-17T09:15:00Z --end-time 2014-02-17T09:20:00Z
※InstanceIdの複数指定の仕方がわからない・・・spaceで区切れって公式に書いてあるけど、書式が違うのかうまくいかない。誰か知ってる人、コメントお願いします。
fuelphpのas_arrayでのkey指定の制限
fuelphpのas_arrayでのkey指定の制限
as_arrayで配列のキーを指定する場合、
キーのカラムがユニークである必要がある
プライマリーキーが複数カラムの場合も対応してない。
またまたハマったのでメモ
http://fuelphp.jp/docs/1.7/classes/database/usage.html#results
オプションとして、as_arrayから返る配列のキーと値を指定することもできます。
$result = DB::select()->from('users')->execute(); $on_key = $result->as_array('id'); foreach($on_key as $id => $item) { // $id にはレコード ID が入る // $item またはその $id に関する処理 } $key_value = $result->as_array('id', 'email'); foreach($key_value as $id => $email) { // ここで $email には電子メールのフィールドが入るので // $id や $email に関する処理ができる }
as_arrayのソースを見てみる。
/fuel/core/classes/database/result.php
elseif ($value === null)
{
// Associative rows
if ($this->_as_object)
{
foreach ($this as $row)
{
$results[$row->$key] = $row;
}
}
else
{
foreach ($this as $row)
{
$results[$row[$key]] = $row;
}
}
}
上下は省略してます。
$resultsが結果なんですが
$results[$row[$key]] = $row;
とキー指定されたレコードの値で変数にいれてます。
つまりキー指定されたレコードの内容が同じになる場合は上書きされます。
プライマリーキーor ユニークなカラムで使いましょう。ということなんでしょうね。
ドキュメントに書いといてよ・・・
プライマリーキーが複数カラムの場合もこれだと上書きされるので使えません。
制限に引っかかる場合はキーの指定をせず
自分で配列に詰めなおしましょう!
fuelphpのプロファイリングを有効にする方法
fuelphpのプロファイリングを有効にする方法
http://fuelphp.jp/docs/1.7/general/profiling.html
公式ドキュメントでは
config/config.php
に設定追加すべしとあるが、せっかく環境ごとの設定ファイルを作れるので
config/development/config.phpを作成し、
中身を下記のようにした。
<?php
return array(
'profiling' => true,
);
config/development/db.phpにも追加
'default' => array(
'connection' => array(
'hostname' => 'hoge.hoge.com',
'port' => '3306',
'database' => 'hoge',
'username' => 'hoge',
'password' => 'hoge',
'persistent' => false,
'compress' => false,
),
'profiling' => true,
),
※追加場所はconnection内ではなく、default直下なことに注意。最初、まんまと間違えた。。。
これで開発環境のみプロファイリングしてくれる。
このプロファイリング機能自体はSQLのexplainまでしてくれる優れもの。
unityでネストの深いJSONを扱ってみる(MiniJSON編)
unityでネストの深いJSONを扱ってみる(MiniJSON編)
http://www.cho-design-lab.com/2013/08/15/unity-minijson-load-json/
↑を見ながらMiniJSONを入れる
次に深ーいネストのJSONを読み込む
今回使ったのはこれ
http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html
あまりに深いので本体は乗せませんw
それをパースするコードが↓
var jsonData = MiniJSON.Json.Deserialize(json) as Dictionary<string,object>;
List<object> Reservations=(List<object>)jsonData["Reservations"];
Dictionary<string,object> Instances=(Dictionary<string,object>) Reservations[0];
List<object> Instances_info=(List<object>) Instances["Instances"];
Dictionary<string,object> Instance_value=(Dictionary<string,object>) Instances_info[0];
print(Instance_value["InstanceId"]);
キャストして代入しまくり。
変数に代入せず直接アクセスを試みる
var jsonData = MiniJSON.Json.Deserialize(json) as Dictionary<string,object>;
print(
(
((Dictionary<string,object>)
((List<object>)
((Dictionary<string,object>)
((List<object>)
jsonData["Reservations"])
[0])
["Instances"])
[0])
["InstanceId"])
);
もうなにがなにやら・・・
他に書き方あるのかもしれませんが・・・
まあ、単なるネタなんですが、
MiniJSONを使うときはシンプルなJSONのほうがいいっぽいぞ!
フレームを使用したページでChrome Loggerが不安定
Unityテスト
http://www.youtube.com/watch?v=cW0XLQlK-kY
UnityでCGのテストをしてみた。
無料素材とGIMPとUNITYフリー版を駆使して作りました。
なかなかのできに満足。