【PHP】下らねぇ質問はID出して書き込みやがれ 99
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/10/13(水) 12:01:33ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 98
http://hibari.2ch.net/test/read.cgi/php/1284805237/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0242nobodyさん
2010/10/16(土) 00:39:04ID:???0243nobodyさん
2010/10/16(土) 00:45:46ID:YK7HI7ryやっと完成しました。
0244nobodyさん
2010/10/16(土) 01:08:54ID:gWKvdlCeチェックをかけるため、下記の正規表現をぐぐりながら書いてみた
のですが、どうも正常に動作しません。
if(!(preg_match('/[ぁ-んァ-ヴーa-zA-Z0-9]{1,10}/u', $_REQUEST['text']))){
errot();
}
恐れ入りますが、ご教示いただけますと、幸いです。
もし他に何か方法があればそちらを教えていただけますと幸いです。
0245nobodyさん
2010/10/16(土) 01:09:42ID:???0246nobodyさん
2010/10/16(土) 01:11:27ID:???何だかエロいなw
0247244
2010/10/16(土) 01:15:53ID:gWKvdlCe1つ上で
$_REQUEST['text'] = mb_convert_encoding($_REQUEST['text'], "UTF-8", "SJIS-win");
をしていて、ソースがUTF-8のため/uオプションをつけているのですが、
これがいけないのでしょうか。
すみませんがご教示ください。
>>246
すみません、、errorでしたね。。
0248nobodyさん
2010/10/16(土) 01:27:40ID:???「正常に動作しません」とは具体的に何がうまくいかないのかな。
うまくいく文字列、うまくいかない文字列があれば例示すべし。
ちなみに>>244のままだと文字列の一部に全角文字が含まれてれば通過するんじゃないかな。
0249nobodyさん
2010/10/16(土) 01:59:46ID:???!preg_match('/[a-zA-Z0-9]{1,10}/u',
じゃ、ダメなん?
0250nobodyさん
2010/10/16(土) 02:04:46ID:???>>228は同じテーブルっぽくない?
>>243
>>241の書き方はXSSという攻撃の対象になり得るので、下の用にしましょう。
<php?
$url = htmlspecialchars($_POST['abcde'], ENT_QUOTES);
?>
<form action="<?php echo $url; ?> " method="post">
0251nobodyさん
2010/10/16(土) 02:07:57ID:???0254nobodyさん
2010/10/16(土) 02:14:10ID:???0256nobodyさん
2010/10/16(土) 02:50:29ID:???htmlspecialchars使えば万事OKではない
htmlspecialcharsのデフォルトの文字コードはISO-8859-1、php.iniの文字コードとスクリプトの文字コードが食い違うとXSS可能
なのでちゃんと第三引数まで指定すること
あと、>>234の場合だと2バイト文字を含まないのでctype_printで先にチェックしておく
2バイト文字を含むならmb_check_encodingでチェック、これもちゃんと第二引数まで指定する
0257nobodyさん
2010/10/16(土) 03:10:26ID:???直接<from action="〜">に再投入することが問題。
0258nobodyさん
2010/10/16(土) 03:15:03ID:???そのときにどうセキュリティ対策するかという話
0259nobodyさん
2010/10/16(土) 03:21:54ID:???htmlspecialchars掛けたって偽装URLは排除しようがない。
>>234のようにあらかじめURLの選択肢が決まっているのであれば
そのURLを直接送信せずに選択肢番号のみを送信し、受け取った 2.php 内で
その番号に応じたURLを埋め込むような仕様にすべき。
0260nobodyさん
2010/10/16(土) 03:45:00ID:???他人にはURLとして誘導できないからな
0261nobodyさん
2010/10/16(土) 04:16:38ID:???クリックした本人にしか影響がないわけだからな。
XSSを考慮するなら、偽のindex.phpを用意して本物の 2.php にPOSTするような
攻撃方法も考慮すべき。
0262nobodyさん
2010/10/16(土) 04:18:40ID:???前半2行は無視してくれ。
0264nobodyさん
2010/10/16(土) 04:37:03ID:???0265nobodyさん
2010/10/16(土) 07:22:06ID:YK7HI7ry攻撃されるって誰からですか?
0267nobodyさん
2010/10/16(土) 13:34:00ID:???0268nobodyさん
2010/10/16(土) 13:41:34ID:I74M7hiK0269nobodyさん
2010/10/16(土) 13:42:42ID:???0270nobodyさん
2010/10/16(土) 13:47:14ID:???0271nobodyさん
2010/10/16(土) 14:12:49ID:???>>234のようにあらかじめURLの選択肢が決まっているのであれば
そのURLを直接送信せずに選択肢番号のみを送信し、受け取った 2.php 内で
その番号に応じたURLを埋め込むような仕様にすべき。
これに興味あり。なんで?
0272nobodyさん
2010/10/16(土) 14:36:37ID:???HTMLなんか書き換えられるんだから、変なURL突っ込むことも可能だろ
あらかじめ数字か何かで決めておけば、変なのが来ても弾ける
0273nobodyさん
2010/10/16(土) 15:08:04ID:???<script>
window.onload = function(){
document.frm.submit();
}
</script>
<form action="http://example.com/" name="frm">
<input type="hidden" name="abcde" value="http://example.org/" />
</form>
0274nobodyさん
2010/10/16(土) 15:11:31ID:???0275nobodyさん
2010/10/16(土) 15:49:36ID:???でも一般的なプログラミングとしては>>259のようにしたほうがいい
もちろん 2.php 内でPOSTされた数値の正当性もチェックする
0276nobodyさん
2010/10/16(土) 20:03:39ID:avUbsZ6o$text = file_get_contents('text.csv');
echo mb_detect_encoding($text);
としたのですが、文字コードが取得できません。
どうすればいいのでしょうか?
0277nobodyさん
2010/10/16(土) 20:17:42ID:???どんなエラーメッセージが表示される?
0279nobodyさん
2010/10/16(土) 20:44:46ID:avUbsZ6oecho してもなにも表示されない状態です。
0280nobodyさん
2010/10/16(土) 20:45:51ID:avUbsZ6o0281nobodyさん
2010/10/16(土) 20:49:25ID:???の結果がFALSEだとしたら検出に失敗している
ちなみにmb_detect_encodingは必ずしも検出できるとは限らない(対象文字列による)し、
文字列によっては誤検出する場合もある。
0282nobodyさん
2010/10/16(土) 21:15:41ID:avUbsZ6o検出したいのはファイルの文字コードで
ファイルの文字コードがUTF-8以外の場合は、
mb_convert_encondigでUTF-8に変更するというのが目的です。
その為に、ファイルの文字コードを知る必要があると思いました。
0283nobodyさん
2010/10/16(土) 21:25:46ID:???mb_convert_encodingの第3引数を"auto"にして自動変換する場合も同様。
"mb_convert_encoding UTF-8" あたりでググるとよい
0286nobodyさん
2010/10/17(日) 02:04:43ID:???これに対する回答だからじゃないの?
0287nobodyさん
2010/10/17(日) 02:40:23ID:N98scqjcerror_reporting = E_ALL & ~E_NOTICE
の設定にして、全てのエラーや警告が出ないように作ってますか?
そこまでする必要はあるのでしょうか?
お仕事でPHPを使っている人は、やっぱりそのへん厳密にやってるんでしょうか…。
0288nobodyさん
2010/10/17(日) 03:52:16ID:???http://www.php.net/manual/ja/security.errors.php
想定外のアクセスやアタックがあった際にエラーの内容からプログラムの構造を推察されないように
したいのならエラーを抑制すればいい。
独自のエラーハンドラ関数を作成してエラーを表示しない代わりにログに記録することもある。
0290nobodyさん
2010/10/17(日) 10:47:44ID:???正しい書き方を身につければそんなこと考えもしないよ
0291nobodyさん
2010/10/17(日) 11:00:19ID:GEOHnAz9たとえば、dataのカラムにabcを含む場合、だったら
where `data` like '%abc%'
となりますが、どのカラムでもいいのでとにかくどこかにabcが含まれている場合、だったらどうなりますか?
where `*` like '%abc%'
と書いたら、undefined method ってエラーがでました
0293nobodyさん
2010/10/17(日) 12:05:33ID:???それだとNOTICEでないよね?
うちはNOTICEは全てでないようにしないと品質保証部のの許可が下りない
0294nobodyさん
2010/10/17(日) 14:12:52ID:???0296nobodyさん
2010/10/17(日) 15:13:27ID:???0298nobodyさん
2010/10/17(日) 16:06:41ID:???まあ連結するとき間にセパレーター置かないと誤判定するか
0300nobodyさん
2010/10/17(日) 17:22:16ID:???設計に問題があるかも
0301nobodyさん
2010/10/17(日) 17:37:18ID:???そうなんですか。
undefined indexっていうwarningが出ないようにしていくのが
とても大変で・・。
0302nobodyさん
2010/10/17(日) 17:39:50ID:???簡単にいうとモンスターリストがありまして、
抽出で、生息地や全長などで絞り込めるんですが、
「フリーワード抽出」の項目を設けて、「○○の文字をどこかに含むもの」でも絞れるようにしたいのです
現状だと、カラムすべてに対して書いてるんですが、簡略化できるんではないかと思い立ちましてお尋ねした次第です
0303nobodyさん
2010/10/17(日) 18:23:32ID:???全カラムを取得してループでクエリを組みたてれば「記述するのは」楽になる。
実行速度的(スケーラビリティ的)には仮に*が使えたとしても列挙したのと大して変わらない。
カラムが100項目もあるとかいうなら考える余地はあるけど、そこに拘ってもあまり得はない。気持ちの問題。
業務システムじゃむしろ列挙しなきゃだめなんじゃないかね。
あとageてね・・・。
0304nobodyさん
2010/10/17(日) 18:28:05ID:???そうですね
楽しようというのが主旨でしたが、これくらいちゃんと書けって話ですね
目が覚めましたありがとうございます
0305287
2010/10/17(日) 21:34:04ID:???やっぱり熟練者は正しい書き方ができてるんですね。
>>293
NOTICEは出さないようにしてます。
そこまでするべきでしょうか?
0307nobodyさん
2010/10/17(日) 22:56:51ID:5JoLPq4lヘッダ、フッタなどサイト上の多くのページで同一のHTMLがある場合これを別のファイルにして
各ページからreadfileで読み込むようにしています。
readfile("inc/header.inc");//ヘッダを読み込む
といった具合です。
同時にこのページでクッキーも利用したいと考えているのですが、
readfileはクッキーを無効にしてしまうようで正常に動作してくれませんでした。
各所でreadfileの説明を読んでみても無効にする、といった説明はないのですが常識的なことなのでしょうか。
またこの場合includeなどを用いるべきなのでしょうか。
御指南よろしくお願いいたします。
0308nobodyさん
2010/10/17(日) 22:57:03ID:???必死に出ないように書いてるんです。
>>290さんの言われているように、慣れれば当たり前のように正しい書き方ができるのかもしれませんが、
今はすぐに警告や注意が出るのでとても疲れます。
0309nobodyさん
2010/10/17(日) 23:02:11ID:???仕事じゃないんでしょ?
自分でテストして問題無いと思えば無視すれば?
仕事なら規約次第だけど、小さいとこだとNOTICE無視は結構ある
ようはテストして動けば良いという考え
0310307
2010/10/17(日) 23:06:35ID:5JoLPq4lHTTPヘッダ送信以前にクッキー操作をするのは常識でしたね…
お恥ずかしい限りです…
スレ汚し申し訳ありませんでした…
0311nobodyさん
2010/10/17(日) 23:19:38ID:???そうですね。割り切ることにします。
あと、変数の前に@を付けると回避できることがわかったので、使ってみます。
ありがとうございました。
0312nobodyさん
2010/10/18(月) 01:07:02ID:???0314nobodyさん
2010/10/18(月) 06:29:04ID:Ea5b1l3E$list[] = $foo.' :'.$bar;
arsort($list);
foreach ($list as $value){
echo $value."<br>";
}
とやると、
7 :hoge
61 :hogehoge
5 :hogehoge3
って感じで頭の数字一桁分だけでソートされてしまうんですが、
これを$fooで入れた数字の大きさでソートさせるようにするにはどうしたらいいでしょうか
0317nobodyさん
2010/10/18(月) 07:12:35ID:???ありがとうございます
3桁になると上位二桁のみで判定されるのでだめでした
>>316
ありがとうございます
これ使います
0318nobodyさん
2010/10/18(月) 08:14:10ID:GNgSoasgphpで調べてみると脆弱性とか修正できない問題が結構多いのですがphpの将来性ってどうなんでしょうか?
なんだか致命的な欠点が多いのでその内自分の学んでるphpの知識が無駄になってしまうのでは?と思ったりしてるのですが
0320nobodyさん
2010/10/18(月) 08:45:26ID:???ブルーレイと東芝のDVDみたいなモンだろ。どっちのレコーダー買えばいいかみたいな
そりゃ欠陥ばっかりのモノより将来性のある方選んだほうがいい
俺はまだphpは未成熟で可能性としては未知数と思ってる
perlと比べると長ったらしくなるコードがphpだと物凄い短くなるし
0321nobodyさん
2010/10/18(月) 09:43:13ID:???PHPが深刻な脆弱性を多々抱えてるわけではない
ではなぜそういうことが言われてるかというと
プログラムする人のコーディングミスによるセキュリティーホールが
PHPだと発生しやすいからだ
PHPに脆弱性があるんじゃなくて
作成したWebアプリケーションに脆弱性を発生させ易いのがPHPということ
ここらへんがPHPは初心者向けであって初心者向けでないと言われる所以
PHPが本当は内部処理で適切にコーディング内容を処理すればいいんだけど
ユーザ任せになってるところが問題なだけ
熟練者にもミスはつきものだが熟練者にとってはラピッド開発できる優秀な言語でもある
0322nobodyさん
2010/10/18(月) 09:49:08ID:???0323nobodyさん
2010/10/18(月) 09:49:25ID:fqdWguE4シェルログインに対応していません。
FTP等から、PHPのバージョンアップをしたりすることは可能でしょうか?
0324nobodyさん
2010/10/18(月) 10:10:04ID:???鯖管にメールしてバージョン上げられるか交渉してみなよ
そこのレン鯖の新しいサーバで5.2に対応してるならそっちに引越しさせてもらうとか
0325nobodyさん
2010/10/18(月) 11:56:56ID:???また小飼弾ちゃんが大騒ぎしてんのか?
0326nobodyさん
2010/10/18(月) 12:23:33ID:???0327nobodyさん
2010/10/18(月) 12:24:00ID:???0329nobodyさん
2010/10/18(月) 12:59:10ID:???0330nobodyさん
2010/10/18(月) 13:10:00ID:???個人のブログが多いけど
0331nobodyさん
2010/10/18(月) 13:22:31ID:???「これはユーザー(プログラマ)側ではどうしようもできねー、PHPという言語自体の問題だ」
というのを上げて欲しいですね。
0332nobodyさん
2010/10/18(月) 13:47:45ID:???さすがにそのレベルので放置はしないだろ。注意してないと引っかかる落とし穴レベルだと思う。
でも例えばぐぐって一番上に出てきた
ttp://wiki.ohgaki.net/index.php?PHP%2F%E8%84%86%E5%BC%B1%E6%80%A7%E3%83%AA%E3%82%B9%E3%83%88%2F%E3%83%A1%E3%83%A2
を見た感じでは知ってれば避けるのは簡単で、Cのバッファオーバーランみたいに知ってても
うっかりはまりそうというほど危険なレベルではないと思うな。
0333nobodyさん
2010/10/18(月) 13:58:02ID:???セキュリティ意識を高めて学ぶならPHPは最適ってことか
0335nobodyさん
2010/10/18(月) 17:21:30ID:d6HCmNn9PCからe-mobileのデータ端末を使用した場合と同様にネットを
する事が出来るという事なのですが、
仮にdocomo携帯でネットに接続した状態で
WEBサイトにアクセスした場合にサーバ側で取得したホストは、
(例えば2chに書込みを行った場合)
下記の様に通常のdocomo携帯からのアクセスと
同じ様になるのでしょうか?
proxy20077.docomo.ne.jp
DoCoMo/2.0 D903i(c100;TB;W23H16)
HOge0QoU
0337nobodyさん
2010/10/18(月) 17:27:49ID:d6HCmNn9phpよりホスト等を取得するからです。
0338nobodyさん
2010/10/18(月) 17:38:43ID:???PCつかうとUserAgentはFirefoxとかIEになるけど
UserAgentやヘッダ(端末ID等)なんてPC使えばいくらでも偽造できる(成りすまし)からあまり当てにしないほうがいい
0339nobodyさん
2010/10/18(月) 17:42:58ID:???>下記の様に通常のdocomo携帯からのアクセスと
>同じ様になるのでしょうか?
結論からいうと、なりません。
一部のdocomoの携帯(スマートフォン)をPCに繋いでネットすることはできるけど、
その場合はmoperaに契約して繋ぐことになるのでホストはmoperaになります。
0340nobodyさん
2010/10/18(月) 17:54:17ID:???http://ke-tai.org/blog/2009/08/04/softbankgwpc/
0341nobodyさん
2010/10/18(月) 18:06:51ID:???docomoIDの事を知りたかったのです。
>>339
どうもありがとうございます。
疑問が解けました。
>>340
???という事は、PCを使用して携帯電話を操作する事が可能なのですね。
■ このスレッドは過去ログ倉庫に格納されています