【PHP】下らねぇ質問はここに書き込みやがれ 29
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/09/17(日) 04:26:39ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0560nobodyさん
2006/09/26(火) 10:44:49ID:???0561nobodyさん
2006/09/26(火) 11:06:44ID:???if(get_magic_quotes_gpc()){
$string = stripslashes($string);}
$string = htmlspecialchars($string);
return $string;
}
こうしたstringをそのまま、データベース(mysql)にぶち込んでるけど、
問題ってあるかな?
0563nobodyさん
2006/09/26(火) 11:23:45ID:???作る側が意識して隠してれば分からない
Content negotiationとかrewriteとかScriptAliasとか方法はいろいろある
0565nobodyさん
2006/09/26(火) 12:47:34ID:???ですよね。これはXSS対策で、HTMLに表示しなければ関係ないですよね??
これとは、全く別に、POSTで送られてきた値にinitvalやaddslashを用いればいいのでしょうか?
それとも、561の関数にinitvalやaddslashを入れればいいのでしょうか?
0566nobodyさん
2006/09/26(火) 12:59:28ID:???何もフィルタかけず(オーバーヘッドを減らすため)
SQLInjection対策でDBに突っ込むものを直前にエスケープ(addslashes)
XSS対策で出力するものを直前にHTML特殊文字変換(htmlspeicalchars)
っていうことじゃないかね
0567nobodyさん
2006/09/26(火) 13:15:21ID:???エラーを表示させてるのですが、この場合、エラーが出たら、
unlinkで削除するのが良いのでしょうか?したら、このファイルは存在しないみたいな
エラーがでたので、アップされたファイルは保存されていないのでしょうか?
0569nobodyさん
2006/09/26(火) 13:54:17ID:???すいません。タイプミスでした。ちゃんと削除されました。
0570nobodyさん
2006/09/26(火) 16:31:25ID:EMjXfoVa絶対に見逃せないエロ娘たち
http://wanwanwan.mine.nu/uploader/src/up0045.jpg
http://wanwanwan.mine.nu/uploader/src/up0044.jpg
0572nobodyさん
2006/09/26(火) 18:26:08ID:???$obj = new EveLove();
$obj2= new EveDisLove();
class EveLove{
function EveLove() {
echo "test";
echo "test2";
ここで抜ける
.....echo "test20";
}
}
class EveDisLove{
function EveDisLove() {
echo "1";
echo "2";
.....echo "20";
}
}
表示を
test
test2
1234...20となるようにしたいです
可能であれば関数等教えてくださいm(_ _)m
0573nobodyさん
2006/09/26(火) 18:51:35ID:???0574nobodyさん
2006/09/26(火) 18:52:43ID:???意味が分からん。が、書いてる内容そのままに答えるなら
returnで抜けるか、実行させたくない部分をコメントアウト、もしくは削除しろよ。
0575532
2006/09/26(火) 20:00:27ID:???sleep(20)で一時停止中に再読み込みやストップボタン押しても、20秒後停止が解除されたら
スクリプトが最後まで実行されてしまうんですが、
どうしたらいいのですか?
頭にignore_user_abort(1);
をつけたのですが変わらずでした
おしえてください
0576nobodyさん
2006/09/26(火) 20:05:52ID:???なぜ、わざわざaddslashesを使うんだよ?
SQLエスケープ専用の関数があるんだからそれを使えよ。
お前程度の知識でaddslashesを使うと、必ず穴が出る。
0577nobodyさん
2006/09/26(火) 20:12:45ID:???これ、読め。
http://www.amazon.co.jp/gp/product/4883374718/ref=sr_11_1/250-2846891-3685828?ie=UTF8
お前程度の知識でaddslashesを使うと、必ず穴が出る。
0578nobodyさん
2006/09/26(火) 20:42:55ID:???だからエスケープって書いてるじゃん
上でのaddslashes云々の話から繋がるように例として挙げてる
文脈から判断してくれよそれくらい
0579nobodyさん
2006/09/26(火) 21:14:43ID:OUvdqD7Q0580nobodyさん
2006/09/26(火) 21:25:16ID:4x0TvdIuecho レベルひっくぅ・・・・
0581nobodyさん
2006/09/26(火) 21:43:25ID:???バカかお前は。俺はその本はもちろん持ってるし、高木浩光氏のサイトも読んでる。
お前みたいなバカがいまだにaddslashesなんか使ってるから問題発生するんだ。
>>578
はぁ? 何言ってんの? 勝手に無茶苦茶な話をしてんじゃねぇよチンカス。
だからエスケープにはaddslashesじゃなくて専用関数(mysql_real_escape_string等)使えっての。
0582nobodyさん
2006/09/26(火) 21:44:36ID:???スクリプトは公開されていないでしょうか。
0583nobodyさん
2006/09/26(火) 22:18:16ID:???そんな真っ赤にならんでも^^;;;;;
0584nobodyさん
2006/09/26(火) 22:25:25ID:???その本読んでるなら、そんなにaddslashesを批判する必要なくない!?
まあ、おれはよくわからんがその本では、mysql_real_escape_stringよりも
addslashesを薦めてるぞ。
0586nobodyさん
2006/09/26(火) 22:39:58ID:???mysql_real_escape_string or addslashes
おれ、addslashes
0587nobodyさん
2006/09/26(火) 22:45:50ID:???具体的に反論できないチンカス乙
悔しかったらmysql_real_escape_stringよりも
addslashesを使うべき理由を挙げてみろ。
0588nobodyさん
2006/09/26(火) 22:50:19ID:???0589nobodyさん
2006/09/26(火) 22:54:42ID:???マニュアルにあるユーザ定義関数 quote_smart( ) なんてどうよ?
http://www.php.net/manual/ja/function.mysql-real-escape-string.php#AEN103489
0590nobodyさん
2006/09/26(火) 22:55:04ID:???0592nobodyさん
2006/09/26(火) 23:03:25ID:???これ↓、無意味なコードじゃねぇ? 別に数値かどうかに関わらず全てクォートすればいいわけで。
数値かどうか判定する分だけ無駄な処理に思われる。
// 数値あるいは数値形式の文字列以外をクオートする
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
0593nobodyさん
2006/09/26(火) 23:04:37ID:???データの安全性を確保するため、MySQL へクエリを送信する場合には (わずかな例外を除いて)常にこの関数を用いなければなりません。
0594nobodyさん
2006/09/26(火) 23:08:34ID:???俺はmysql_〜派
理由。こっちなら文字コード設定に合わせて最適なエスケープをしてくれるから。
UTF-8しか使わないならどっちでもいーんじゃないの?
外部との連携とかあってSJIS使う羽目になったらaddslashesは「使えない」。
0595nobodyさん
2006/09/26(火) 23:16:27ID:???0596nobodyさん
2006/09/26(火) 23:23:38ID:???処理が早い。
データベースコネクションの有無に影響されない。
逆変換が容易。
magic_quotes_gpcとの相性が良い。
0597現在
2006/09/26(火) 23:27:22ID:???mysql_real_escape_string 2票
0598nobodyさん
2006/09/26(火) 23:29:52ID:???0600nobodyさん
2006/09/26(火) 23:37:15ID:???0602nobodyさん
2006/09/27(水) 00:02:57ID:???逆変換が必要になるケースが理解できない…
どういう場面でそんなことする羽目になるんだ。
magic_quotes_gpcはそもそも真面目にエスケープ処理を考えてる人なら
最初から使うべきものじゃないんだから考慮する必要を感じない。
0603nobodyさん
2006/09/27(水) 00:03:35ID:???<?= echo 文字列 . $_POST['なんとか'];?>
これが危険な理由がバカな漏れには分からないorz
教えてたもれ。
0605nobodyさん
2006/09/27(水) 00:29:47ID:???0606nobodyさん
2006/09/27(水) 00:44:56ID:S78j1V6Hそれとも、スクリプト内で呼ばれた時だけ、セッション・ファイルから
随時メモリに読み出されて利用されるのでしょうか?
たとえば$_SESSION['login']='ok'という内容で格納されているとして、
スクリプト中で、if ($_SESSION['login']=='ok') {} のように使った場合、
$_SESSION['login']は、そのスクリプト終了後にメモリから解放されるのか、
それともセッションが継続する限りメモリ内に$_SESSION['login']が残り続けるのかが知りたいです。
0607nobodyさん
2006/09/27(水) 00:52:31ID:???サイテロ本の丸写し乙。
>処理が早い。
処理時間に有意の差が出るほど長大なSQLを使う場面があるとは思えない。
>データベースコネクションの有無に影響されない。
通常、エスケープしたSQLは、当然DBに接続して使うわけで、
結局コネクションは必要になる。
>逆変換が容易。
俺は今まで数々のWebアプリを作ったが、逆変換が必要だった場面など記憶にない。
>magic_quotes_gpcとの相性が良い。
いくらテロリストと相性が良くても、テロリストはテロリストだ。
0608nobodyさん
2006/09/27(水) 01:16:17ID:???1点、そもそも間違ってる部分があると思うんだが、
> それとも、スクリプト内で呼ばれた時だけ、セッション・ファイルから
> 随時メモリに読み出されて利用されるのでしょうか?
と
> $_SESSION['login']は、そのスクリプト終了後にメモリから解放されるのか、
の部分。
まるでスクリプトが終了してもメモリ上にデータが残ってるかのようだが、
スクリプト終了=使われてた全メモリ解放だよ。
というわけで正解は
スクリプトの中でセッションを開始した時点で全部の内容がメモリに読み出され、
スクリプトが終了した時点で全部解放される。
となる。
> スクリプト内で呼ばれた時だけ、
は間違いだが
> そのスクリプト終了後にメモリから解放される
は正解。
0609nobodyさん
2006/09/27(水) 01:22:05ID:S78j1V6H>スクリプト終了=使われてた全メモリ解放だよ
よく考えたらそれはそうでしたね。分かってたのに勘違いしました。
>スクリプトの中でセッションを開始した時点で全部の内容がメモリに読み出され
ズバリその点について気になっていたのでした。
たとえば$_SESSION['A']、$_SESSION['B']、$_SESSION['C']とあった場合、
スクリプト中で$_SESSION['A']だけを使った場合、メモリに読み込まれるのは$_SESSION['A']だけなのか、
それともA〜Cまで全部セッション開始(session_start)時に全部読み込まれてしまうのか、
それが質問したい点でした。
0610nobodyさん
2006/09/27(水) 01:28:24ID:???どうなんだろうね。俺はこういうちゃんとした処理してるほうが好きだけど。
俺だったらis_boolも判断して0か1に変換するし。mysqlだとtrue,false使えないんだよね。
汎用性のある、エスケープするfunctionなりクラスなり作るならしっかりやっといた方がいいとは思う。
mysql_real_escape_stringのマニュアルでは、引数にstringとってる。
まぁ何にしろ正常に動作するなら、あとは好みの問題かなぁ・・・
>>600
magic_quotes_gpcがonで、addslashesすると2重にエスケープされちゃうでしょ。
俺はmagic_quotes_gpcがonだったらstripslashesしてDBのエスケープ関数使う派。
でもpostgresのpg_escape_stringは何か問題があるという記事を読んだような気が・・・もう1回調べよっと。
0611nobodyさん
2006/09/27(水) 01:52:50ID:???でもさ、数値かどうかを判定するロジックを仮に無くしたとして、
それで何か弊害が出るかい?
その判定ロジックを省いて、
とにかくmysql_real_escape_stringをかければ、結果は同じでしょう。
0612611
2006/09/27(水) 01:56:17ID:???intval()をかけないと致命的だ・・・とか書いてるけど、
俺はそうは思わない。
なぜなら、その変数をPOSTなどから受け取った時点で、is_numericやctype_digitなど
適切な手段にてしっかりバリデートしてれば問題ないわけで。
(むろん、この場合でもmysql_real_escape_stringは必須だが)
0613nobodyさん
2006/09/27(水) 02:08:47ID:???好みの問題だから、そこをお互いどうこう言っても仕方ない。
postで受け取った時点でっていうのはあるね。俺も初めの頃はそうしてた。
でも毎回やるのが面倒になったから、DB用のクラスにエスケープするfunction作って、あとはデータ全部投げるだけ。
エスケープ以外のバリデートが必要なところはその場その場でやるけどね。
まぁ、それも好みの問題。
特に俺のDBクラスではいくつかのDBに対応させてて、magic_quotes_gpcがonの時にstripslashesするからfunction内でのis_boolチェックは必須。
0614611
2006/09/27(水) 02:15:59ID:???う〜ん、どうせ同じ正常な結果が得られるのなら、
わざわざ好んで無駄なコードを増やさないほうがいい気がするけど…。
コードが1行増えるたびにセキュリティ・ホールやバグが発生する可能性が増えると思う。
無意味なコードを「好みで」増やすという思考がよく理解できない。
0615nobodyさん
2006/09/27(水) 02:31:19ID:???もし「データ型」を理解していて、あえて型チェックしないコードを書くのは、まぁアリだと思う。
でも話から察するにそうでもないみたいだね。プログラムの基礎を学んだほうがいいかもしれない。
PHPはデータ型が緩い言語だから柔軟にコーディング出来るのは利点だけど、
「データ型」を意識しない(理解できていない)ところからくるセキュリティホールやバグもあるわけです。
「好みの問題」とは言ったけど、データ型を理解できていないなら好みの問題では済まされない。
少し勉強してみて下さい。
0616nobodyさん
2006/09/27(水) 02:59:55ID:???>>612の4行目を100回くらい読み直せ。
ついでに言うと、いまの話の流れで、データ型を考慮しないせいで
セキュリティ上の問題が発生するケースはありえない。
0617初心者
2006/09/27(水) 03:04:17ID:???セキュリティーを意識した事は一度もないのですが
どんな怖いことがおきますか?
たまに鯖缶から突然PHPの停止を受ける事があるのですが
関係ありますか
鯖缶は外人なのでうまくコニュミニケーションがとれなくて
困ってます 教えてください
0618nobodyさん
2006/09/27(水) 03:27:44ID:YNifcXJT0619nobodyさん
2006/09/27(水) 04:12:30ID:???php_flag magic_quotes_gpc off
も受け付けないサーバーって存在するの?
0620nobodyさん
2006/09/27(水) 06:18:59ID:???0621nobodyさん
2006/09/27(水) 07:16:57ID:???なぜでしょうか?
また、使わないとすると代わりに何を使えばいいのでしょうか?
0623nobodyさん
2006/09/27(水) 07:34:32ID:???データを持ち回すときにセキュリティーが必要な場合はセッションを使えってこと
普通の掲示板とかならhiddenで持ちまわしてもいい
0625nobodyさん
2006/09/27(水) 08:45:41ID:???良くないとどこかできいたのですが、本当でしょうか?
本当の場合、どうやって移動させるのがいいのでしょうか?
教えてください。
0626nobodyさん
2006/09/27(水) 08:47:58ID:???0627nobodyさん
2006/09/27(水) 09:15:43ID:???関数が定義されてないエラーが出て使えない・・・
PHPのバージョンは5.16。なんでだろう。
0628nobodyさん
2006/09/27(水) 09:29:56ID:???別にする必要は無いですか?
0629nobodyさん
2006/09/27(水) 12:28:30ID:???そういう言い方は誤解を受ける。
hiddenだからセキュリティに問題があるとか、セッションだからセキュリティ的に安全ってわけじゃない。
どちらにしても入力データのバリデートや各種エスケープをしっかりやればいい。
もちろん、パスワードなど見せてはいけないデータをhiddenで持ちまわるのは厳禁。
>>628
とりあえずお前の認識は間違っている。
で、このスレを読み返すだけでも答えはあると思う。
0630nobodyさん
2006/09/27(水) 12:34:45ID:???、htmlspecailcharsをして出力するの!?
0633nobodyさん
2006/09/27(水) 13:30:02ID:???からな。
0634nobodyさん
2006/09/27(水) 13:36:43ID:???同感。自分も型チェックの分岐を書く。
stringを期待してる関数に他の型を渡す奴は低レベルとしか言いようがない。
0635nobodyさん
2006/09/27(水) 13:58:46ID:???SCRIPT_NAMEにもpathinfo入ってます。
レン鯖の場合どうするのがいいでしょう?
>> SCRIPT_NAMEにはPATH情報が無いのでこの問題は発生しません。
ttp://blog.ohgaki.net/index.php/yohgaki/2006/02/28/php_selfa_ma_a_ra_fa_fa_oa_a_sa_a_oa
>> apacheの設定で、pathinfoをonにすると明らかな差が現れました。
ttp://ml.php.gr.jp/pipermail/php-users/2003-June/016472.html
0636nobodyさん
2006/09/27(水) 15:34:34ID:???繰り返し言うが、mysql_real_escape_stringをかける段階において、
string型かどうかをチェックしなかったがために問題が発生するということは無い。
型の自動変換などを備えて、型について「わざわざ」甘くしてあるPHPにおいて、
不必要な場面まで型についてこだわるヤツこそ低レベルで馬鹿としか言いようがない。
悔しかったら型変換を怠った場合の問題点でも示してみたまえ(そんなもの無いけどね)。
0637634
2006/09/27(水) 16:19:34ID:???お前アレだな。けっこうイタイな。
0638nobodyさん
2006/09/27(水) 16:21:21ID:???負け惜しみはいいからさ、早く具体的な問題事例があれば出してみろよwww
まさかとは思うけど、逃げんなよww
0639nobodyさん
2006/09/27(水) 16:29:10ID:???0640アチャコ
2006/09/27(水) 16:44:56ID:???0641nobodyさん
2006/09/27(水) 16:48:16ID:???参考までに聞きたいが、↓の様なコードを実行する際
$_POST['hoge']をどんな感じにエスケープしてる?
$sql = "select * from test where data like '%".$_POST['hoge']."%'";
$result = mysql_query($sql);
俺はこんな感じの関数使ってる。
function sql_escape($sql){
$sql = mysql_real_escape_string($sql);
$sql = str_replace(array("%", "_"), array("\%", "\_"), $sql);
return $sql;
}
0642nobodyさん
2006/09/27(水) 17:08:42ID:???マジで
エスケープいらないから
0643634
2006/09/27(水) 17:29:28ID:???0644trab
2006/09/27(水) 17:29:59ID:tKdESkZE早速ですがご質問です。
mail1.○○○.jp
mail2.○○○.jp
mail3.○○○.jp
という風に複数のメールサーバを用意して
phpのプログラム上から条件によって
メールサーバを選択してメール送信することは
可能でしょうか?
例えばAさんならmail1.○○○.jp、
Bさんならmail2.○○○.jpという具合です。
0645nobodyさん
2006/09/27(水) 17:40:16ID:???ttp://ww.mysql.com/doc/refman/4.1/ja/string-syntax.html
>>644
可能
0646trab
2006/09/27(水) 18:00:57ID:tKdESkZE具体的にどのようにすればよいか
教えていただけないでしょうか?
0647nobodyさん
2006/09/27(水) 18:29:23ID:???元気モリモリのー
色とりどりのー
トリオ!
さらにノビノビとー
このトビトビのー
語尾と語尾をつなぐ
喜び!
0648nobodyさん
2006/09/27(水) 18:30:04ID:???0651nobodyさん
2006/09/27(水) 20:45:28ID:???-----------st01.php
<?php #ファイルの先頭に記述
session_start();
$_SESSION['id']=0;
?>
<br><a href="st02.php">Session Test</a>
-----------st02.php
<?php #ファイルの先頭に記述
session_start();
echo $_SESSION['id'];
?>
<form method="post" action="st02.php">
<table border="1">
<tr>
<?php
for($i=1;$i<10;$i++){
echo "<td><input type=\"submit\" name=\"$i\" value=\"$i\"></td>";
if(!empty($_POST['$i'])){
$_SESSION['id']=$i;
}
}
?>
</tr>
</table>
</form>
各ボタン押したらそのボタンの値を表示させたいんだが0しか出ないよ(´・ω・`)
0654nobodyさん
2006/09/27(水) 21:49:10ID:???ありがとうございます。"$i"でくくったら出来ました。
でもクリック1回分遅れて表示してしまうので、正常には表示出来ません。
何とか上に表示させたいんですが、何か良い方法あればご教授を願いたいです。
0655nobodyさん
2006/09/27(水) 21:51:23ID:???for($i=1;$i<10;$i++){}の後ろにecho $_SESSION['id'];付けたら出来ました。
テーブルの下に表示されちゃうのではないのか?と思ったのですが
</table>タグの前なので表示されるんですね、気づきませんでした。
ありがとうございました。
0656nobodyさん
2006/09/27(水) 21:54:27ID:???$_POSTそのまま表示すれば良いだろ。
$_POSTで取った値をセッションに入れて、次のページに渡してるんだから
クリック1回遅れるのは当たり前。
0657nobodyさん
2006/09/27(水) 21:58:25ID:???すべて@で処理してもエラー文が1行表示されます。
まったく何も表示しないという事は無理なんですか?
■ このスレッドは過去ログ倉庫に格納されています