2019年12月21日(土)
ログインページを守る技術 #■パソコン・通信 ガレコレの最高峰の技術は秘密とさせて頂きますが、ログインページにたくさんの錠を仕込んだシステムをご紹介します。この程度でも、セキュリティとしてはまあまあで、お客様からは「そこまでは要らない」と言われて、提供したことはありません。
この技術のサンプルとフローチャートを公開したのは、有名サイトでもログインページのセキュリティがお粗末なことを嘆いてのことです。
なお、サンプルなので、それぞれのキーの値は静的で簡単な文字列にしております。運用時には、D/Bを用いて、動的に暗号化した文字列を使用します。
サンプルでは、状況に応じたコメントが表示されますが、運用時には「Error!」の一言で済ませるか、フェイクページに飛ばせばいいのです。
【サンプル】
http://neconote.jp/prg/login.php →
SSL
False
⓪SSL利用が必須
https://neconote.jp/prg/login.php →
GET
key
False
①第1キー:GET/POST
key
https://neconote.jp/prg/login.php?key=123 →
You
need
to
make
a
cookie
key.
・SSLでは、GETパラメータ(?から右側)も暗号化されます。
・このキーをアドレス(URL)に追記しないと、何も進みません。
・ログインページ表示以降は、POSTパラメータで行います。
②第2キー:COOKIE
key
https://neconote.jp/prg/login.php?key=123&mk_cookie=abc →
A
cookie
key
was
made.
・COOKIEに第2キーを作成します。
・入力を間違ったら、ブラウザのCOOKIEを削除して、同じ作業を行います。
※運用時には、第2キーをD/Bで管理して、一度しか発行できないようにして、裏口(back
door)を閉じます。
※COOKIEが期限切れか、COOKIEを削除してしまうと、第2キーは無くなります。COOKIEの期限切れをさせないためには、ログイン成功時にCOOKIEの更新が必要です。
③第3キー:ユーザ名とパスワード
https://neconote.jp/prg/login.php?key=123ユーザ名 :usr
パスワード:passwd
正→
Login
Successful!
誤→
Login
False
④第4キー:SESSION
key(内部キー)
・不正アクセスを想定してのキーです。
⑤同一ファイルのチェック
・不正アクセスを想定してのチェックです。
【フローチャート】
[⓪SSL]
◇─→
"SSL
False"
有│ 無
↓
session_start()
↓
[④SESSION
key]
◇────→[④SESSION
key=sesami]
無│ 有 ◇─→
"SESSION
key
False"
│ 正│ 誤
│ ↓
│ [⑤同一ファイル]
│ ◇─→
"File
False"
│ 正│ 誤
│ ↓
│ [①POST
key=123]
│ ◇─→
"POST
key
False"
│ 有│ 無誤
│ ↓
│ ★
↓
[①GET
key=123]
◇─→
"GET
key
False"
正│ 無誤
↓
★
↓
[②COOKIE
key]
◇─→[GET
mk_cookie=abc]
有│ 無 ◇─→
"A
COOKIE
key
was
made."
│ 無↓ 有
│ "You
need
to
make
a
COOKIE
key."
↓
[②COOKIE
key=12345678]
◇─→
"COOKIE
key
False"
正│ 誤
↓
[③POST
usr/passwd]
◇─→[③POST
usr=usr/passwd=passwd]
無│ 有 ◇─→
"Login
Successful!"
│ 誤│ 正
│ ↓
│ [SESSION
count++]
│ ◇─→
"Login
False"
│ 内│ 外
↓ ↓
ログインページの表示
なお、PHPプログラミングコードは、下記のテキストファイル(Shift_JIS)を参照して下さい。ご自由に加工してご利用下さい。
http://neconote.jp/prg/login.txtP.S.
最近では、文字コードはもっぱらUTF8で作成しますが、テキストファイル(.txt)に対して各ブラウザの自動判別ではShift_JISとなり、UTF8では文字化けしますね。テキストエンコーディングを変更すれば、正常に見えますが、面倒です。なので、今回のサンプルPHPファイルおよびテキストファイルは、Shift_JISにしました。
P.S.2
Miさん、ガレコレの最高峰の技術の一つと謳っているミラージュシステムの仕様、当たりです。まあ、PHPをよく知っている方なら、気づきますよね。
サーバのファイルシステムに関与して、ログインページのファイル名やコンテンツのディレクトリ名(フォルダ名)を変更します。アクセスキーを当てられる前に、存在を変化させて、アクセスキーも作り直します。
例えば、サハラ砂漠のどこかのオアシスにお宝があるとします。そのオアシスは移動を繰り返すというお決まりの設定で、偶然に見つけたとしても、もたもたしている間に、消え去ってしまうというもの。
それでも、D/Bやサーバ自体が乗っ取られたら無意味ですが、そこまで言ったらキリがない世界です。
まあ、このレベルのシステムは、今のガレコレには不要です。いたちごっこに疲れて、今は公開データのみの『子猫の手
Ver.2(ニャン)』の運用のみですから。。。
なんか、試作品、作り直すの馬鹿らしくなってきたニャー。今でも、きちんと動くかどうか確認したいだけなんだけどね。