2016年08月22日 21:31   編集


最近の更新

2022年10月13日
2022年10月06日
2022年10月03日
2022年03月22日
2022年03月18日

公開しているスクリプト

PHP

2022/10/13 23:43:44
2022/10/06 02:04:57
2022/10/03 20:19:49
2022/03/22 20:02:45

CGI

2018/03/01 10:31:45
2016/08/26 12:24:07

counter:3,737
迷惑投稿対策 2016年08月22日 20:11   編集
トレンドマイクロのセキュリティソフトをインストールしていると、アクセスしたWEBサイトのURLがすべてトレンドマイクロに送られてしまうということがわかりました。
パスワードでアクセス制限されたページも、URLにパスワードが含まれているとそれも送られてしまうため、セキュリティ上大きな問題になります。

これは、悪意のあるプログラムが仕掛けられているWebページへのアクセスをブロックするというWebレピュテーションという機能を有効にすると、こうなるようです。

Webレピュテーションの仕組みは、
  1. WebレピュテーションをいれたユーザーがWebを閲覧すると、そのURLがすべてトレンドマイクロのサーバーに送られる。
  2. そのURLへトレンドマイクロのロボットがアクセスして安全かどうか調べる。
  3. URLが安全かどうかの情報がサーバーのデータベースに送られる。
  4. ユーザーがWebにアクセスしようとすると、データベースに問い合わせて、危険と判断されたらブロックする。
というもののようです。
続きを読む
counter:3,895
2016年08月22日 12:23   編集
名前は "Shade検索"Wiki となっていますが、Shade関係の記事はほとんどなくて、自作のCGIなどをひっそりと紹介するサイトになってます。

最近更新した記事

2022年10月13日
2022年10月06日
2022年10月03日
2022年03月22日
2022年03月18日

公開しているCGIなど

2022/10/13 23:43:44
2022/10/06 02:04:57
2022/10/03 20:19:49
2022/03/22 20:02:45
2018/03/01 10:31:45
2016/08/26 12:24:07
CGIについてのお問い合わせはCGIサポート掲示板

counter:4,782
CGI 2016年08月22日 12:22   編集

お知らせ

ver.1.974までのスクリプトにセキュリティの上の問題があることがわかったので、必ず対策を施したver.1.975以降にバージョンアップしてください。
続きを読む
counter:4,360
CGI 暗号 2016年08月22日 12:21   編集
パスワードを保存する必要のあるCGIでは、生のパスワードのまま保存するより、暗号化したほうが安心ということでこれまですべてcrypt関数で暗号化した上で保存していました。
このcrypt関数は手軽に使えて便利なのですが、有効なパスワードの文字数が8文字までという制限があります。

たとえば、「password123」というパスワードをcryptで暗号化して保存すると、9文字以降は無視されるため、「password」でも、「password012」でも正しいパスワードと認識されてしまいます。

Digest::MD5モジュールを使う

これは、やはりマズイので、何とかできないか調べてみました。
続きを読む
counter:4,522
CGI 2016年08月22日 12:21   編集
このサイトで公開しているプログラムはフリーソフトです。個人・法人に限らず利用者は自由に使用することができますが、著作権は放棄していません。
  • 利用者はプログラムの著作権表示を削除する事は出来ません。必ず「見える」位置に表示してください。

    また削除しなくても、極端に小さくしたり、配色の具合等により表示を見えにくくしてしまう行為も実質的な削除行為となります。
  • プログラムを改造して利用することは自由です。
    プログラムを改造し再配布することについては、今のところ想定していません。
  • すべてのプログラムが、すべての環境で動作する事は保証していません。
  • 当サイトのプログラムを利用した事によるいかなる損害も作者は一切の責任を負いません。
  • 作者に著しく不利益があると判断した場合には一方的にプログラムの使用を中止していただくことがあります。
  • 設置に関する質問はすべてCGIサポート掲示板でお受けします。直接メールによるサポートは行なっておりません。
  • この「利用規定」は予告なく改編・加筆を行うことがあります。
counter:4,188
PHP 2016年08月22日 12:20   編集
日付のログを残す必要がある場合、あまり考えずにtime()関数で得られるエポック秒をそのまま保存していたが、エポック秒は2038年問題を起こすらしい。

2038年問題

エポック秒とは1970年1月1日午前0時0分0秒からの経過秒のことで、1秒ごとに1増えている。そしてこのエポック秒は符号付き整数値という形式になっているが、この符号付き整数値の最大値が2147483647で、2038年1月19日午前3時14分8秒にこれを超えてしまう。
2038年にならなくてもエポック秒同士の計算をしてその結果が最大値2147483647を超えるとエラーを起こすことになる。最大値を超えるとマイナスになってしまうというケースもあるようだが、Xamppを使用したローカル環境でテストしてみると、最大値を超えるとintegerではなくfloat値と判断され、エポック秒を使う関数では、float値を想定していないのでエラーになる。

日付フォーマット

エポック秒のままログに保存するのはやめた方が良さそうだが、すでに保存されているログをすべて修正するのも面倒だ。時間ログとして保存されている数値が符号付き整数値になっている場合は、エポック値として処理し、そうでない場合は新しいフォーマットとして処理することにする。

とりあえず、time()を使っている部分はdate_createやDateTimeを使って書き換えたが、setcookie関数にもエポック秒を渡すことになっているのが面倒。
指定しなければ、ブラウザを閉じるまで有効なクッキーということになるらしいが、それではクッキーの意味が無い。

このようにエポック秒でしか得られないもの、指定できないものもあるようなので、完全にエポック秒を使わないというのは難しそうだ。エポック秒を64bit整数値で扱うようになれば、最大値が桁違いに増えるため実質的に問題はなくなりそうだ。32bitのままでも符号付きから符号なし整数値で処理できれば、扱える年数が数十年延びる。おとなしくPHPの仕様の変更を待つ方がいいかも知れない。
今のところ注意すべきは日付の足し算をする場合、エポック秒のままで計算すると上限を超えてしまうおそれがあるということだ。たとえば2016年の25年後を計算したら超えてしまう。引き算も結果が1970年以前になるとエラーになる。このため、こうした計算をする場合はdate_createやDateTimeを使ってtimeオブジェクトを生成した方がいい。
counter:3,909
PHP 暗号 2016年08月22日 12:20   編集
パスワードを暗号化する場合、perlでは、crypt関数を使うと有効な文字列が8文字までという制限が有るため、MD5モジュールを使って暗号化していたが、PHPの場合は逆にcryptを使った方が強度は高いようだ。
暗号化の目的は、サーバー上に保存したパスワードが万一漏洩しても、元のパスワードが知られないようにするためで、この場合復号する必要は無い。暗号化されたパスワードと元のパスワードを照合して、暗号化されたものが元のパスワードから生成されたものであることがわかりさえすればいい。
PHPでmd5()関数を使うと、ハッシュ値と呼ばれる32桁の16進数に変換される。
$str = 'abcd';
$md5 = md5($str);
echo $md5;
実行結果
e2fc714c4727ee9395f324cd2e7f331f
たとえば上記のように「abcd」という文字列をmd5でハッシュ化すると、「e2fc714c4727ee9395f324cd2e7f331f」という文字列が得られる。
「abcd」とハッシュ化された文字列は1対1の対応で、「abcd」を何度md5でハッシュ化しても「e2fc714c4727ee9395f324cd2e7f331f」になる。
このハッシュ値から元の文字列を得る方法はない。つまり「e2fc714c4727ee9395f324cd2e7f331f」から元の「abcd」を得ることはできないということが、暗号の強度の根拠になっている。
ところが、ハッシュ値のデータベースから元の値を得るモジュールなるものが存在するらしい。
続きを読む
counter:4,542
PHP 2016年08月22日 12:20   編集

ソート

  • 連想配列の値でソート
asort($array); // 昇順
arsort($array); // 降順
  • 連想配列のキーでソート
ksort($array); // 昇順
krsort($array); // 降順
  • シュウォーツ変換風ソート
perlで
my @keys = (keys %count);
@keys = map {$_->[0]} sort {$a->[3] <=> $b->[3]} map {[$_, split /_/]} @keys;
phpだと、前準備が必要だが
$keys = array_keys($counts);
$sort = array();
foreach ($keys as $i) {
$tmp = explode('_',$i);
$sort []= $tmp[3];
}
array_multisort($sort,SORT_ASC,SORT_NUMERIC,$keys);
のような感じ

サクラエディタでphpに変換

pp(****) → "****"
qq\((.+?)\)
"$1"
ハッシュを連想配列に変更
$hash{'***'} → $hash['***']
(\$[^$!(){]+?)\{(.+?)\}
$1[$2]
文字列中の配列の表記を変更
mode=$in['graph_mode']&amp; → mode=" . $in['graph_mode'] . "&amp;
=(\$in\[.+?\])
=" . $1 . "
正規表現の表記を変更
$str =~ /$ptn/ → preg_match('/$ptn/',$str)
(\$.+) =~ (\/.+\/)
preg_match('$2',$1)
counter:3,519