ポートを使用しているプロセスを調べる
lsofを使う
$ lsof -i:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 503 apache 4u IPv6 147871264 0t0 TCP *:http (LISTEN) httpd 2552 apache 4u IPv6 147871264 0t0 TCP *:http (LISTEN) ...
プロセスIDを指定するとプロセスが使用しているファイルが参照できる
$ lsof -p 503 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 503 apache cwd DIR 202,1 4096 2 / httpd 503 apache rtd DIR 202,1 4096 2 / httpd 503 apache txt REG 202,1 528608 410347 /usr/sbin/httpd httpd 503 apache DEL REG 0,5 184309674 /dev/zero httpd 503 apache mem REG 202,1 275920 691626 /usr/lib64/php/5.6/modules/redis.so ...
multipart/form-data時の生POSTデータを見る
php://input は、 enctype="multipart/form-data" に対しては使用できません。とのこと。
どうやら、Content-type: multipart/form-data の時のみ機能しないみたい。
とのことなので、.htaccessでmultipart/form-dataのヘッダーをunsetすればよい
SetEnvIf content-type (multipart/form-data)(.*) MULTIPART_FORMDATA=true RequestHeader unset content-type env=MULTIPART_FORMDATA
<?php var_dump(file_get_contents("php://input"));
date infinity
無期限を表すdate infinityが便利
INSERT INTO events(date) VALUES('infinity'); INSERT INTO events(date) VALUES('-infinity');
select * from event where date > now(); date ---------- infinity (1 行)
select * from event where date < now(); date ---------- -infinity (1 行)
今日のハマりどころ
まだまだ、SNIに対応してないクライアントは沢山ある
サーバのSSL証明書を更新したらある程度古いAndroid端末からSSL通信できないという事象が発生。
ジオトラストの証明書にしたんで、きっと中間証明書かクロスルート証明書絡みなんだろうな〜と思いながら調査をしていたが、
$ openssl s_client -showcerts -connect www.mydomain.jp:443
の値も更新前の証明書の値が返ってきたりで...
ん?virtual host??
www
対象のAndroid端末はすべてDefaultHttpClientからリクエスト
以下の記事にあるように「HttpURLConnectionではSNI接続を試みる」とあるようにDefaultHttpClientではSNIに対応してないように読み取れる
http://android-developers.blogspot.jp/2011/09/androids-http-clients.html
で、対象のサーバの設定を確認してみたところ、
SNIに対応してないクライアントへはdefault virtual hostの期限切れ証明書を返していただけというオチ。
で特に複数証明書を運用するサーバでもなかったので、default virtual hostを停止したんだけど...
真剣にSNI運用しているサーバって非対応クライアントからのアクセスどうしるんだろう...
svn resolvオプションメモ
tree衝突した時のオプションをよく忘れるので。
$ svn resolve --accept working filename
base
作業コピーを更新する前の、BASE リビジョンのファイルを選択します。これは、最後の編集を行う前のチェックアウトしたファイルです。
working
手動で競合解決を行ったと仮定し、現在作業コピーにあるファイルを、このファイルのバージョンとして選択します。
mine-full
競合したすべてのファイルを、svn update を実行する直前にあったファイルのコピーで、解決します。
theirs-full
競合したすべてのファイルを、svn update を実行したときにサーバから取得したファイルのコピーで、解決します。
HostヘッダーなしでプライベートIPがLocationヘッダーに出力される件
http://www.intellilink.co.jp/article/column/security-net02.html
通常、下のようなURLにアクセスし、
http://example.com/img
サーバ内のDocumentRootにimgというファイルが存在しない場合、
Location:http://example.com/img/
のヘッダーが吐き出され、http://example.com/img/ にリダイレクトする
ある特定の条件下で、
Location:http://192.168.0.1/img/
のようにプライベートIP漏洩するケースがある
条件は
- HTTP/1.0
- クライアントからHostヘッダーの送信なし (HTTP/1/1は必須)
- apacheの場合、httpd.confのServerNameディレクティブが未定義 vhostsのServerNameは関係しない
理屈としては、LocationヘッダーによるリダイレクトはHostヘッダーを見て定義する、存在しない場合はServerNameディレクティブの値とするということらしい。
解決はhttpd.confのServerNameディレクティブを設定することで対応できる (vhostsは不可)