【PHP】下らねぇ質問はID出して書き込みやがれ 115
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2012/01/20(金) 05:43:23.62ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 114
http://kohada.2ch.net/test/read.cgi/php/1325437405/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0838nobodyさん
2012/02/22(水) 03:20:04.33ID:???0839nobodyさん
2012/02/22(水) 03:24:16.48ID:HjiaSrjvないとわかりましたが、それはPHPプログラマにとって尺に触ることでしょうか?
0840nobodyさん
2012/02/22(水) 03:27:56.08ID:HjiaSrjv0841nobodyさん
2012/02/22(水) 03:30:45.46ID:???たとえば一般的ではないことを強要されたら癪に障るかも知れないけれど。
0842nobodyさん
2012/02/22(水) 03:38:58.82ID:???0844nobodyさん
2012/02/22(水) 04:52:15.14ID:???0845nobodyさん
2012/02/22(水) 06:32:14.02ID:???Webアプリケーションの設計の話でしょ。
0846nobodyさん
2012/02/22(水) 07:41:18.69ID:???JavaとPythonで比較してるなら、OpenPNEに相当するJavaとPythonで実装されたもので
機敏に動くものを知りたい。
0847nobodyさん
2012/02/22(水) 08:55:42.21ID:???PHPではセッションにオブジェクトを格納するのは一般的ではないということが
よくわかりました。
0848nobodyさん
2012/02/22(水) 09:00:26.08ID:???0850nobodyさん
2012/02/22(水) 09:10:04.74ID:???0852nobodyさん
2012/02/22(水) 09:15:30.80ID:???かなりヤバイレベル。バージョン2の時代はマシだった。
0853nobodyさん
2012/02/22(水) 09:17:48.11ID:???そんなヴァカな話があるのか
0854nobodyさん
2012/02/22(水) 09:24:03.91ID:???たしかに、唐突にコネクションプーリングの話は変だとは思った。
その逆も必要ないかと。
話の流れとは関係ないw
0856nobodyさん
2012/02/22(水) 11:04:16.02ID:yvJnpOhoCGIじゃなくてモジュールで動作させれば早いと書いてあった。
今のところはCGIで動作の仕様になってる。
0857nobodyさん
2012/02/22(水) 11:17:37.00ID:???0858nobodyさん
2012/02/22(水) 11:27:57.48ID:???0859nobodyさん
2012/02/22(水) 15:35:04.94ID:???0860nobodyさん
2012/02/22(水) 15:37:33.90ID:???0861nobodyさん
2012/02/22(水) 17:05:21.76ID:???0862nobodyさん
2012/02/22(水) 17:34:31.83ID:???a.phpで
echo $_COOKIE['testvar1'];
var_dump($_COOKIE);
---
b.phpで
setcookie('testvar1', 'bbb') //a.phpでbbbが出力される
---
c.phpで
setcookie('testvar1', 'ccc') //a.phpでcccが出力されない
setcookie('testvar2', 'xxx') //a.phpでtestvar2自体が確認出来ない
と、以上のようにしてる時、b.php → a.php の順番でアクセスするとechoもvar_dumpも正常な結果を返すんですが、その後
c.php → a.php の順番でアクセスするとechoはbbbを返し、var_dumpは追加したtestvar2自体を返さずtestvar1のみbbbとして返します
※c.php自体の中で echo $_COOKIE['testvar1'];すればcccを返します。また、c.phpのsetcookie();の返り値は1です
※また、b.phpの中でクッキーに入れる値を変更した場合はa.phpで変更後の値が確認出来ますが
c.phpの中で値を変更しても上書きされません(c.phpの中での確認です)
ドメインは全て同じで、原因が全くわかりません
何か考えられる対処法やチェック箇所あるでしょうか?
申し訳ないですが、どなたかご意見お願いします
0863nobodyさん
2012/02/22(水) 19:09:47.20ID:???0864nobodyさん
2012/02/22(水) 19:28:43.76ID:???0865nobodyさん
2012/02/22(水) 19:35:22.61ID:???これがゆとりか。
0866nobodyさん
2012/02/22(水) 19:44:07.26ID:???IDID言うやつ、回答しないんだよな。
0868nobodyさん
2012/02/22(水) 19:46:44.23ID:???0869862
2012/02/22(水) 20:41:14.26ID:culdIBNJその後もブラウザ再起動などしてやったんですが
やはりc.phpでsetcookie();した値はc.php以外で確認出来ません
なんなんでしょうか?
0872nobodyさん
2012/02/22(水) 21:49:26.94ID:???0873nobodyさん
2012/02/22(水) 22:14:17.30ID:???php-cgi -b 127.0.0.1:9000 &
として
telnet 127.0.0.1 9000
とかでなんか叩いて動作チェックって出来るものでしょうか?
0874862
2012/02/22(水) 22:42:10.50ID:culdIBNJその後、全てのsetcookie()を setcookie('time', date('Y-m-d H:i:s'), 0, '/', 'example.com');として
有効時間、パス、ドメインを指定したところ解決しました
質問して良かったです、助かりました
本当にありがとうございました
0875nobodyさん
2012/02/22(水) 22:51:44.23ID:???0876nobodyさん
2012/02/22(水) 22:55:02.14ID:???0877nobodyさん
2012/02/22(水) 23:24:44.58ID:qmf6D6+H原因としては何が考えられますか?
0878nobodyさん
2012/02/23(木) 00:42:33.05ID:???パス間違ってるとかパーミッションがマズイとか。
ちょっと情報少なすぎ。
warningかnoticeも出てないの?
0879553
2012/02/23(木) 01:24:46.92ID:???0880nobodyさん
2012/02/23(木) 02:36:14.38ID:???0881nobodyさん
2012/02/23(木) 02:52:55.61ID:???i7っでサックサクにしようぜ
0884nobodyさん
2012/02/23(木) 11:28:18.18ID:???0885nobodyさん
2012/02/23(木) 11:29:42.88ID:???0886nobodyさん
2012/02/23(木) 11:35:04.06ID:GMJguUp1ログインページでは、ID(メアド)とパスワードの一致をもって、認証OKとしています。
その後、各ページでは何をもって認証OKとすれば良いのでしょうか?
入門書では、
1.ログイン時に、各ユーザー情報をセッションに保持し、各ページでは、それがあれば認証OKとする。
2.ログイン時に、暗号化した認証キーを作成してセッションに保持し、各ページで再度、認証キーを作成し、セッションの認証キーと照会する。
3.ログイン時に、セッションID(session_id())をセッションに保持し、各ページでは、そのページでのsession_id()と照会する。
などの方法を確認しました。個人的には、1の方法で足りると思うのですが、2や3の方法のほうがセキュリティーは高まるのでしょうか?
0887nobodyさん
2012/02/23(木) 12:26:00.63ID:???0888877
2012/02/23(木) 13:56:23.63ID:QQ9YytJpパスは間違ってないようです パーミッションもちゃんと644になってます
直接関わるwarning・noticeは出ていないようです
情報が少なすぎるとのことなので問題の背景を説明します
レンタルサーバでXOOPSを使いサイトを運用しています
ある日すべてのページが500 Internal Server Errorになるようになりました
"php_flag magic_quotes_gpc Off"とだけ書かれたXOOPS_ROOT_PATH/.htaccessがあったのでこれを削除したところ、
だいたいのページは元通り見られるようになりました
しかし、管理メニューの互換モジュールで
Fatal error: Class 'Legacy_ActionFrame' not found in XOOPS_ROOT_PATH/modules/legacy/admin/index.php
とエラーが発生します
該当する.phpファイルではそのクラスを定義しているXOOPS_ROOT_PATH/modules/legacy/class/ActionFrame.class.phpをrequire_onceしているようなので、
このファイルにでたらめな文字列を書き足してSyntax errorを期待したのですが結果は変わりませんでした
また、require_onceの下にvar_dump(get_included_files());を書き足しても、このファイルは含まれていませんでした
以上にもかかわらず、require_onceの戻り値は1( != FALSE)でした
どうすればこのファイルはrequire_onceで読み込まれるようになるでしょうか?
よろしくお願いします
0889nobodyさん
2012/02/23(木) 14:11:01.61ID:???どんな入門書読んだのか知らんが、2と3は明らかにおかしなこと言ってるぞ。
もう一回しっかり読め。
セッションとクッキーは別物だということを頭に置いてな。
0890nobodyさん
2012/02/23(木) 15:06:37.39ID:pOv6kBFHあああ\\t2012.01.23\\tききき\\n
いいい\\t2012.01.23\\tくくく\\n
ううう\\t2012.01.23\\tけけけ\\n
えええ\\t2012.01.22\\tこここ\\n
おおお\\t2012.01.22\\tさささ\\n
かかか\\t2012.01.21\\tししし\\n
今日 = 3
昨日 = 2
一昨日 = 1
このような値を取り出したい場合はどのような手順になるのでしょうか?
よろしくおねがいします。
0891886
2012/02/23(木) 15:11:52.08ID:AL17q7mx3.のコードです。関数化されてます。
これは間違いなのでしょうか?
<?php
##### セッションの開始
function session_idset() {
session_start();
$_SESSION['auth'] = session_id();
}
##### セッションのチェック
function session_check() {
session_start();
$rtn = TRUE;
if($_SESSION['auth'] != session_id()) {
$rtn = FALSE;
}
return $rtn;
}
?>
0892886
2012/02/23(木) 15:23:33.04ID:AL17q7mx//セッションの開始
$_SESSION['login_id'] = $_POST['login_id'] ;
$_SESSION['auth'] = md5($salt . $_POST['login_id']) ;
//セッションの確認
function auth() {
global $salt;
if (md5($salt . $_SESSION['login_id']) == $_SESSION['auth'] ) {
return TRUE;
} else {
return FALSE;
}
}
0893nobodyさん
2012/02/23(木) 16:00:34.17ID:???0894nobodyさん
2012/02/23(木) 16:26:52.69ID:???やるんであれば、例えば、ランダム文字列を生成してクッキーに保存
その文字列をハッシュかけてセッションに保存
確認のときはクッキーのデータにハッシュかけたものとセッションのデータが一致するか
ってやればセッションハイジャックに対して少しは強くなりそう。
0895nobodyさん
2012/02/23(木) 16:36:47.58ID:???本当にその入門書がその通りに書いているなら今すぐ燃やして他の本から学ぶべきだな
>>894
効果のないものを初心者に教えるな
0898nobodyさん
2012/02/23(木) 17:22:52.85ID:???もしかして、セッションファイルを一般ユーザが見られる場所に
保存するシステムを前提に、ローカルユーザからの攻撃対策の話をしてる?
それだと、サーバの設定を見直した方がいいような……
0900nobodyさん
2012/02/23(木) 17:31:23.55ID:sgcZLa3Bセッション固定攻撃に対しては効果があると思うけど。
0901nobodyさん
2012/02/23(木) 17:38:14.99ID:???0903886
2012/02/23(木) 17:59:29.91ID:+MEbH08Xやはり、このシンプルなコードが妥当なのでしょうか?
//$rowにDB取得データ代入済み
// ログイン情報を記録
$_SESSION["login"] = array("user_id" => $row["user_id"]," login_time" => time())
// ログインしているかどうか調べる関数
function is_logined() {
return isset($_SESSION["login"]);
}
0905894
2012/02/23(木) 18:21:05.98ID:???仮にセッションIDが漏れた場合とか想定してるんだけど。
セッションIDだけじゃなくて、発行時のクライアントのチェックとして有効じゃない?
886の対案として出してるだけだから、ベストの方法とは思わんけど。
>>899
論点がぜんぜん違う
0906nobodyさん
2012/02/23(木) 18:24:58.57ID:pOv6kBFHfor($i = 0; $i < count($lines); $i++){
list(,$day,,)=explode("\t",$lines[$i]);
$today = date("Y.m.d");
$match_tday = preg_match("/$today/",$day);
}
今一歩前へ進めません。次のヒントお願いします。
0907nobodyさん
2012/02/23(木) 18:41:27.89ID:???0909nobodyさん
2012/02/23(木) 18:49:26.85ID:???$lines = file($tsv);
for($i = 0; $i < count($lines); $i++){
list(,$days[],,)=str_getcsv($lines[$i],"\t");
}
print_r(array_count_values($days));
0910877
2012/02/23(木) 20:38:51.67ID:QQ9YytJp試してみました
requireに書き換えると、多少崩れたページが表示され、
Fatal errorではなくなりました
0911nobodyさん
2012/02/23(木) 20:40:13.32ID:???じゃあ代わりに何を使えばいいの?
0912nobodyさん
2012/02/23(木) 20:54:09.81ID:???非推奨なのを知ってるということは
マニュアルを途中まで読んだな?
もっと下まで読めば書いてあるだろw
0913nobodyさん
2012/02/23(木) 20:57:03.04ID:???これがゆとりか。
0914nobodyさん
2012/02/23(木) 21:00:17.68ID:???俺、アンタみたいな人嫌いですw
0915nobodyさん
2012/02/23(木) 21:10:37.40ID:???0916nobodyさん
2012/02/23(木) 21:44:28.17ID:P+2F5uLF<?php
$data=
ABCDABCD;
$match='/A|B/';
preg_match_all($match, $data, $matches[0]);
print_r($matches[0]);
?>
結果
Array ( [0] => Array ( [0] => A [1] => B [2] => A [3] => B ) )
これを、AとBをそれぞれ一つだけ取得したいです。 1回取得したものと同一のものは取得しない方法はありませんか?
preg_matchを2回使うと一応できるのですが、それだと
結果
Array ( [0] => A )
Array ( [0] => B )
このようにそれぞれ別になってしまいます。
何かやり方はないでしょうか?
0917nobodyさん
2012/02/23(木) 22:13:07.95ID:???print_r(array_unique($matches[0][0]));
0919nobodyさん
2012/02/23(木) 22:44:37.14ID:???0920nobodyさん
2012/02/23(木) 22:48:53.56ID:???>>894さんの「おかしいというか、扉に同じ鍵で開く鍵穴が2つあるみたいなもん」
というご指摘で、2.3.のおかしな点がよく理解できました。
ランダム文字列クッキーを認証に利用する方法は、自分も考えたのですが、
XSSでJSによりクッキーを盗まれる場合には、セッションクッキーとともに
そのランダムクッキーも盗まれるので効果が無いと思いました。
また、セッション固定化攻撃には、>>908 さんのいうsession_regenerate_id(true)が
適切だと考えます。それとともに、php.ini、.htaccessでセッション付きリンクを
使用不可にするのがよいのかなと。
0923nobodyさん
2012/02/23(木) 23:58:21.36ID:P+2F5uLF0924nobodyさん
2012/02/24(金) 00:05:55.32ID:???0926nobodyさん
2012/02/24(金) 00:25:39.45ID:???0927nobodyさん
2012/02/24(金) 07:08:08.38ID:???0928nobodyさん
2012/02/24(金) 08:26:18.43ID:???それ意味ないじゃん
ハッシュ化したところでクライアントの情報(そのハッシュ化したランダムな文字列)が盗まれれば意味がない
あとその処理自体にセッションハイジャックに強くなる要素が見当たらない
サーバ側でセッションハイジャックされないような対策を考える場合XSSだけに気をつければいい
結局ハイジャックされるかどうかはクライアント側の行動次第
リンクにセッション情報を含めないほうがいいのはクライアント側の行動次第では漏れる可能性が高いから
クライアント側がそれなりの知識を持ってるならリンクにセッション情報を含めても問題ない
0929nobodyさん
2012/02/24(金) 08:36:25.74ID:???自己解決しますた。
telnetじゃムリでした。
<? phpinfo(); ?>がスルーされたのがそもそもの発端だったんだけど、5.3.8と5.2.13ではshort_open_tagが違うんですね。
pukiwikiとかwordpressって律儀に<?php 〜 ?>ってやってるのかな?
0930894
2012/02/24(金) 09:27:38.22ID:???前半の
>>ハッシュ化したところでクライアントの情報(そのハッシュ化したランダムな文字列)が盗まれれば意味がない
に関しては同意だけど、セッションIDとクライアントの情報を合わせて
盗まれなければ意味があるじゃん。
セッションIDだけ盗まれるってケースは意外とあると思うぞ。
>>920の言うようにクッキーまるごと盗まれたらしょうがないけど。
後半は同意できない。
0931nobodyさん
2012/02/24(金) 09:38:18.08ID:???どこの実装もほぼ100%クッキーでやってるんだから
0932nobodyさん
2012/02/24(金) 10:29:02.94ID:BAbDqRA5その為、使用するファイル(Sfit-JIS)を一つずつ選択し、プロパティーから文字化けしないUTF-8に変換しているのですが、
一括ですべてUTF-8にする方法はあるのでしょうか。
使用するフォルダ選択⇒プロパティー⇒リソース⇒テキスト・ファイルのエンコードから修正しても
だめでした。
0933nobodyさん
2012/02/24(金) 11:10:06.07ID:???それ同じこと思った。
なんでクッキーとセッションが別腹的な考え方なんだろ。
素人の俺にはわからん。
TLSかけるなりしてクライアントとPCの通信の盗聴防がなきゃ意味ない気が。
0934nobodyさん
2012/02/24(金) 11:18:03.05ID:???鍵盗まれたら困るってことの対策にはならんもんね。
0935877
2012/02/24(金) 12:51:09.28ID:i01HfJfE解決策ありませんか?
0936nobodyさん
2012/02/24(金) 14:00:59.55ID:???requireで読めたんならそれでいいだろ
2回以上読み込むファイルをrequire_onceで読み込むのがおかしい
0937nobodyさん
2012/02/24(金) 17:03:51.32ID:???>使用するフォルダ選択⇒プロパティー⇒リソース⇒テキスト・ファイルのエンコードから修正しても
だめでした。
それエクリプスの設定をUTFにしてるだけだし…
PHPでそのPHPファイルをfile_get_contentsで読み込んでエンコード変えて同じファイルに書き出すくらいじゃね?
レス数が900を超えています。1000を超えると表示できなくなるよ。