興味のあること
ちょっと学びたいことを整理する。
言語とかライブラリ
- Go言語
- Socket.IO 1.0
- swift
- javascript
- もっと高みを目指したい
- 最近触ってないので、定期的に触ったりしライブラリを試したりしてキャッチアップしておく
- fuel PHP
- 新卒のコード読むために最低限は
人間として
最近のフロントエンド
最近のフロントエンドでみんなが知りたいことってなんだろう。
ChefDevelopmentKit(ChefDK)入れてみた
chefを使ってみたいのだが
最近chefの勉強を始めたのですが、cookbook
だとかrecipe
だとか言う以前に環境構築するのに手間取って、意外と時間がかかってしまった。特にknife-solo
とberkshelf
は依存ライブラリやrubyのバージョン関連で上手く行かず、一度環境を作り直すことになったりした。非rubyistでrbenvだとかgemだとかなんとなく適当に入ってる、みたいな人は同じような経験をした人が多いと思う。
Chef Development Kit (ChefDK)
インストールがまさに成功したときに見つけたのがこれ、もう1日早く知りたかった。。。
http://www.getchef.com/downloads/chef-dk
chef-dkの名の通り主要なものがだいたい入ったパッケージで、普通にインストールするだけでchefだのknifeだのberkshelfだのがまとめて入る。
Installation
上記ページからダウンロードしてインストールするだけ。macなら/opt/chefdk
に一式追加されている。homebrew-caskも使えるっぽい。デフォルトだとsudo権限が必要なので、必要に応じてPermissionは変更する。chef
コマンドやknife
コマンドなどは/usr/bin/
にシンボリックリンクが貼られている。
Settings
ChefDKのシステムを利用する場合はchef
コマンドを利用する。knife-solo
のインストールは以下。
$ chef gem install knife-solo
$ ~/.chefdk/gem/ruby/2.1.0/bin
上手くいかない場合、PATHを通す必要があるかも。
githubが設定は詳しい。 https://github.com/opscode/chef-dk
ChefDKの環境をデフォルトで利用する場合、以下のPATHを追加する。既存のruby環境の上に来る。
$ /opt/chefdk/embedded/bin $ ~/.chefdk/gem/ruby/2.1.0/bin
まとめ
初学者が悩むことなく簡単に実行環境を構築できる、という点では非常に優れているし、アップデートで毎回心配することがないのも素晴らしい。「chefの環境構築はここからスタート」でも個人的にはよいと思う。
※残念ながらwindowsはcomming soon。最も待望していると思われるwindows勢の方は首を長くして待つとよさそうです。
ディレクトリ内の特定ファイルをソートして先頭のn件取得したい
詰まったのでメモ。
特定ファイルを削除
. +-- hoge +-- foo3.txt +-- foo2.txt +-- foo1.tx +-- bar3.sh +-- bar2.sh +-- bar1.sh
こんな感じのディレクトリを想定。 ここから
- .shファイルのみソートして
- フルパスで
- 先頭の2件のみ取得して
- 削除したい
以下のようなコマンドで実現できる。
DIR=`pwd` /bin/ls -A ${DIR}/*sh | awk '{print("'${DIR}'"$1)}' | sort | head - 2 | xargs rm
重要なのは以下の事柄。
- rcファイルでコマンドにオプション付きのaliasを設定している場合にデフォルトだと競合してしまうことがある
- フルパスでコマンドを記述するか、
\ls
のようにバッククォートを使う - lsの-Aオプションで
.
や..
のディレクトリを除外できる - awkコマンドでシェル変数を展開したい場合は、シングルクォートの外に記述する(少々泥臭いのでfind使ったほうが健全かもしれない。また、パスを環境変数に入れるのが少々駄目っぽいのでやはりfindがよさそう)
おまけ
末尾からの件数を出力する場合は、tailコマンドの-n
オプションが便利だ。tail -n 5
で末尾から5行分出力してくれる。また、+10
といったオプションで先頭10行目から末尾まで出力するすることもできる。例えば、10件中先頭2件を残して削除したい場合は、以下のようにする。
LENGTH=`\ls -A | wc -l` # 10 \ls -A | tail +3 | xargs rm #3行目から出力しxargsに渡す
この手のシェルスクリプトは手を動かして覚えておくべき。
複数行ある文字列に重複がないかチェックする
テキスト操作のメモ。とあるファイルが以下のようであったとする。
foo bar baz
これに重複がないかチェックしたい。 以下のコマンドでチェックできる。
cat foo.txt | sort | wc -l cat foo.txt | sort | uniq | wc -l
結果
3 3
上記コマンドで出力が同じであれば重複なしと判断できる。
テキストを変更する。
foo bar baz bar
結果
4 3
重複があることが分かる。
ディスプレイの枚数とか
最近デュアルディスプレイとか不要な気がしてきた。視線を動かすのがめんどい。その代わり2560x1440の27インチディスプレイが一枚ほしい。4万以上で手が出ない。
Webアプリケーションの脆弱性、攻撃手法とその対策
今回はWebアプリケーションにおける脆弱性についてまとめる。フレームワークが当たり前の時代とはいえ、脆弱性を生む場面を理解し、正しい処理をしておかなければ必ずウィークポイントを産んでしまう。脆弱性を突かれる突かれない以前に、これは普通に恥ずかしいことである。恥ずかしいことなので、IPAの「セキュア・プログラミング講座」や「安全なウェブサイトの作り方」には一度目を通しておくべき。
http://www.ipa.go.jp/security/awareness/vendor/programmingv2/index.html http://www.ipa.go.jp/security/vuln/documents/website_security.pdf
Webアプリケーションの主たる脆弱性
どのような脆弱性が存在するのか列挙していく。基本的にはこんなものだと思う。
- SQLインジェクション
- OSコマンドインジェクション
- 公共領域への意図しないファイル配置
- ディレクトリトラバーサル
- URLクエリパラメータ推測
- XSS攻撃(クロスサイト・スクリプティング)
- CSRF攻撃(クロスサイト・リクエスト・フォージェリ)
- エラー画面表示・デバッグモード有効状態
- Cookieの改竄
- ヌルバイト文字列
- HTTP ヘッダ・インジェクション
- バッファ・オーバーフロー
攻撃と対策
主要な脆弱性の概要、具体的な攻撃手法とその対策についてまとめる。
SQLインジェクション
- 概要
説明するまでもないと思うけど、SQLインジェクションはフォームやパラメータを通じてSQL文やその一部を入力することで、DBに意図しないクエリを投げられ得る脆弱性。
- 攻撃手法
こんな感じのシーンが考えられる
// 件数設定 var lim = $('input#text').attr('value'); var sql = "SELECT * FROM table ORDER BY id LIMIT lim";
ユーザーの入力値およびSQLクエリに対してvalidationが掛けられていない場合にSQLインジェクションが起こる。もしそのようだとここで仮定したとして、変数limにこんな値を入れてみたい。
var lim = 100000000000000000000000000000000000000; とか var lim = "1'; DROP TABLE table"; など
上はレコードの上限をとにかく増やして負荷をかけることが可能になる。したはクエリを一度切ってしまうことでまた新しく任意のクエリをユーザーが入力できてしまう。最悪データベースが吹っ飛ばされる。「このサイト怪しいなー」とか思ったら、シングルクオートやセミコロンなどで挙動を確認...けど犯罪なのでやめましょう。
- 対策
SQL注入攻撃の対策には、次の4つがある。validation,特殊記号のエスケープ,プレースホルダ採用,ストアドプロシジャによる実装である。採用を考慮する順序は、ストアドプロシジャ、プレースホルダ、特殊記号エスケープの順である。validationは常に行う。
XSS攻撃
CSRF攻撃
未完。徐々にまとめてきます。