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

【PHP】質問スレッドpart24【php】

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん04/11/01 04:09:15ID:???
・PHP全般の質問スレです。 
・新規質問の方は上げてください。age進行でお願いします。 
・質問する際には環境も明記。 
・正しい日本語で分かりやすく。 
・レスがつかないからって逆切れする厨お断り。 
・解決しなくてもこたえてもらったら礼を。 


■本家 
 http://www.php.net/ ;

■日本 PHP ユーザ会 
 http://www.php.gr.jp/ ;

■PHP マニュアル 
 http://www.php.net/manual/ja/ ;

■PEAR マニュアル 
 http://pear.php.net/manual/ja/ ;

過去スレ, 関連スレ等>>2-4 
0910nobodyさん04/11/20 12:04:58ID:???
意外と勉強になった人も多いんでは?w
建設的だったぽい
0911nobodyさん04/11/20 12:25:13ID:???
っていうか普通カッコつかうだろ
0912nobodyさん04/11/20 12:37:14ID:VmPsi8L8
$result = mysql_query("SELECT username, password
FROM user
WHERE username = '$username' AND password = '$password'", $con);
$row = mysql_numrows($result);
if($row != "0"){


上みたいな感じで会員制サイト作る際のログイン基準作ってるんですが、
セキュリティ的にこれで大丈夫ですかね?
あまりにシンプル過ぎてカナーリ心配なのですが・・・
ご指摘求みます
0913nobodyさん04/11/20 12:56:28ID:???
>>912
そんなコード書いてたら俺みたいなスーパーハカーに簡単に全ユーザの
パスワードを盗まれちゃうよ。

クロスサイトスクリプティングとかサニタイジングでググッてみれ。
0914nobodyさん04/11/20 13:00:12ID:???
$password'
ここに
・・・・; drop・・・
091591204/11/20 13:12:09ID:VmPsi8L8
クロスサイトってjavascriptとか使ってやるあれですよね?
上の例でなぜCSSが問題になるのかよく分からないのですが?
username と password に入力制限するだけでは駄目なのでしょうか?
091691204/11/20 13:14:06ID:???
XSSでしたなorz
0917nobodyさん04/11/20 13:15:08ID:???
最近の若いモンは算数が出来ないと聞くがここの連中は特に凄いのが集まってるな。
0918nobodyさん04/11/20 13:15:23ID:???
>>915
まあ素直にググッてみれ。
0919nobodyさん04/11/20 13:16:11ID:???
>>917
おばさんかもしれないよ
092091204/11/20 13:20:50ID:???
ググッてみましたが、
分かりませんです。
一応XSSについては気をつけていたつもりなのですが。
サニタイジングって無効化するやつですよね。
上記の例で何を無効化すべきなのか分かりません。
username と passwordですか?
914さんの発言を見ると、passwordの入力フォームで
ある内容を入力されるとパスワードがdropできちゃうってことですかね?
092191204/11/20 13:22:59ID:???
例えば上記例で、不正ユーザが$row=1として送っても、
4行目でrow=0に上書きされるはずですよね・・・
0922nobodyさん04/11/20 13:34:06ID:???
$password = " passwd; drop table user;"
0923nobodyさん04/11/20 13:40:04ID:???
>>917
こんなの算数でもなんでもないだろ
0924nobodyさん04/11/20 13:45:53ID:???
パスワード欄に「' or password !=' 」とか打たれると…。
092591204/11/20 13:51:16ID:???
なるほど、ちょっと感心しちゃいました。
名前入力とかはXSS気をつけてたんですが、
最も重要なポイントをサニタイジングするのを忘れてるようですね汗。

ありがとうございました。
0926nobodyさん04/11/20 14:00:19ID:???
そもそも作ってて気づけ。
0927nobodyさん04/11/20 14:19:42ID:???
$a=2004/11/25(日付)
$b=3(ヶ月)

$aに$bを足して、
$a=2005/02/25としたいのですが、
方法がよく分かりません。
$a=strtotime($a);
$a=mktime (0,0,0,date("m", $a)+$b, date("d", $a), date("Y", $a));
として02/25の部分はなんとかできたと思うのですが、
2004を2005にするにはどうすればいいでしょうか?
ご教授くださいませ
0928nobodyさん04/11/20 14:37:13ID:???
>>927
list($y,$m,$d) = explode("/", $a);
$a = date("Y/m/d", mktime(0.0.0. $m+$b, $d, $y));
0929 ◆.jC7ANgFY. 04/11/20 15:49:00ID:???
>>927 strtotimeは便利だよ。だから
$a = strtotime('2004/11/25 + 3 Month');
とかも書ける。"for($i=0;$i<20;$i++);"ぐらいの時間かかるけど。

下ので様子を見てみるといい
echo date('Y/m/d', strtotime('2004/11/25 + 3 Month'));
0930nobodyさん04/11/20 15:58:54ID:mKhjN6bd
サーバでスクリプトとしてphpを利用したいのですが
何もせずに戻り値だけ0を返すような物はどう書いたらいいでしょうか?
これkだえだとどうもダメだったので、教えてください。

#!/usr/bin/php
<?
?>

0931nobodyさん04/11/20 16:06:16ID:???
は? 何もしないならHTMLで良いやん
0932nobodyさん04/11/20 16:10:58ID:???
>>930
return 0; でいいのかな?何に対する戻り値か分からん。。
OSへ返す終了ステータスならexitとか。
0933nobodyさん04/11/20 16:11:55ID:???
単にechoだけつかって
それをfileで他の鯖から読み込んで中継にしてる香具師は俺くらいか
0934nobodyさん04/11/20 17:01:04ID:???
>>930
これ以上PHPユーザの質を下げないでくれ。
0935nobodyさん04/11/20 17:10:44ID:???
質の高いPHPユーザーはこんなトコ来ん
0936nobodyさん04/11/20 17:36:08ID:???
普通のユーザももう逃げてる
0937nobodyさん04/11/20 17:44:26ID:???
>>874
一日200万回程度回るカウンタでも壊れた事はないので、まぁそれなりなのではないかと思う。
0938nobodyさん04/11/20 17:57:03ID:???
俺のクリスマスの予定が決定
↓レス番1桁目     ↓時刻の秒1桁目
1 妹の前で       1 愛を叫ぶ
2 自分の部屋で    2 「ごきげんよう お姉さま」と言う
3 体育倉庫で      3 一人で手淫
4 姉の前でに      4 美少女とSEXする
5 地元の小学校で   5 運命の美少女と出会う
6 クリスマスに      6 首吊り
7 親の前で        7 掘られる
8 トイレで        8 谷亮子でオナニー
9 好きな子の前で   9 練炭で自殺
0 2ちゃんねるで    0 2ちゃんねる引退
0939nobodyさん04/11/20 17:58:28ID:???
>>874
「PHPのFLOCK」の意図するところがわからない
0940nobodyさん04/11/20 18:17:46ID:???
>>912からXSS対策ができてないと言い切れるおまえらは天才ですね
プログラマーはだから馬鹿にされるんですよ
0941nobodyさん04/11/20 18:29:57ID:???
>>940
当たってたから良いんじゃね?w

確かに>>912だけじゃxss対策してるかはわからん罠。
0942nobodyさん04/11/20 18:44:51ID:???
>>912
あれだけしか出してこなくて『これで大丈夫ですかね?』って聞いてるんだから対策してないと考えるのが妥当でしょ。
だってaddslashesとかやってたらそのコードも書くっしょ。
0943nobodyさん04/11/20 19:08:46ID:???
>>922
>>924
これ、本当に成功します?
いろいろ試してみたけどmysql_queryに2文入れられないみたいだし・・、シングルクォーテーションをエスケープしてたら絶対無理そうだし
0944nobodyさん04/11/20 19:15:04ID:???
>>939
PHP のソースコード内の信頼性を言ってるんじゃないか?
C言語でファイルシステムの fcntl(UNIX) か LockFileEx(Win32) を呼んでるルーチンがあるところ。
0945nobodyさん04/11/20 21:22:29ID:???
算数より読解ヤバイ
0946nobodyさん04/11/20 21:24:51ID:???
>>943
>シングルクォーテーションをエスケープしてたら絶対無理そうだし
912のソースからそういう想定をするのは無意味。
出された情報が少ないんだから、一般論で答えるしかないだろ。
少なくとも書いてないことまで補って妄想するよりまし。
今回は912にも思い当たることがあったみたいだからいいじゃんよ。
0947nobodyさん04/11/20 23:00:29ID:???
>>946
int型でシングルクォーテーションつかってない部分でもできませんでした。
912のソースのような部分が私のスクリプトにもあって、それで本当にどうなのか知りたかったのです。
自分のスクリプトでいろいろ試したのですが抜け穴なかなか見つけられなくて
0948nobodyさん04/11/20 23:03:55ID:???
>>947
対策してるんならOK 対策してないんならダメ

何が対策になるのかわからないのは問題外
0949nobodyさん04/11/20 23:06:18ID:???
content 云々でページを転送させる記述が思い出せない。
だれかおしえてくり
0950nobodyさん04/11/20 23:08:27ID:???
>>947
まあ確かに、どこまでやれば大丈夫かということに不安になる気持ちも分かる。
とりあえず下記のURLでも読んで、じっくり考えてみて。
ttp://www.ipa.go.jp/security/awareness/vendor/programming/a01_02_main.html
0951nobodyさん04/11/20 23:17:11ID:???
>>949
移動しろ

△▲ WebProg 初心者の質問 Part10 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1095633323/
0952nobodyさん04/11/20 23:23:05ID:???
>>949
htmlの話なら web制作板へ
095394904/11/20 23:26:25ID:???
php上での記述の仕方が知りてーんだよ
0954nobodyさん04/11/20 23:26:53ID:???
移動しろ。
0955nobodyさん04/11/21 02:52:46ID:???
phpで構築されてるサイトで、
phpinfo(); の内容がすぐにわかってしまうのは
セキュリティ上、まずくはないんでしょうか?
0956nobodyさん04/11/21 02:56:28ID:???
>>955
phpinfo()の内容はphp.iniで制御できるよ。
0957nobodyさん04/11/21 05:41:12ID:???
phpinfo()が使えないように設定してあっても、php.iniやhttpd.confが
perlで作ったスクリプトで覗けてしまう無料レンタルサーバはよくあるな。
0958nobodyさん04/11/21 08:53:49ID:???
結局自作のphpinfo()関数作ればどうにでもなりそうな気もする
0959nobodyさん04/11/21 13:01:17ID:mw841Fe0
教えてください

RedHat9
PHP4
にmime_magic_moduleが
入っている環境なのですが、

 以下のソースの中で、mime-type: text/htmlのときに表示させるように
したいのですが、具体的なmime_magicの使い方がわからず困っています。

具体的にどうすればよいのかお教えください。

$cd = $_REQUEST['path'];
$dirname = "/home/hoge/public_html$cd/";
$dh = dir($dirname);
while ($entry = $dh->read()){
  if($entry != "index.html"){
    print $entry;
  }
}

よろしくお願いいたします。
0960nobodyさん04/11/21 17:11:10ID:???
>>955
PHPは初心者向けだからセキュリティよりもまずは利便性なんだよ
0961nobodyさん04/11/21 17:17:27ID:???
そう言う問題なのか…?w
0962nobodyさん04/11/21 17:54:26ID:???
>>955
どの項目だ
0963nobodyさん04/11/21 18:19:45ID:???
>>960
まぁ確かにブラウザにエラー出力するスクリプトが多いし
セキュリティよりも利便性ってのもある気もするな
0964nobodyさん04/11/21 19:58:14ID:???
大量に行があるテキストファイルから目的の行を探し当て取得するのに
もっとも効率のいい方法ってどんな感じですか?
whileで回しながら一行ずつチェックするのは
最後のほうに目的の行があった場合、時間がかかって困ってます。
データベース使わずになんとかならないでしょうか。
0965nobodyさん04/11/21 20:10:43ID:???
インデックスをつけるとか?
名前ならaから始まるのはここ、bから始まるのはここという情報を記憶するみたいな
0966nobodyさん04/11/21 20:14:35ID:???
データ次第。リニアサーチが不安定なら他のも試せ
096795904/11/21 21:53:54ID:mw841Fe0
 すいません、なにとぞmime_magicの使い方をお教え願えないでしょうか?
maime_magic以外にも、ファイルの形式を判断できる方法があれば、
そちらも教えていただきたいのですが、よろしくお願いします。

うざくて申し訳ないです。
0968nobodyさん04/11/21 22:10:00ID:???
>>967
Mimetype関数
0969nobodyさん04/11/21 23:48:46ID:???
"ソ"という文字をフォームを使って入力されると
データの中身が「ソ\」になってしまいます。
なので「ソ\」の後ろから「\」をとりたいのですが
上手に正規表現を組めません。
パターン構文のサイトを見て試行錯誤したのですが上手にできません。

どのようにすればいいか教えてください。

foreach ($src_list as $i => $v)
$v = ereg_replace ("ソ\\\", "ソ\", $v);
0970nobodyさん04/11/21 23:52:50ID:???
>969
それはエスケープされているわけだが「ー」「表」なども同様の副作用が生じる。
エスケープと逆の事をする関数を使え。
0971nobodyさん04/11/21 23:55:03ID:???
ありがとうございます。
その\と逆の事をする関数を探します。ラジャ
0972nobodyさん04/11/21 23:57:06ID:???
>>969
.htaccessに「php_flag magic_quotes_gpc Off」って書いとけば無問題
そして必要なところでは自分でエスケープすればいい
0973nobodyさん04/11/21 23:58:43ID:???
みつけました>逆の事をする関数
stripslashes

>>972
ありがとうございます。
是非やってみます
0974nobodyさん04/11/22 00:57:12ID:ui2dUAYs
質問です。
文字列"a1"から$a1を作り出す(読み出す)ことってできるのでしょうか。
JavaScriptやVBAなら文字列→変数に変換できるので、PHPでも同じことが
できるだろうと調べてみたものの見つからず。。
よろしくお願いします。
0975nobodyさん04/11/22 01:11:21ID:???
>>974
可変変数のことでしょうか?

$a["sample"] = "ほげほげ";
$name = "sample";

echo $a[$name];

−−−−−−−−−
出力結果:
ほげほげ
0976nobodyさん04/11/22 01:11:30ID:???
>>974
$a1= 'hoge';
$str='a1';
echo ${$str};
0977nobodyさん04/11/22 01:18:51ID:???
>>975 >>976
即レスありがとうございます!関数も使わずこんな簡単にできるんですね・・・
いやお恥ずかしい・・・。ありがとうございました。 <(_ _)>


0978nobodyさん04/11/22 01:21:05ID:???
>985は単なる連想配列のような気がする
0979nobodyさん04/11/22 01:40:45ID:???
>>985
ウィットの聞いたレスで楽しませて欲しい。
0980nobodyさん04/11/22 01:41:27ID:???
>>985
高まる緊張
0981nobodyさん04/11/22 01:54:57ID:???
>>985
これは何かの暗示か・・・
0982nobodyさん04/11/22 02:15:03ID:???
>>985
そう来たか・・・
0983nobodyさん04/11/22 02:31:50ID:???
>>985
……!!
0984nobodyさん04/11/22 02:43:04ID:???
>>985
このままDAT落ちしたりして・・・
0985nobodyさん04/11/22 02:49:41ID:???
         │ト、l、 /´, '`⌒'´ `ヽ: : .
          ヾヽ!lV/ / ,/ /  ,' ハ、: .
       ,ィニ≧ゝレ' / /  ,./   / , ハ : : .
      く<-‐7´ _」] l l/_,∠/   / / / い : : .
        ̄ノ/: :f r'l l /レ'/、_/‐ト'、/l| li l : : : : .
      . : {ハ : :|{(l|y==ミ   _ノ、/ソリ ll | : : : : :
      : : : :ヽヽ: :|、lハl、゙      ⌒ヾlノリ ll l : : : : : :
      : : : : : : : : V\ヽ、 `ー  ゛ノルんイリノ : : : : : :
      : : : : : : : : : ,.--、_ハ`−r=ニ--、′ノ. : : : : : : :
      : : : : : : : : /  /-ョロ'ヲ´   i l : : : : : : : : : :
      : : : : : : : 〈  ,ハフ'兀「     ! } : : : : : : : : :
      : : : : : : : : ヽ,   ト{‐lハ. ヽ ' ノ : : : : : : : :
0986nobodyさん04/11/22 02:52:12ID:???









                あーあ・・・・

                        _,,..,,,,_
                       ./ ゚ 3  `ヽーっ
                       l ゚ ll ⊃ ⌒_つ
                       `'ー---‐'''''"
0987nobodyさん04/11/22 03:20:31ID:???
>>978

>>985は連想配列ではなく動的配列のような気がす
0988nobodyさん04/11/22 05:17:54ID:???
>>987
ボクは妄想配列だと思います
0989nobodyさん04/11/22 10:57:48ID:???
>>990
おまえも、なんとか想配列って言えよ。
0990nobodyさん04/11/22 10:59:02ID:???
心臓配列 はい次
0991nobodyさん04/11/22 12:07:22ID:5v0Qpc9v
オブジェクトのコンストラクタで、引数が不正だったとかでエラーを返したいときは、
どうするのがよいのでしょう。
通常の関数でエラー発生時は、falseを返すようにしてたのですが、
コンストラクタで、 return false とやっても、
普通にオブジェクトができてしまうみたいで。
099299104/11/22 12:09:01ID:???
書くの忘れました。PHP4です。
0993nobodyさん04/11/22 12:09:19ID:???
ぼくはじめてぴーえいちぴーべんきょうするんだけど
ぼくでもわかるほんがあったらおしえてちょーだい*^^*
0994nobodyさん04/11/22 12:12:24ID:???
>>993
ありません。
0995nobodyさん04/11/22 12:38:40ID:???
>>991
どうすれば「良い」かはわかりませんが、
・オブジェクトを呼び出す前にチェックする
・引数をチェックする関数を実装して、コンストラクタから呼び出す
くらいでしょうか。
0996nobodyさん04/11/22 14:24:59ID:???
>>991
・コンストラクタは空にして、別に初期化用のメンバ関数を追加する
class A {
 function A() {}
 function init(...) { return /*初期化*/; }
}
$a = new A();
if (!$a->init()) { ... }

・エラーチェック用のメンバ変数とエラーチェック用のメンバ関数を追加する
class A {
 var $err = 0;
 function A(...) { if (!/*初期化*/){ $this->err = /*エラー番号など*/; } }
 function get_error() { return $this->err; }
}
$a = new A(...);
if ($a->get_error() != 0) { ... }

・こういうのが嫌なら、PHP5に移行して例外処理で。
099799104/11/22 14:39:17ID:???
>>995-996
ありがと。

でも、ちょっと違うような気がする。

別方面で、$this = false;
ってやればいいと知ったので、それでいくことにします。
ほんとは、PEARのエラーオブジェクトを返すといいそうです。
0998nobodyさん04/11/22 15:16:31ID:???
PHPよりJavaのほうが勉強になる?
0999nobodyさん04/11/22 15:18:06ID:???
>>998
うん
1000nobodyさん04/11/22 15:19:05ID:???
>>998
こ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。