【PHP】下らねぇ質問はID出して書き込みやがれ 131
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2013/11/10(日) 15:46:09.34ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 130
http://kohada.2ch.net/test/read.cgi/php/1379566039/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0272nobodyさん
2013/11/19(火) 10:43:34.31ID:???0273nobodyさん
2013/11/19(火) 10:54:41.60ID:???0275nobodyさん
2013/11/19(火) 11:57:37.76ID:???あおりのレベルが低いんだよな。
0276nobodyさん
2013/11/19(火) 12:16:10.14ID:???使ってる人の問題だけど、そういうFWを推してる人はどうにかならんかな
0277nobodyさん
2013/11/19(火) 12:17:54.87ID:???0279nobodyさん
2013/11/19(火) 12:20:03.73ID:???0280nobodyさん
2013/11/19(火) 12:28:14.36ID:???0281nobodyさん
2013/11/19(火) 12:30:37.60ID:???0282nobodyさん
2013/11/19(火) 12:39:02.32ID:???今も治ってないの?
0283nobodyさん
2013/11/19(火) 12:53:02.64ID:hKBGRur1http://fuelphp.jp/docs/1.6/general/security.html#sql
0285nobodyさん
2013/11/19(火) 13:17:38.96ID:???query+quoteに比べて処理工数が多いだけに遅そうだしー
ただでさえ遅いFWの速度をあげるには仕方ないのでゎ
0287nobodyさん
2013/11/19(火) 13:23:36.67ID:???0288nobodyさん
2013/11/19(火) 13:24:21.74ID:???一昔前の文字コードやエスケープ処理での脆弱性を知らないんだろうし
シングルバイト系の人は知らない人多いし
0289nobodyさん
2013/11/19(火) 13:37:06.01ID:hKBGRur1だめなの?
fuelphpてSQLインジェクション防げないんだ…
これはオワコンだわ
0290nobodyさん
2013/11/19(火) 13:49:33.19ID:???基本的には防げてるし、新たに発見された脆弱性も継続して修正されてる。
http://fuelphp.com/security-advisories
「プリペアードステートメントを使ってないからSQLインジェクションの脆弱性がある」というのはFUD。
とはいえ、プリペアードステートメント使えやとは思うけどね。
0291nobodyさん
2013/11/19(火) 13:57:50.15ID:???そもそもでいえば、インジェクション防止の機構じゃねーし。
SQLの機構じゃなくて、ライブラリのラッパなので、仕様によっては
使っていても問題ないというわけではない。
0292nobodyさん
2013/11/19(火) 13:58:01.02ID:???クエリを実行するとき、データベースサーバでは、
1. 構文解析
2. 実行計画立案
3. クエリ実行
の処理が必要で、prepareでは1または1&2が行われる。(構文のみで実行計画を立てて固定する場合と、3で渡された
パラメータをもとに実行計画を立てる場合がある)
一方、exec queryでは毎回1〜3が行われる。
なので、同じ処理をパラメータを変えながら複数回実行する場合、プリペアードステートメントを使った方が速い場合がある。
0293nobodyさん
2013/11/19(火) 14:08:35.69ID:???>>268
PHPが何なのか解らず、単にネットプログラムの質問スレで質問させて頂きました
>>269
大手企業サイトなので厳しいですね
ど素人ながら、ログインボタンのURLとかPCでログイン後のURLとか試したんですが、無理でした
0294nobodyさん
2013/11/19(火) 14:12:15.36ID:???> 大手企業サイトなので厳しいですね
大手こそ対応してくれそうなもんだが。
「○○のサイトって、ガラケーのフルブラウザだとログインもできない糞サイトだわ」
とかネットで言われると困るだろうし。
0298nobodyさん
2013/11/19(火) 15:39:16.53ID:???0300nobodyさん
2013/11/19(火) 15:55:45.62ID:???昔のMySQLみたいなprepareがクライアントサイドで処理とかゴミな実装されてると
prepareのほうが脆弱性の巣窟になりかねない。
この場合、徳丸氏や大垣氏が騒ぐから問題はいつか解決される
0301nobodyさん
2013/11/19(火) 16:05:50.48ID:???ポストしたデータ類はdbやcsvに書き込んだり保存したりするわけでもなく
switch($_POST["color"])
{
case "red":return imageColorAllocateAlpha($i,200,200,200,$alpha);break;
~~~~~~
default:return imagecolorallocate($i,255,255,255,$alpha);break;
}
で最終的に変な物が飛んできてもdefaultで処理されると思うんですがセキュリティ的にこれ$_POSTを正規表現やstrlenで弾くべきですか?
0305nobodyさん
2013/11/19(火) 17:47:12.58ID:???想定外のものがあったらexitして真っ白にして不気味感を演出したり
headerでbad requestあたりを返すと思う
0306nobodyさん
2013/11/19(火) 18:06:18.79ID:???0307nobodyさん
2013/11/19(火) 20:51:48.38ID:???余談だが、404にすべきページをエラーページに飛ばしてたら
ソフト404とかで注意されたよ。
0309nobodyさん
2013/11/19(火) 21:10:38.01ID:???0310nobodyさん
2013/11/19(火) 21:14:07.64ID:???header("HTTP/1.0 404 Not Found");
header("Location: http://www.example.com/error/");
こんな感じにしたら、なぜか、最初のヘッダーは無視されて、
結局、302でのリダイレクトになっちゃうから404を出すのは諦めたんだけど。
404出してから更にエラーページに遷移するのは無理っぽい。
fiddlerでステータスコードを確認した限りの話だが。
0314nobodyさん
2013/11/19(火) 21:18:06.73ID:???0315310
2013/11/19(火) 21:37:04.47ID:XtFCM7Hlいや、エラーページは200を返す普通のページにしてたんだけど。
もちろん、存在しないページ用の404ページ(ヘッダー404)は別に用意してるんだけど。
つーか、むしろエラーページに飛ばさないで、素直に404ページに飛ばせばいいのか。
0316310
2013/11/19(火) 21:42:44.27ID:XtFCM7Hl0317nobodyさん
2013/11/19(火) 21:49:59.72ID:???厳密には200を返す必要があるときはない
0318nobodyさん
2013/11/19(火) 21:54:36.62ID:???0319310
2013/11/19(火) 22:48:57.12ID:9JiWXD43どうも頭が混乱してしまいました。
こうすれば大丈夫でしょうか?
POSTパラメーターが不正 → エラーページ
(200ステータス: echo ”リクエストが不正です”)
GETパラメーターが不正か不存在 → 404ページ
(404ステータス: echo ”ページが存在しません”)
GETパラメーターの場合に、エラーページに飛ばしていたのが、
ソフト404の原因だと思うのです。
0320nobodyさん
2013/11/19(火) 23:00:34.26ID:???RFC2616か、WikipediaのHTTPステータスコードでもいいから読んで
どういう時にどれを使えばいいか分かるから
0321nobodyさん
2013/11/19(火) 23:04:02.90ID:???hoge.phpというファイルは存在しているんだから404を返すのは不自然
0322310
2013/11/19(火) 23:29:26.30ID:9JiWXD43ご指摘に従い、HTTPステータスコード等について調べてみます。
>>321
mod_rewriteで、GETパラメーターを静的URLに書き換えてリンクとして活用しているのですが、
この場合もhoge.phpは存在するとみなされるのでしょうか?
(例)ttp:example.com/hoge/2013/11/29
9999とか不正な値がきたら、404に飛ばせばいいかなと思ったのですが。
わかりづらい説明ですみません。
0323nobodyさん
2013/11/19(火) 23:44:52.18ID:???実質的にはhoge.php?y=2013&m=11&d=29みたいな感じで見れると思うけど
hoge.phpが存在するというのを表向きに知られたくないのなら好きにすればいいんじゃね
目的とか実装によりけりだよそのへんは
0324nobodyさん
2013/11/19(火) 23:51:53.10ID:???ファイルがあろうがなかろうが、そのURLを存在させたくなければ404でよい
> (例)ttp:example.com/hoge/2013/11/29
> 9999とか不正な値がきたら、404に飛ばせばいいかなと思ったのですが。
404が適切。
0325nobodyさん
2013/11/19(火) 23:59:01.39ID:???example.com/post/ブログ記事のid
だとして、存在しないidだったときは404返してたんだけど間違ってる?
0326310
2013/11/20(水) 00:10:19.19ID:VLPy2k85(例)ttp:example.com/hoge/2013/11/29
結論として、このurlの不正な値の場合に、200のエラーページに飛ばしていたのがソフト404の原因ですよね。
ご指摘くださったことを参考に、もう一度、ページの構成と遷移、
ステータスコードの関係について検証したいと思います。
ありがとうございました。
0328nobodyさん
2013/11/20(水) 07:53:07.64ID:???自分で書いてるスクリプトなのにw
400と500のどちらかを返すだけの方が無難だよねw
0331nobodyさん
2013/11/20(水) 11:28:24.00ID:35fCUlouErrorDocument 404 /error/404.php(404ヘッダーを出力)
ここから質問です。
次のURLのid値が不正な場合、404となるよう、同様に、/error/404.php に遷移できますか?
ttp://example.com/post/id
header('Location: ttp://example.com/error/404.php');
post.phpで出すこのヘッダーは302ですが、遷移すれば、結果として404扱いになるのでしょうか?
0332nobodyさん
2013/11/20(水) 11:33:09.19ID:???0333331
2013/11/20(水) 11:36:20.51ID:35fCUlouオリジナルに作成した、いわゆる404ページです。
もしかしたら、(404ヘッダーを出力) という部分は間違いかもです。
0334nobodyさん
2013/11/20(水) 11:57:47.58ID:???そうでないなら302
不安ならPHP側で処理に合わせてheaderとresponse返すようにすればおk
0335nobodyさん
2013/11/20(水) 12:22:36.67ID:???Locationは「リソースの別の場所を案内する」ために用いられるもの
「リソースが見つからない」場合の挙動は定義されていない
各ベンダーの実装は404とLocationを一緒に出すと無視される
よって include('error/404.php'); 等とするしかない
0336331
2013/11/20(水) 12:41:10.58ID:35fCUlouありがとうございます。
header("HTTP/1.0 404 Not Found");
このヘッダー出力だけで、自動で遷移する、ErrorDocument 404 と
同様の効果があると良いのですが、どうも無理なようですね。
<?php
//idチェック処理後不正な場合
header("HTTP/1.0 404 Not Found");
include('error/404.php');
exit;
やはり、こうして読み込むしかないということですね。
ありがとうございました。
0337nobodyさん
2013/11/20(水) 12:43:47.50ID:???0340nobodyさん
2013/11/20(水) 17:32:58.48ID:???404.phpに移動していいならそれでいいね。
ただ、.htaccessにErrorDocument設定をしたのと同じ振る舞いを希望するなら、その手じゃ駄目なんじゃ。
0341nobodyさん
2013/11/20(水) 17:55:26.35ID:???最近転職してPHPを触るようになったのですが、Linux上のvimで開発しています。
開発時にインデントをある程度入れると思うのですが、普通はどのようにインデントを
入れるのが正しいソースの書き方なんでしょうか?
今触っているソースは特に改行やTABインデントがなく、そのまま1行でずっと
書かれてあり可読性としてどうなのかなと思いつつも、そういうルールかもしれないと思い
自分も特にインデント等を入れずに開発しているのですが。。
わかりにくい書き方で申し訳ありませんが、どなたか教えて頂けないでしょうか
0342nobodyさん
2013/11/20(水) 17:57:19.88ID:???整形して編集してリリース時にまた改行消す、とかでいいんじゃ?
0343nobodyさん
2013/11/20(水) 17:58:27.74ID:???後で自分が追うことになっても苦労しない程度にね
0344nobodyさん
2013/11/20(水) 18:00:00.26ID:???次の文は正しい?それとも間違い?
『転送元で302を出しても、転送先で404を出せば「ソフト404」にならない』
0345nobodyさん
2013/11/20(水) 18:00:42.18ID:???インデント、改行の入れ方はいろいろある
http://www.infiniteloop.co.jp/docs/psr/psr-2-coding-style-guide.html
http://ja.phptherightway.com/
のコーディングスタイル
いろいろあってどれが正しいとかはないが、会社やプロダクトでどうなっているか次第
一行に書くのがルールですって言われたら会社辞めちゃいそう
0348nobodyさん
2013/11/20(水) 18:05:59.79ID:???パッと見た時に「読みにくい」と思ったのが最初です
例えば
$hoge = array('aaa' => $aaa, 'bbb' => $bbb);
のようなものがあったとして(実際はもっと多いです)
$hoge = array
(
'aaa' => $aaa,
'bbb' => $bbb
);
のように書いた方が後で見た時に読みやすいと思いまして。。
>>345
資料の方ありがとうございます。
そちらを見てみます。
0349nobodyさん
2013/11/20(水) 18:07:21.19ID:???それって最終的にそうしてるってだけで、
編集用のコメントが入ってたりインデントもちゃんと入ってるソースが別にあるでしょ?
つうか会社に人に聞きなさいよ。
0350nobodyさん
2013/11/20(水) 18:08:46.70ID:7VTPw3qr含まれる文字列に変換されることってありえませんよね?
0351nobodyさん
2013/11/20(水) 18:11:55.88ID:???0353nobodyさん
2013/11/20(水) 18:14:21.21ID:???インデントはスペース4つが普通。
いろんな文法チェッカーツールも、デフォルトではタブでインデントしてると警告を出すのが多い。
0354nobodyさん
2013/11/20(水) 18:17:04.21ID:???ないんです
聞いてみたら「昔からこうだった」らしいので。
そういうものなのかなと少し疑問に思って質問しました。すみません
>>353
TABじゃないらしいですね。
>>345さんの教えてくれたページを見て驚きました
スレ汚し申し訳なかったです
0355nobodyさん
2013/11/20(水) 18:17:34.09ID:7VTPw3qrですよね。CSVファイルに保存するとき、base64_encodeして保存してるのですが、
たまにダブルクォーテーションが余分についてファイルが壊れている事があります。
原因が全くわからないので、バグを見つけられずに困っていました。
他の原因を探ってみます。
0356nobodyさん
2013/11/20(水) 18:19:19.18ID:???PHPのインデントはスペース派が多いけど
どっちでもいいよ。会社やプロダクトで決められたほうを使うべきかな
0358nobodyさん
2013/11/20(水) 18:43:18.00ID:???vimの設定ちょこちょこしておけばインデントは勝手にやってくれるよ。
インデントを入れずに書くのはやめといたほうが。
0360nobodyさん
2013/11/20(水) 19:11:37.50ID:???PSR-2に従うならだな
従うかはMUSTではないからな
うちはPSR-1までは従ってるけど、コーディングスタイルは全然違うな
0361nobodyさん
2013/11/20(水) 19:29:19.34ID:???いい加減な事を教えないでくれ
301はリソースが一時的に別の場所に「ある」時に使う
ソフト404エラーは404を返すべきところで「404を返さない」事を指す
0362nobodyさん
2013/11/20(水) 19:45:20.59ID:???違うよ、まず301は恒久的だぞ、一時的は302
301にしろ302にしろ、リソースが新しいURIに移動したことを示す。
404はURIに一致するリソースが見つけられない、リソースはあるがリクエストを拒否したい等々
移動させることは勝手だし、リソースのあるなしは関係ない。
>ソフト404エラーは404を返すべきところで「404を返さない」事を指す
その通りだが、そのURIを301にしてその先で404を返すのは勝手。
その場で404を返そうがどっちでも良い
返せるならその場の方が好ましいとは言えるかもしれない
0363nobodyさん
2013/11/20(水) 19:48:23.17ID:ZNkS7nHyもし関数やライブラリがあれば教えてください。
無ければサンプルコードを教えてください。よろしくお願いします。
0364nobodyさん
2013/11/20(水) 19:52:53.93ID:ZNkS7nHy仮に、[1, 2, 3, 4, 5] の5つから3つ選び出す場合、
$result = [
[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 1, 4], [1, 1, 5],
[1, 2, 2], [1, 2, 3], [1, 2, 4], [1, 2, 5],
...
...
[1, 5, 5],
[2, 2, 2], [2, 2, 3], [2, 2, 4], [2, 2, 5],
[2, 3, 3], [2, 3, 4], [2, 3, 5],
...
...
...
...
[5, 5, 5]
];
このように出力したいです。
0365nobodyさん
2013/11/20(水) 20:08:13.76ID:???0366nobodyさん
2013/11/20(水) 20:10:39.68ID:???0367nobodyさん
2013/11/20(水) 20:39:38.18ID:???> 違うよ、まず301は恒久的だぞ、一時的は302
ごめん、俺が取り間違えてる
> 404はURIに一致するリソースが見つけられない、リソースはあるがリクエストを拒否したい等々
> 移動させることは勝手だし、リソースのあるなしは関係ない。
404は適当な理由による拒否として使うコードではない (RFC 2616#10.4.5)
拒否する理由に合わせて400、401、403、406等が用意されている
> その場で404を返そうがどっちでも良い
> 返せるならその場の方が好ましいとは言えるかもしれない
Googleが決めたソフト404エラーを回避する義務がないのは同意するけど
無いものを無いと知っててクライアントに教えないのはHTTPサーバーとして行儀が悪い
今回のケースではPHPで対応できるのだから404を返すべき。この点は譲れん
■ このスレッドは過去ログ倉庫に格納されています