■アカウント漏れ確認用サイト
Microsoft地方支配人のセキュリティ開発者としてMVPも受賞したことがあるトロイ・ハントさん作成の信頼性が高いサイトで有名とのこと
自分の保有するアカウントの危険性を無料かつ簡単にチェックできるようにするウェブサービス
■事象
PHPでSmarty変数に受け渡す場合に改行が空白になる
■原因
PHPスクリプト中で改行「"\n"」を入れてもブラウザでの表示結果には反映されない。
ブラウザはHTML文書を解釈して表示するアプリケーションのためブラウザ上で改行する場合は、HTMLの改行タグ「
」を入れないといけない。
■対応
※Smartyでの書き方
・正規表現で置換
({"/\n/"|preg_replace:"
":$body})
・Smartyの関数で置換
({$body|nl2br})
■参考になるサイト
logrotateとは
ログ肥大化を防ぐために不要な過去のログを圧縮しディスクのサイズを確保する
再起動後Apacheダウン不具合
あるサーバーで、ログローテーション後に再起動がかかるはずが、正常に再起動せず
Apacheがダウンしたままだった
原因の一因はバグ?!
正常に起動しない一因として、ログローテーション後に「reload」で再起動設定。
reloadはSIGHUPというをシグナルを発行するが、SIGHUPを受けてApacheが異常終了するのは、CentOS 5でapache 2.2+PHP 5.1.6の環境においてたまに生じるバグだった。
対応・対策
■概要
XXXサーバーからAPI側のgatewayサーバーへ接続可能にする対応
※今回の構成上、gatewayサーバーは中継サーバーを経由しているため
中継サーバーにも設定が必要
■routing追加IP
#gateway用
XXX.XX.XXX.0/20
#中継サーバー用
YYY.YY.YYY.0/24
■検証
・gateway(XXX.XX.XXX.XX)のping疎通
routing追加対応
■現在のrouting設定表示
[root@ ~](VM-GUEST)# /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
111.11.11.111 0.0.0.0 255.255.255.224 U 0 0 0 eth0
222.22.222.0 333.33.333.3 255.255.255.0 UG 0 0 0 eth1
444.44.444.0 555.55.555.5 255.255.255.0 UG 0 0 0 eth1
■routing追加コマンド
route add -net XXX.XX.XXX.0/20 gw XXX.XX.111
route add -net YYY.YY.YYY.0/24 gw XXX.XX.111
static routeの設定
※再起動時に設定が消えないための対応
●確認
less /etc/sysconfig/static-routes
●追加項目
any net XXX.XX.XXX.0 netmask 255.255.240.0 gw 172.16.111.254
any net YYY.YY.YYY.0 netmask 255.255.255.0 gw 172.16.111.254
■事象
URLのパラメータに"+"文字がある場合空白になってエラーになっていた
作業的にはログインIDとPASSを暗号化したURL等を確認していた
可逆暗号化のための準備
<暗号化方法>
base64でエンコード→mcrypt_genericで暗号化→base64でエンコード
<復号化方法>
base64でデコード→mdecrypt_genericで復号化→base64でデコード
■空だよの下記エラー
Warning: mdecrypt_generic() [function.mdecrypt-generic]: An empty string was passed in /www/XXX.php on line 87
Warning: mdecrypt_generic() [function.mdecrypt-generic]: An empty string was passed in /www/XXX.php on line 88
■該当箇所のソース
//パラメータ取得if(isset($_GET["login_id"]) && $_GET["login_id"]){
$loginId = $_GET["login_id"];
}
if(isset($_GET["login_pass"]) && $_GET["login_pass"]){
$loginPass = $_GET["login_pass"];
}
~省く~
/** 復号化
*/
//ID・PASSの復号化//エラー該当箇所の87行目
$dec_str_id = mdecrypt_generic($td, base64_decode($loginId));
$dec_str_pass = mdecrypt_generic($td, base64_decode($loginPass));
php側のグローバル関数の$_GETがURLを自動でurldecodeしていた。
■超絶わかりやすかったサイト
■似た現象のサイト
→rewriteRuleで解決してる
→POSTで解決している
→URLをエンコードしないといけないのね。
■PHPで自動変換事例
→PHP は“.”(ドット)を“_”(アンダースコア)に自動的に変換する事例
→上記の旨を記載している本家PHP説明サイト
PHP: 外部から来る変数 - Manual
■URLエンコードサイト