トップページ⇒php
1001コメント335KB

【PHP】下らねぇ質問はここに書き込みやがれ 33

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/11/23(木) 00:27:02ID:???
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

【前スレ】
 【PHP】下らねぇ質問はここに書き込みやがれ 32
 http://pc8.2ch.net/test/read.cgi/php/1162818436/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc8.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
 しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0357nobodyさん2006/11/28(火) 11:11:35ID:MVyDbxlO
>>353

substrの存在を忘れてました…
助かりました!ありがとうございます。

>>354
今回は半角英数字しか使う予定はないので、その問題は大丈夫っぽいです。
マルチバイト使うときは、気をつけます。
ありがとうございます。
0358nobodyさん2006/11/28(火) 11:12:40ID:???
半角だけなら
$s = "hogehogebar";
$l = strlen($s);
for ($i=0; $i<$l; $i++) {
echo $s{$i};
}
でええやん
0359nobodyさん2006/11/28(火) 11:12:53ID:XGgokU8X
>>355

そういう方法もありますね、今回は直接入力された変数から行うので、残念ながら使えませんが、
その方法も覚えておきます。
ありがとうございます。
03603582006/11/28(火) 11:16:05ID:???
オッパイ括弧はDeprecatedだったわ
echo $s[$i]; でアクセス
0361nobodyさん2006/11/28(火) 11:22:10ID:???
>>356
array_keys($_GET);でhelloだけ取れると思うけどキーだけとってどうすんの?
フラグにしたいなら isset($_GET['hello']) で判定可能
0362QQQ2006/11/28(火) 11:33:10ID:trk6Ybn1
テキストボックス一つに対してボタンを二つ用意して
それぞれのボタンで入力に対して異なる処理をさせたいんですが、
どうやったらできますか?
現状ソースは以下
<INPUT TYPE="text" NAME="var" SIZE="20">
<FORM ACTION="http://localhost/search1.php"; METHOD=POST>
<INPUT TYPE="submit" VALUE="実行1">    
</FORM>
<FORM ACTION="http://localhost/search2.php"; METHOD=POST>
<INPUT TYPE="submit" VALUE="実行2">    
</FORM>
元々、一行目の文を<form>の中に入れてました。ボタンを二つに
したかったので外に出しちゃいましたwこれでは値が渡されません。
あ、これPHPファイルをコールする直前のHTML内の処理ですね。
でもできれば回答お願いします。
0363nobodyさん2006/11/28(火) 11:38:35ID:XGgokU8X
>>358

そんな方法があったんですね…
勉強不足でした。

早速試してみます。

ありがとうございます
0364nobodyさん2006/11/28(火) 11:41:33ID:???
>>361そんな回答していいのか?的外れだろ
0365nobodyさん2006/11/28(火) 12:38:18ID:???
QUERY_STRING
0366nobodyさん2006/11/28(火) 13:33:08ID:???
>>362
はいはい、マルチマルチ
0367nobodyさん2006/11/28(火) 13:40:05ID:???
はわわー
0368nobodyさん2006/11/28(火) 14:46:43ID:9CSKXruB
フォーム登録処理で登録完了ファイルに

if($_SERVER['REQUEST_METHOD']=="POST"){
if(get_magic_quotes_gpc()){
$_POST["name"] = stripslashes($_POST["name"]); //フォームの数だけ用意
}
//改行を<br>にする
$_POST["comment"] = str_replace("\n", "<br>", stripslashes($_POST["comment"]));
//POSTを変数にする
$name=$_POST["name"]; //フォームの数だけ用意
}

上記のような記述を書いているのですが、やはり必ず書くようにした方がいいですよね?
フォームの数が多いとかなり長くなり、めんどくさいのですが、、
それでもセキュリティ的に必要だと思うし…みなさんはどうしているのでしょうか?
0369nobodyさん2006/11/28(火) 14:50:10ID:???
プログラマにとって怠惰は美徳だってじーさんが言ってるよ
0370nobodyさん2006/11/28(火) 14:51:19ID:???
>>368
最初からmagic_quotes_gpcをオフにしておけばおk
03713682006/11/28(火) 14:53:10ID:???
>>370
それって将来的に問題ないですかね?
前に2ちゃんで指摘されたことがあります。
0372nobodyさん2006/11/28(火) 14:56:26ID:???
毎回書いてることが問題
どんだけ馬鹿なんだよw
0373nobodyさん2006/11/28(火) 14:57:22ID:???
>>369
perlスレにお帰りください
0374nobodyさん2006/11/28(火) 15:14:51ID:???
>>371
お前の脳味噌が問題
0375nobodyさん2006/11/28(火) 15:18:06ID:???
>>371
magic_quotes_gpcなんて最初のド素人のうちしか意味がない
0376nobodyさん2006/11/28(火) 15:18:35ID:???
どう問題なんでしょう?馬鹿なんで教えて下さい
0377nobodyさん2006/11/28(火) 15:25:47ID:???
http://jp.php.net/manual/ja/security.magicquotes.php
とりあえずここ熟読してから来て
0378nobodyさん2006/11/28(火) 15:53:05ID:q3z6QRVX
配列で、指定の文字数以上のものを
取り出すには何を使えば良いのか
0379nobodyさん2006/11/28(火) 16:06:02ID:AFqLXmTZ
$_GET配列を使う際に、
phpが自動でURLデコードをしていてそれが失敗しているために
日本語文字列が化けてしまうのですが、
(インプットアウトプット内部全部EUC-JPでまとめてるからconvert要らないはずなのに・・・)
自動デコードをさせない設定等があれば教えて下さい。
0380nobodyさん2006/11/28(火) 16:12:10ID:???
>>378
手作業、手作業!!
楽しようとすんなよかす
0381nobodyさん2006/11/28(火) 16:19:05ID:q3z6QRVX
手作業とかは無理です
便利な方法おお願いします
0382nobodyさん2006/11/28(火) 16:24:20ID:???
>>378
そもそも文字列の文字数を指定しておけばいいって話じゃないのか?
0383nobodyさん2006/11/28(火) 16:24:32ID:???
>>381
なまいきだぞ
しかたないからヒントな!
substr
これで調べろ
0384nobodyさん2006/11/28(火) 16:37:15ID:???
array_filterとか
0385nobodyさん2006/11/28(火) 16:45:02ID:???
>>378
strlen
0386nobodyさん2006/11/28(火) 17:09:32ID:???
>>378
function get_array_by_len(array $array, $len = 10)
{
$result = array();
$array = new ArrayIterator($array);
for ($array->rewind(); $array->valid(); $array->next())
{
if ((mb_strlen($array->current()) >= $len))
{
$result[] = $array->current();
}
}
return $result;
}
0387nobodyさん2006/11/28(火) 18:12:01ID:???
PHPの出力をブラウザにキャッシュさせたのですが
何も定義していなのにPragma: no-cacheと過去を指定したExpiresがhttpヘッダに
送信されているようです。
Expiresは未来の日時へ上書きするとしてPragma: no-cacheを出力させないようにするには
どのようにすればよいのでしょうか。
header
headers_ list
headers_ sent
のリファレンスは見ましたが解決に至りませんでした。
0388nobodyさん2006/11/28(火) 18:35:15ID:???
>>387
ヘッダは、PHPのじゃなくてWebサーバーが出力してる に一票。
出力させない方法は俺は知らないが、Expiresを上書きできるなら
Pragmaも適当な意味のない値で上書きすれば良いのでは。

//ちなみにレスポンスの Pragma: no-cache はHTTP/1.0の規格外
0389nobodyさん2006/11/28(火) 18:43:29ID:???
>>368
>$name=$_POST["name"];

何の意味があるんだ、これ。
0390nobodyさん2006/11/28(火) 18:46:40ID:???
なんか既視感あるコードだ
03913782006/11/28(火) 18:59:03ID:lLFQbN4A
いっぱいレスもらって色々試したのですが、

$str = <<<EOM
俺の親父はガッツ石松だぜ。getsじゃ無いよGUTSだよ。
EOM;
mb_internal_encoding("SJIS");
mb_regex_encoding("SJIS");
$token = array();
while(1){
$bytes = mb_ereg("[一-龠]+|[ァ-ヴー]+|[a-zA-Z]+", $str, $match);
if ($bytes == FALSE) {
break;
} else {
$match = $match[0];
array_push($token, $match);
}
$pos = strpos($str, $match);
$str = substr($str, $pos+$bytes);
}
print_r($token);


↑これを
2文字以上のものだけ取り出したいのです。
ようは俺とか無とかの1文字のものは
表示させないようにしたい
03923872006/11/28(火) 19:01:35ID:???
レスありがとうございます。
出力する文字列の<head>〜</head>から読み取って勝手にapacheが
HTTPヘッダを出力してしまうことがありますね。
試しに「<?php phpinfo(); ?>」と書いたスクリプトから出力されている
ヘッダを確認したところPragma: no-cacheは出力されていませんでした。
PHPで出力されるヘッダを確認するheaders_list関数があるのですが
PHP5からの実装で開発環境はPHP4のため利用することが出来ませんでした。
Pragmaを空文字にしたりcacheにしたけどキャッシュされませんでした。
0393nobodyさん2006/11/28(火) 19:08:39ID:???
まあ出どこを特定することだね
0394nobodyさん2006/11/28(火) 19:19:03ID:???
こんばんわ。
linux でサーバ動かしてますけど、コマンドラインからもphpを動かして簡単な処理をさせたいと思います。
どうすれば良いのでしょうか?
よろしくです。m( _ _;)m
0395nobodyさん2006/11/28(火) 19:20:05ID:???
session.cache_limiter じゃないのか?
0396nobodyさん2006/11/28(火) 19:44:35ID:???
>>394
php hoge.php

cronで動かしたければそれぞれフルパスで。
0397nobodyさん2006/11/28(火) 19:54:41ID:???
>>394
CLI版のPHP動かせばええじゃないか
サーバー動かしてるってことは管理者だろ?
0398nobodyさん2006/11/28(火) 19:55:47ID:???
>>394
だれでも鯖立てられちゃう時代なんだなぁ
問題は立てることより運用なんだけど…
03993942006/11/28(火) 20:06:26ID:???
debianでapt-getでphp4をインスコしましたが、cli版が入っていないようです。
php4.3.10なので標準で--enable-cliになるはずですが・・・(phpinfo()を見ても無い・・・)
ちなみにwindows機ではphpのフォルダの下にcliフォルダがあり、ここにphp.exeが入っていますのでコマンドラインから可能です。
debianでapt-getでphp4を入れるとcli版が入らないのでしょうか???
0400nobodyさん2006/11/28(火) 20:07:40ID:???
php4はメタパッケージcliはcli
04013942006/11/28(火) 20:08:42ID:???
えぇぇぇ?別物なの?
0402nobodyさん2006/11/28(火) 20:11:13ID:???
php -v で確かめてみなさい

$ php -v
PHP 5.2.0 with Suhosin-Patch 0.9.6.2 (cli) (built: Nov 27 2006 01:55:31)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
with eAccelerator v0.9.5, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
0403nobodyさん2006/11/28(火) 20:14:02ID:???
KURO-BOX:~# php -v
bash: php: command not found

になっちゃいますが・・・
0404nobodyさん2006/11/28(火) 20:26:02ID:???
Debian GNU/Linux 3.1 KURO-BOX
KURO-BOX login: tmp-kun
Password:ないしょ
Last login: Tue Nov 28 20:13:09 2006 from 192.168.1.2 on pts/0
Linux KURO-BOX 2.6.16-kuroboxHG #1 Sun Oct 29 21:27:07 JST 2006 ppc GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
tmp-kun@KURO-BOX:~$ php -v
-bash: php: command not found
tmp-kun@KURO-BOX:~$ su root
Password:ないしょ
KURO-BOX:/home/tmp-kun# php -v
bash: php: command not found

です。
やっぱ、cli版は別にインスコするんでしょうか?
0405nobodyさん2006/11/28(火) 20:51:33ID:???
deb系でも窓でもmodとは別だよ
0406nobodyさん2006/11/28(火) 20:54:35ID:???
ん、そういえば犬はPHPのパスが通ってなかった気がしないでもないな・・・
バイナリがあるならパス通したり
04073942006/11/28(火) 20:56:14ID:???
皆さん、どうもです。
これかなぁ・・・やっぱ、cli版は別にインストールするみたいですね。
いきなり実行するのも怖いので、HDD丸ごとバックアップ取ってからやってみます。
どうもでした。

http://qoon.jp/2006/06/php.html
PHPのCLI版のインストール(Debianの場合)

$su root
#apt-get update
#apt-get upgrade
#apt-get install php-cli
そのまま通常のphp.iniをコピー(念のためバックアップ)
#cp /etc/php4/cli/php.ini /etc/php4/cli/php.ini.back
#cp /etc/php4/apache/php.ini /etc/php4/cli/php.ini
0408nobodyさん2006/11/28(火) 21:22:24ID:???
>>405
どうもです。
そうだったんですか・・・
窓の方では何もしなくてもphp.exe.が入っていましたし、「php4.3.0以降は
自動的に設定される」ようなことをどこかで目にしていたものですから・・・

なんで動かないのか、半日悩んでおりました。(苦笑

お騒がせしました。。。m( _ _;)m
0409nobodyさん2006/11/28(火) 21:23:29ID:???
siteURLのエンコードをする場合も
文字コードでのエンコードをした方がいんですか?
04103872006/11/28(火) 21:52:06ID:???
その後コンソールから実行しPHPから出力されている事を確認し
php.iniやheader_cache_flag(1)みたいな関数があるのか探していたのですが
>>395さんの仰るとおりsession.cache_limiterが原因であることが判明しました。
ありがとうございました。
0411nobodyさん2006/11/28(火) 22:34:12ID:???
だれか>>391お願いします

おみやげにこれあげるんで
//URLからドメイン名を取得する
$pattern = "/^(http:\/\/)([^\/]+)(\/.*$)/i";
preg_match ( $pattern, $url, $match );
$domain = $match[2]; //ドメイン
$path = $match[3]; //パス
0412sage2006/11/28(火) 22:41:38ID:TqHCzfuA
PATH_INFOのことで悩んでおり質問させていただきます。

変数を受け渡す際にPATH_INFOを使用してスラッシュ区切りで渡しているのですが、
変数を何も渡さない時に

Notice: Undefined index: PATH_INFO

というエラーが出てしまいます。
URLが
http://localhost/index.php
の場合にエラーとなり
http://localhost/index.php/
のように、最後にスラッシュをつけるとエラーが出ません。

お知恵を拝借できればと思います。よろしくお願いします。
0413nobodyさん2006/11/28(火) 22:47:26ID:???
【セキュリティ上の注意】

php の セッションIDは、マイクロ秒単位の現在時刻 + ユーザーのリモートアドレス + combined-LCG(線形合同法自体は、疑似乱数生成方法としてはセキュアな方法ではない。) が種となっている。
セキュリティの専門家の高木浩光氏も 「phpらしい駄目っぷりだ。」 と批判している。

Unix 系 の OS ならば php.ini などで /dev/urandom を乱数の種に使うように設定しよう。

次のように記述すれば良い。
| session.entropy_file = /dev/urandom
| session.entropy_length = 16

/dev/urandom では、周囲で発生するノイズ等の攻撃者に推測されない値をデバイスドライバや他の情報源から収集して、乱数の種として使用する。
これは、特殊なハードウェアが無い普通のPCでも使えて大変便利。
HDDの回転数、CPUの温度、ハードウェアの温度、マウスの動き、HDDの寿命、ハードウェアのエラーセクタ、HDDのSMART情報、周囲のノイズによる
ハードウェア内部エラーなど、PCにはセキュアな擬似乱数としての使用に耐える攻撃者に推測されない値がいっぱいそなわっているのだ。

参考:
http://tdiary.ishinao.net/20061120.html#p01
http://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/random-numbers.html
0414nobodyさん2006/11/28(火) 22:59:18ID:???
>>411
391は見る気しないけどURLからドメインを抜く関数ってありますよ

>>412
issetで調べてね

>>413
前から知ってたけど作るもののレベルによるのではないかと限りなく唯一無二なら問題なし
0415nobodyさん2006/11/28(火) 23:24:20ID:???
最近winアプリの開発してて3年ぶりくらいにwebの仕事に戻ってきたんだけど
ブラウザにキャッシュさせたくない時に
cache-control, pragma, expire
のヘッダ発行したら出来たと思うのですが・・・・。
IE6とFirefoxで動作確認したところキャッシュされまくりでした!!
IE6で何か変ったんでしょうか?IE6でもキャッシュ無効出来てる人いますか?
0416nobodyさん2006/11/28(火) 23:26:47ID:???
過去のが入ってるだけで、毎回ちゃんとアクセスしてるならいいじゃないか。
それともキャッシュされちゃ困るほどセキュアな情報なの?

Webアプリ屋も少しはHTTPを勉強して欲しい。
0417nobodyさん2006/11/28(火) 23:29:21ID:QkZ3aa/D
XREAのサーバーを利用しています
MySQL(MySQL - 5.1.11-beta) の文字セットがUTF-8 Unicode (utf8) ということで
データベースに入れたものをEUC-JPで表示しようとすると文字化けしてしまうようです。

他のサーバーでEUC-JPにて構築したサイトでして
これからUTF-8に移行するには非常に手間がかかります
どうにか簡単に解決する方法はありませんでしょうか?
よろしくお願いいたします
0418nobodyさん2006/11/28(火) 23:33:39ID:???
設計ミスなら諦めて1から書き直すしかないんじゃない?
0419nobodyさん2006/11/28(火) 23:35:03ID:???
>>417
データベースに入ってるのがUTF-8で、表示するときEUC-JPにしたいなら
表示するときに変換すればいいのでは?

そのサーバーのPHPスクリプトの表示する部分だけちょちょいと書き換えればOK。
0420nobodyさん2006/11/28(火) 23:43:19ID:QkZ3aa/D
>>419
了解しましたー
どうでもです。

しかし、mb関数が使えないとかなるとおそらく面倒なんでしょうかね?
0421nobodyさん2006/11/29(水) 00:29:55ID:???
>>420
はい。泣いてください。
胸は貸しませんが。
0422nobodyさん2006/11/29(水) 00:58:36ID:???
PEARのソースを参考にソースの書き方とか勉強しようと思うのですが、
PEARのソースって綺麗ですか?
適当なものをダウンロードしてソースを見たら、
思っていたのとだいぶ違っていました。
見た感じ手続き型でしたし、
文法的にも動作的にも問題はないですがちょっと違和感がある、
書き方をしている箇所があったりと。(自分本位の視点なので自分がおかしいのかも)
とりあえずPEARのソースは参考になると思いますか?
それとも国産フレームワークのソースでも見たほうがいいでしょうか?
0423nobodyさん2006/11/29(水) 01:27:35ID:???
>>420
iconv

使えないか。
0424nobodyさん2006/11/29(水) 01:28:32ID:???
>>416

HTTPを勉強しないWebアプリ屋っているの?
0425nobodyさん2006/11/29(水) 01:51:50ID:???
いっぱいいるよ。特にPHPしか出来ないWebアプリ屋は。
PHP以外の言語だったら>>387のような問題が発生することは無い。
0426nobodyさん2006/11/29(水) 01:52:49ID:???
スマン。HTTPの勉強ってなんだ?
HTTPの意味はわかるが、何を勉強すればいいんだ?
0427nobodyさん2006/11/29(水) 01:57:53ID:???
>>425
>PHP以外の言語だったら>>387のような問題が発生することは無い。

んなことねぇよボケ。
Cやっててネットワークの知識がないヤツだってたくさんいる。
0428nobodyさん2006/11/29(水) 02:02:11ID:???
>>413
そんなことを気にしてるほうがダメ人間だと思う。
PHPのセッションID生成方法について、ヲタ的には乱数がどうのこうので
ケチをつけたくなるのかもしれんが、現実的には十分に推測不可能だろ、それで。
0429nobodyさん2006/11/29(水) 02:22:55ID:???
簡易掲示板を作っているんですけど、
ログの読み取り方について質問です。
file()でログを読み込んで、
それをリクエストがあるたびに毎回読み込んでhtmlに反映してるのですが、
当然ログが長くなるとレスポンスが悪くなりますよね?
そこでログに変更があった後、
htmlを更新し出力しなおすみたいなことをしたいのですが、
技術的に難しいでしょうか?
04304292006/11/29(水) 02:38:45ID:???
ごめんなさい。
言ってることがよくわかりませんね。
自分でもわからなくなってしまいましたorz
色々と試行錯誤してみることにします。
お騒がせしてすみません。
0431nobodyさん2006/11/29(水) 03:41:49ID:???
>>427
そりゃそうなんだけどCでやる事になった場合は
content-type出力して\r\n\r\nを出力してと一連の流れを把握するでしょ。
PHP使ってるとheader関数やcookie関数のおかげで内部で何やってるか
分からない奴がいっぱいいる。
0432nobodyさん2006/11/29(水) 03:57:11ID:???
>>431
C じゃなくても Perl でもprint "Content-Type: text/html\n\n"; とかは普通やるよね。
use CGI; すると重くなるし。
0433nobodyさん2006/11/29(水) 04:07:10ID:???
>>429>>430
よくあるのは、書き込まれた時に、HTMLファイルを作っちゃう方法。
つまりその(PHPの)掲示板に最初にアクセスした時の画面と同じ見た目のHTMLを作っておくわけだ。
訪問者は、そのHTMLにアクセスする(最初の画面だけ)。
0434nobodyさん2006/11/29(水) 04:43:05ID:???
$a = "50"; //String
$b = $a + 50; //String + Integer
echo $b; //100

このソースに関して質問なんですが、
$b = $a + 50;の$aの部分は、
自動的にintにキャストされてるということなのでしょうか?
0435nobodyさん2006/11/29(水) 04:46:09ID:???
http://jp2.php.net/manual/ja/language.types.type-juggling.php
> PHP の自動型変換の例の一つは、加算演算子 '+' です。 オペランドのどれかが float の
> 場合、全てのオペランドは float として評価され、結果は float になります。
> その他の場合、オペランドは整数として解釈され、結果も整数になります。
0436nobodyさん2006/11/29(水) 04:56:34ID:???
なるほどー
オペレーターとオペランドをみて型が自動変換されるんですね。
結構ややこしいなぁ。
お答えどうもありがとうございました。
0437nobodyさん2006/11/29(水) 05:11:36ID:???
>>428
本当にそうだろうか。

例えば、俺がサイトAを作ってサイトBに対してセッションハイジャック攻撃を仕掛けるとしよう。

俺のサイトAからサイトBへリンクを貼り、被害者Cがそれをクリックする。
そうすると、俺はそのユーザのIPアドレス と クリック日時 を取得できるよね。

クリックしてから実際にブラウザがサイトBにリクエストを出すまでのラグがあるから、
取得した日時には 100ミリ秒の誤差があるとするかな。

ここで、php が combined-LCG を種として使っていないなら、100,000回 サイトBにリクエストを送るだけで
セッションハイジャックが成功することになる。ちなみに、10万アクセスは30分もあれば余裕で可能だ。(相手が標準的なスペックの鯖の場合)

php が使っている combined-LCG は、線形合同法と呼ばれる。
http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E5%90%88%E5%90%8C%E6%B3%95

つまり、被害者Cのアクセス前に自分も大量にアクセスして生産されたセッションIDを取得すればいい。
例えば、被害者Cが攻撃用のリンクをクリックした時点で、攻撃者がサイトBに大量にアクセスしてセッションIDを取得しまくる。
必要量の取得がおわったら、被害者Cに対してサイトBに対するリダイレクトを行わせる。

そして、その後、セッションの有効期限が切れるまでの間に、攻撃者が取得した大量のセッションIDをもとに、
逆関数を利用して combined-LCG によって生産された乱数をもとめ、さらに線形合同法の周期性を利用して
被害者Cがアクセスしたときに、combined-LCG によって発生された乱数を求める。

それと IPアドレスと日時を組み合わせた回数のリクエストをセッションの有効期限が終わる前におくれば、セッションハイジャック成功だ。

0438nobodyさん2006/11/29(水) 05:23:34ID:???
>>436
要するに . を使えば文字として扱われるし、+ を使えば数として扱われますよということ。
数として扱えない場合は 0 扱い。
0439nobodyさん2006/11/29(水) 05:26:57ID:???
>>437
なんかますますセキュアに見えてくるな
0440nobodyさん2006/11/29(水) 05:40:07ID:jv+ZvP9Y
卓上の理論なんていらないんだよ。
実験したものを見せろ
0441nobodyさん2006/11/29(水) 06:01:58ID:???
>>440
個人が実験してセッションハイジャックが成功するレベルなわけないじゃん
これは共通鍵・公開鍵方式の暗号で、個人のPCでは解読に1000年かかっても、
日本一のスパコン(東工大のスパコン)を使って1ヶ月で解読できるなら、脆弱な暗号方式って呼ばれる。

じゃあ、実際にハイジャックを成功させることを考えようか。

まず、相手のサーバがボルトネックになってくるよね。
だから、相手のサーバは日本一、いや、世界一の性能を持つスパコンということにしなくては。

あと、php のセッション維持期間はデフォルトでは 24分 だけど短時間で解読するのはむずかしいから
とりあえずセッション有効期間は 1年ぐらいにしよう。
session.cookie_lifetime 31536000 っと。
あと、インターネット網はラグがあるから、LANでスパコンと直結だな。
ついでに暗号の解読の演算用に世界一のサーバ・・・、はもうないから、世界二のサーバを用意。

あとは、暗号解読に秀でている研究者を10人ぐらいやとって半年ぐらいかけて解析用プログラムを作ってもらって実行。

そうすりゃ、たぶんセッションハイジャックが成功すると思うけどなー。
0442nobodyさん2006/11/29(水) 06:07:02ID:???
先生、すごそうな話でついていけません。
0443nobodyさん2006/11/29(水) 06:15:58ID:???
なんで、セッションハイジャックするときにsession_idを解析しようとする?
通信自体が盗み取れたときが問題なんでしょ?

それよりも、session_idをリジェネレートしたときに、
改めてCOOKIEを送りなおすのは止めれないのか?
2回同じ値のCOOKIEがhttpヘッダに書かれているのは気持ち悪いんだが。
0444nobodyさん2006/11/29(水) 06:16:44ID:???
漏れの php の設定みてみたら既に

session.entropy_file = /dev/urandom
session.entropy_length = 16

になってたよ

と思ったら↓に沿って設定したらそうなるのか(´・ω・`)
http://wiki.ohgaki.net/index.php?PHP%2Ftips%2F%BF%E4%BE%A9php.ini%C0%DF%C4%EA

0445nobodyさん2006/11/29(水) 06:18:24ID:???
session.entropy_length は 16 じゃなくて 32 でした。
0446nobodyさん2006/11/29(水) 06:53:13ID:???
>>441
>>428をもう一度読んでみよう(゚∀゚)













>現実的には十分に推測不可能だろ
0447nobodyさん2006/11/29(水) 08:50:09ID:???
>>446
>>441をもう一度読んでみよう(゚∀゚)
0448nobodyさん2006/11/29(水) 10:09:18ID:???
なんでセキュアな話をしたがるやつは、SSL使わないんだよw
0449nobodyさん2006/11/29(水) 11:04:23ID:???
>>448
SSLとは関係無いセッションハイジャックの話をしているわけだが
もっと分かりやすく言えば、SSLを使うことは大前提で、それより高度なセキュリティ確保の話をしているわけだ
0450nobodyさん2006/11/29(水) 11:27:38ID:???
>>437と>>441は別人だと仮定してレスする。

>>437よ、君の仮定には大きな誤算がある。
それは、「被害者Cが君の計算通りに行動する確率はものすごく低い」ということだ。
時間の誤差とか何とか、それらとの掛け算で、君の仮定が成功する確率は現実的には極めて低い。

>>441は、そんなアホな>>437に向けた皮肉だと俺は読んだ。
要するに「現実的じゃないぜ」ってことを遠まわしに皮肉ってるんでしょ?w > >>441
0451nobodyさん2006/11/29(水) 11:50:20ID:???
こだわるなら独自で作れば良いだけだろ、シリアライズあるし滅茶苦茶簡単なのに
何で他人が作った物を批判したがるかな。そういう奴に限って決まって能力ないからな。
0452nobodyさん2006/11/29(水) 12:10:39ID:1l/WuAMq
質問です。
.qmailを使用し、メール受信と同時にPHPスクリプトを起動しようと思っているのですが
うまくいきません。

.qmail-***には以下の様に記述いたしました。

| /usr/local/bin/php /path/to/script.php

で、実際に動作テストをしてみるとスクリプトが動いていない模様なので
メールログを見てみると

Nov 29 11:58:50 IICL002 qmail: delivery 39: deferral: /usr/local/bin/php:_error_while_loading_shared_libraries:_libmysqlclient.so.14:_cannot_open_shared_object_file:_No_such_file_or_directory/

上記のエラーが出ています。

/usr/local/bin/php /path/to/script.php
上記コマンドをコマンドライン上から入力するとプログラムは実行出来ます。

念のためlddで確認してみると
ldd /usr/local/bin/php

libmysqlclient.so.14 => /usr/local/mysql//lib/mysql/libmysqlclient.so.14

/2個が気になりますが一応セットされています。

パーミッションかな?と思いましたが違うようです。
どなたかご教授宜しくお願いいたします。
0453nobodyさん2006/11/29(水) 12:14:54ID:???
>>437
>俺のサイトAからサイトBへリンクを貼り、被害者Cがそれをクリックする。
フィッシングサイトに引っかかるやつの面倒まで見なくてもいいだろ
0454nobodyさん2006/11/29(水) 12:16:58ID:???
もういいよPHPは危ないみたいだからJavaに移行します
04554522006/11/29(水) 12:36:03ID:???
自己解決しました。
/usr/local/mysqlのパーミッションが足りなくファイルまで到達できなかったようです。

お手数おかけ致しました。
0456nobodyさん2006/11/29(水) 12:38:31ID:???
qmailではよくあること
■ このスレッドは過去ログ倉庫に格納されています