[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/09 18:38 / Filesize : 104 KB / Number-of Response : 378
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【PHP】下らねぇ質問はID出して書き込みやがれ 81



1 名前:nobodyさん [2009/02/18(水) 21:09:16 ID:xNLzAD7T]
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 80
pc11.2ch.net/test/read.cgi/php/1233479457/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。


161 名前:nobodyさん mailto:sage [2009/02/20(金) 23:31:06 ID:???]
>>160
大間違い


162 名前:nobodyさん mailto:sage [2009/02/20(金) 23:34:48 ID:???]
htmlspecialcharsで防げるだろ
>>161はhtmlspecialcharsを使用しても抜けられる穴について説明よろ

163 名前:nobodyさん mailto:sage [2009/02/20(金) 23:39:40 ID:???]
>>160
htmlspecialchars(,ENT_QUOTES)で防げるのは「Script Injection」。
Javascript埋め込みとかそんなヤツ。

「SQLインジェクション」は別問題。
「PHPサイバーテロの技法」を買って読んどけ。

164 名前:nobodyさん mailto:sage [2009/02/20(金) 23:47:18 ID:???]
>>162
LIKEのとこに%とか*突っ込んでみるとか。
select * from table where name like '%' ;


165 名前:nobodyさん mailto:sage [2009/02/21(土) 00:28:20 ID:???]
>112
$str = '<font size="10">でっかい</font>';
$smarty->assign('tag', $str);
$smarty->display('hoge.tpl');

---hoge.tpl---
<body>
{$tag}
</body>

とかいう意味だったら笑う。

>162
>164の変数名のところに「' OR 1=1」と入れるとレコードが全件変数に入り個人情報大暴露大会。
「'; DROP なんたらかんたら」と書くとテーブルがぶっ飛ぶ。レプリケーション先も全部死ぬからサービス復旧不能で店じまい、会社は倒産。
MySQLの設定が甘いと、管理テーブルを書き換えられてroot奪われるとかもあるな。

166 名前:nobodyさん mailto:sage [2009/02/21(土) 00:32:30 ID:???]
あーっと、ENT_QUOTESだったか。死んでくる。

167 名前:nobodyさん mailto:sage [2009/02/21(土) 00:38:03 ID:???]
>>160
addslashes

168 名前:nobodyさん mailto:sage [2009/02/21(土) 00:44:54 ID:???]
>>167
addslashesも大間違い

169 名前:nobodyさん mailto:sage [2009/02/21(土) 01:19:11 ID:???]
mysql_escape_string



170 名前:nobodyさん mailto:sage [2009/02/21(土) 01:34:53 ID:???]
>>169
それも%とかをエスケープできないので間違い
mysql_real_escape_string

171 名前:nobodyさん mailto:sage [2009/02/21(土) 01:47:18 ID:???]
可能な場合常にプレースホルダを使う、でFAだろ
クエリの9割以上はカバーできるはずだ

172 名前:nobodyさん mailto:sage [2009/02/21(土) 02:05:10 ID:???]
めんどいから ' と ; は削っちゃえ

173 名前:nobodyさん mailto:sage [2009/02/21(土) 02:17:42 ID:???]
mysql_escape_stringって%エスケープしないのか
ありえねーな
likeを使ってなかったらだいじょうぶ?

174 名前:nobodyさん [2009/02/21(土) 02:35:53 ID:60WB0UqA]
addslashesじゃだめなの?
ある本にmysql_escape_stringより良いって書いてあったのに、早いって。。
純朴な素人をバカにしやがって

175 名前:nobodyさん mailto:sage [2009/02/21(土) 02:37:42 ID:???]
お前は何を言ってるんだ
本にWebに書いてあることを鵜呑みにすることが「勉強」じゃないぞ?

176 名前:nobodyさん mailto:sage [2009/02/21(土) 02:44:35 ID:???]
何ぬかしてる、mysql_real_escape_string() は非推奨の mysql_escape_string() と機能は同じ
だいたいこの関数はSQLステートメントとして成立する文字列リテラルを作るためのものだ
%を勝手に殺したりする用途に使うもんじゃない

177 名前:nobodyさん mailto:sage [2009/02/21(土) 02:45:52 ID:???]
%殺されちゃたまらないな。しかも%なんてSQLインジェクションには使えないだろ
エスケープする必要ない

178 名前:nobodyさん mailto:sage [2009/02/21(土) 02:46:31 ID:???]
PDOで解決

179 名前:176 mailto:sage [2009/02/21(土) 02:46:46 ID:???]
悪いアンカーが抜けていた
>>176>>170,173へのレス



180 名前:nobodyさん [2009/02/21(土) 02:49:17 ID:RWcdEiGu]
phpでhtmlのinputのtype="text"でreadonly='true'して
printしているのですが、これってもしreadonlyに対応していない
ブラウザとかだったら変更可能ですかね?ブラウザとか関係なく、
もし確実じゃなければ、それに代わる確実な方法を実現したいのですが
何か方法があれば教えてください。

181 名前:nobodyさん mailto:sage [2009/02/21(土) 02:58:27 ID:???]
>>180
変更されてはならないものはクライアントに持たせない
セッション変数なりストレージなりに保持しておく

182 名前:nobodyさん mailto:sage [2009/02/21(土) 05:32:46 ID:???]
>>118
phpにおけるexitは強制終了。
それに続くタグとかは、一切実行も表示もされない。

183 名前:nobodyさん mailto:sage [2009/02/21(土) 12:05:11 ID:???]
>180
そもそも、ブラウザなんぞ無くともデータは送受信可能だ。
HTTPなんて、テキストデータを送受信してるだけだからな。
クライアントに渡した全ての値は改竄され得るし、クライアントから送信される値は全て信用ならない。
input type="select"の中に、選択肢にない文字列が入ってくるなんてのはよくある事だ。

184 名前:nobodyさん mailto:sage [2009/02/21(土) 12:05:51 ID:???]
<select><option>だったか。まあいいや。

185 名前:nobodyさん mailto:sage [2009/02/21(土) 13:04:41 ID:???]
ちょっと気になったんだが、>>165が書いている方法も

SELECT * FROM test WHERE name='".htmlspecialchars($_POST["name"],ENTQUOTES)."'

としていれば大丈夫なんじゃないのか?
「%」の件もlike使わなければいいわけだし。
like使う用途って「検索」が多いだろうから、表示されても良いデータだろうし。

186 名前:nobodyさん mailto:sage [2009/02/21(土) 13:10:29 ID:???]
>>183
>選択肢にない文字列が入ってくる

てっきりvalueにテキストを挿入してるかと思ったwwww

187 名前:nobodyさん mailto:sage [2009/02/21(土) 13:10:58 ID:???]
>>185
そのセンス、感服するわ。
htmlspecialcharsで変換される文字君たちは検索にかからなくなるわけだが、
SQLにlikeを使わなきゃいいって制約を追加するわけだが、

188 名前:nobodyさん mailto:sage [2009/02/21(土) 13:14:04 ID:???]
なんでそこまでしてhtmlspecialcharsに拘るのかが理解できない。
mysqlなら何も考えずmysql_real_excape_stringが一番安全確実簡単だろ。
htmlspecialchars使うと、<や>、&のような文字が全部変換されてDBに入力されてしまう。
検索なら対象がうまくヒットしなくなるし、画面表示文字列だとエスケープ/アンエスケープのタイミングを考慮しないといけない。
DBからCSVに書き出したくなったらどう変換すればいいんだ?JavaScriptに渡す時は?

mlsql_real以下略なら、入力データはそのままの形でDBに格納されるし、そのままの形で検索される。この上なく分かりやすい。

189 名前:nobodyさん mailto:sage [2009/02/21(土) 13:16:13 ID:???]
>>187
うん?クラスの処理とかすべて書けば良かったか?
単純かしたことに「こいつ馬鹿だwww」と感服したのかもしれないが。

そもそも、出力する時もフィールド指定するだろ。
だから、like使ってもパスワードが漏れないよな。
全件出力されるとか書いてたけど、普通limit指定するし。

>htmlspecialcharsで変換される文字君たちは検索にかからなくなるわけだが
かからなくていいんじゃないか?検索させない場合は、変換入れるだろうが。



190 名前:nobodyさん mailto:sage [2009/02/21(土) 13:16:27 ID:???]
未だにDBで何をエスケープしておけばいいかわからないやつ多いよな。

基本的には「'」と「\」だけでいいんだぜ

191 名前:nobodyさん mailto:sage [2009/02/21(土) 13:19:03 ID:???]
>>188
「そのままの形で格納されると困る」んだよ。

お前、WEBアプリケーション作ったことあるか?
または、会員制サイト作って誰かに利用させたことあるか?

その際、htmlspecialcharsで変換されない文字があるとどうなるかわかるだろ。
それに、htmlspecialcharsだけでも、CSV出力やJavascript(AJAX)の利用は出来る。

192 名前:nobodyさん mailto:sage [2009/02/21(土) 13:25:16 ID:???]
>>189
おいおい、
記事中から、bread&butterって検索したくてもできないじゃないか。

193 名前:nobodyさん mailto:sage [2009/02/21(土) 13:26:33 ID:???]
zend server
人柱だれかよろ
ttp://sourceforge.jp/magazine/09/02/19/2316221

194 名前:nobodyさん mailto:sage [2009/02/21(土) 13:27:24 ID:???]
>>191が作ったWebアプリケーションは穴だらけ、バグだらけだろうなぁ。
ご愁傷様

195 名前:nobodyさん mailto:sage [2009/02/21(土) 13:27:36 ID:???]
Zendワロタwwwwwwwww
よく開発続けられるよなwwwww不人気なのにwwwwwww

196 名前:nobodyさん mailto:sage [2009/02/21(土) 13:29:18 ID:???]
htmlspecialcharsをDBアクセスで使用するバカ
後輩とかに指摘されて恥かくまでずっとやってろ

197 名前:nobodyさん mailto:sage [2009/02/21(土) 13:30:31 ID:???]
俺はforeachのことを「フォレーチ」って読んでた
先輩は「フォー・イーチ」って読んでた

別に恥ずかしくないんだからねっ!これからも「フォレーチ」って読むわ

198 名前:nobodyさん mailto:sage [2009/02/21(土) 13:32:44 ID:???]
>>191
なぁ、ちょっと確認していいか?
入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
おまえこの流れは理解してるってことでいいんだよな?



199 名前:nobodyさん mailto:sage [2009/02/21(土) 13:34:46 ID:???]
xamppに代わる開発環境になるかな?



200 名前:nobodyさん mailto:sage [2009/02/21(土) 13:35:45 ID:???]
>>199
ネーミングが悪かったかもしれない
XAMPPは初心者もなじみやすい名前だから、暫くはそっちが流行ると思うな

201 名前:nobodyさん mailto:sage [2009/02/21(土) 13:36:24 ID:???]
>191
会員制の課金の発生する、バックエンドでCSVとTSVでレポートを吐くwebアプリを仕事で書いてるが、
・DBに渡す際にPDOのプレースホルダで渡す、あるいはmysql_real_escape_stringなどでクエリを構成する
・画面表示する際にはビューに渡す時点で原則全ての値をhtmlspecialcharsでエスケープ
 (タグを書き出さないといけない箇所や、HTML以外の箇所などの例外は慎重に検討したうえでエスケープせず渡す)
・DBには、例えばフォームからの入力なら入力値がそのままの形で格納される
このルールが一番分かりやすいし、安全だし、汎用性がある。

出力部で「この文字列はDBから来た値だからhtmlspecialcharsは不要、こっちはクライアントからの入力値だから必須…」とかやってると、絶対変換ミスが発生する。
何も考えずルールにさえ従ってさえいれば脆弱性が発生しない事をシステムが担保してくれる形にするのが一番安全なんだよ。
俺はMySQLでの危険文字を全て列挙すら出来ない低能だし、職場には俺以下の屑が溢れているが、このルールに従う限り絶対安全だとシステム側で保障できるコードを組める。

202 名前:nobodyさん mailto:sage [2009/02/21(土) 13:41:28 ID:???]
>>198
してるわけないだろ。関数の使いどころすらわかってないんだから

203 名前:nobodyさん mailto:sage [2009/02/21(土) 13:41:54 ID:???]
>>201
それでOKなんだけど、>>191はフィルターやバリデーターとDB登録時のエスケープを混同してるらしいからw

204 名前:nobodyさん mailto:sage [2009/02/21(土) 14:03:40 ID:???]

俺が使ってるサービスで
↓を混同してるプログラマがコード書いてませんように・・・

・DB入力時(SQLインジェクション)
・画面出力時(Scriptインジェクション)


205 名前:nobodyさん mailto:sage [2009/02/21(土) 14:14:16 ID:???]
>>193
雑談はネタ不足気味な雑談スレで。
pc11.2ch.net/test/read.cgi/php/1200314111/


206 名前:nobodyさん mailto:sage [2009/02/21(土) 14:20:49 ID:???]
>>198
ああ。実際に>>201が書いているようなことはしているよ。
例として>>185みたいな簡単な1行ソース出したから
「こいつ何も知らない馬鹿だなwww」と煽りたい気持ちも分かる。
だが、1から10までここに書けないだろ。

入力時、出力時にそれぞれ適切に変換するのは、初歩中の初歩だと思う。
201がああだこうだ書いてるが、俺は自作クラス作ってDB処理をしているから
変換ミスがどうのこうのはない。

ま、そういう自分の事はどうでも良くて、>>185の意見を出しただけなんだが
なぜか俺自身を煽りたい馬鹿がいるな。そんな事しても無駄だろ

207 名前:nobodyさん mailto:sage [2009/02/21(土) 14:22:00 ID:???]
>>185みたいなコードが出てくる時点でお前が一番馬鹿だよ

208 名前:nobodyさん mailto:sage [2009/02/21(土) 14:26:20 ID:???]
>>207
>だが、1から10までここに書けないだろ。

ちゃんと読めよ・・・わかりやすいように簡単に書いたって言ってるだろ

それに、htmlspecialcharsで変換しないでそのまま格納したとする
その場合、phpMyAdminなどで管理する時。どうなるかわかるよな?

209 名前:nobodyさん mailto:sage [2009/02/21(土) 14:27:37 ID:???]
>>208
こんだけ書かれてまだわかんないのか。
そこでhtmlspecialcharsはおかしいってことだろ。
代わりに何を使うべきか考えてみろ



210 名前:nobodyさん mailto:sage [2009/02/21(土) 14:28:10 ID:???]
>>206
荒れるだけだから黙っててくれ。

211 名前:nobodyさん mailto:sage [2009/02/21(土) 14:28:10 ID:???]
>>185>>191みたいなこと書いてたら馬鹿にされるのあたりまえだろ
>>206が仕事ではなく趣味でPHPいじってるだけであることを祈る

212 名前:nobodyさん mailto:sage [2009/02/21(土) 14:28:18 ID:???]
>>208
うん、あれはhtmlspecialcharsで変換されて出力されるね
ってかphpMyAdminなんか使ってるのかよ

213 名前:nobodyさん mailto:sage [2009/02/21(土) 14:28:48 ID:???]
>>209
わかる・わかんないの、俺に対しての批判はどうでも良いんだよ。
「なぜhtmlspecialcharsは駄目なんだ」って事だ



214 名前:nobodyさん mailto:sage [2009/02/21(土) 14:29:08 ID:???]
>>208
phpMyAdminをなめてんの?
別にスクリプトが混入したって何もおきないよ。
もし、そこでスクリプトインジェクションされんならIPA行きだお

215 名前:nobodyさん mailto:sage [2009/02/21(土) 14:30:21 ID:???]
>>213
> 「なぜhtmlspecialcharsは駄目なんだ」
既出

216 名前:nobodyさん mailto:sage [2009/02/21(土) 14:30:27 ID:???]
お前ら、自分の視野で物事考えすぎだよ。

「phpMyAdminなんて使ってるの?」って言葉がここで出てくると思わなかったぜw
ここのスレの役割考えろや。どうせ個人叩きしかできないくせに。

217 名前:nobodyさん mailto:sage [2009/02/21(土) 14:30:31 ID:???]
>>208
全部わかったうえで一部分だけ簡単に書いてます、って言ってるやつの文章じゃないよそれ
結局DB格納時にhtmlspecialchars使ってるんじゃん

218 名前:nobodyさん mailto:sage [2009/02/21(土) 14:31:22 ID:???]
>>216
phpMyAdmin → 画面出力時のお話

SQLインジェクションからかけ離れてきました・・・

219 名前:nobodyさん mailto:sage [2009/02/21(土) 14:32:07 ID:???]
>>206
> 俺は自作クラス作ってDB処理をしているから変換ミスがどうのこうのはない。
変換とか言ってる段階で、その自作クラスが穴だらけに1000カノッサ



220 名前:nobodyさん mailto:sage [2009/02/21(土) 14:36:47 ID:???]
> それに、htmlspecialcharsで変換しないでそのまま格納したとする
> その場合、phpMyAdminなどで管理する時。どうなるかわかるよな?

phpMyAdminは出力時サニタイズをすっかり忘れてる、ってこと?

221 名前:nobodyさん mailto:sage [2009/02/21(土) 14:38:07 ID:???]
サニタイズってトイレにでも行く気?

222 名前:nobodyさん mailto:sage [2009/02/21(土) 14:38:47 ID:???]
>>185
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES

223 名前:nobodyさん mailto:sage [2009/02/21(土) 14:40:08 ID:???]
おまえらとどめは刺さないよなww

224 名前:nobodyさん mailto:sage [2009/02/21(土) 14:40:18 ID:???]
>>219
>>201が「俺はMySQLでの危険文字を全て列挙すら出来ない低能」と
言ってる意味を理解できていない、に1000カノッサ上乗せ

225 名前:nobodyさん mailto:sage [2009/02/21(土) 14:46:08 ID:???]
>>185
語る以前にエラーになる件

226 名前:nobodyさん mailto:sage [2009/02/21(土) 15:07:41 ID:???]
↓アクセスするとGoogleに飛ぶんですがどういう仕組みですか?
www.yahoo.xxco.jp/

227 名前:nobodyさん mailto:sage [2009/02/21(土) 15:11:56 ID:???]
%はあんまり伝わらなかったみたいだなー。
SQLとHTMLでは、特殊な扱いになる文字が違うよってことだけど。

htmlspecialchar()でも問題なく見えるのは、たまたま、だと思ったほうがいいよ。
偶然にも、置き換え対象になる文字がSQLでエスケープが必要な文字と同じだったってこと。

ついでに言えば、エスケープの仕方は実際はDB依存だから
addslashes()じゃなく、DB専用の関数を使ったほうがいい。


228 名前:nobodyさん mailto:sage [2009/02/21(土) 15:13:44 ID:???]
>>160 からの流れ、断ち切っておくか・・・

・DBに渡す際にPDOのプレースホルダで渡す、または専用関数(mysql_real_escape_string)でクエリを構成。
・html出力時にhtmlspecialchars(,ENT_QUOTES)をする。

※DBに渡す際にhtmlspecialcharsするのは間違い。
→ 理由 >>188
→ それでも分からない。 >>163の本を読め。


229 名前:nobodyさん mailto:sage [2009/02/21(土) 15:18:48 ID:???]
>>226
GET / HTTP/1.1
Host: www.yahoo.xxco.jp
(略)

HTTP/1.x 302 Found
Date: Sat, 21 Feb 2009 06:15:31 GMT
Server: Apache/2.2.9 (Fedora)
X-Powered-By: PHP/5.2.6
Location: www.google.co.jp/
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8




230 名前:nobodyさん mailto:sage [2009/02/21(土) 16:10:53 ID:???]
素人だけど、俺より酷いプロらしき人が入るのを見て安心したような不安になったような…

231 名前:nobodyさん mailto:sage [2009/02/21(土) 16:11:49 ID:???]
>>226
xxco.jpの管理人が、
www.yahooo.xxco.jpへアクセスした場合に
「Location: www.google.co.jp/」へリダイレクト(302)するようにしているだけ。

<?php
header('Location: www.google.co.jp/', True, 302);
?>

232 名前:nobodyさん mailto:sage [2009/02/21(土) 16:25:04 ID:???]
>>231
サンクス
xxcoってドメインか

233 名前:nobodyさん mailto:sage [2009/02/21(土) 16:35:25 ID:???]
べ・・・別に!
僕レンタルサーバー使ってるからね!
エスケープしなくても安全よっ!

234 名前:nobodyさん [2009/02/21(土) 19:59:23 ID:230PJjNE]
【OS名】MacOS X (MAMP)
【PHPのバージョン】php5.2.5
【連携ソフトウェア】mysql
【質問内容】
Webアプリケーションで、ウィンドウ毎に違う情報を引き継いで処理をしていく物を作っています。
uniqid()でセッションIDを割り振って、formのhiddenに入れると引き継げるのは分かりました。
しかしこれだと、link(aタグ)で機能を選択した場合に、セッションIDが引き継げないように
思います。ですよね??何か良い方法はありませんか?
リンクのパラメータに追加するとなると、全部のリンクに書き足す必要があって大変だし、
POSTとGETの両方の評価が必要になると煩雑だし、そもそもurlにセッションIDを出すのが
微妙に避けたいので・・・。
お知恵を拝借したいです。よろしくお願いいたします。

235 名前:教えて [2009/02/21(土) 20:15:36 ID:1h/i9qY8]
これだと1回で20数全部でます。1回1数でかぶらずに20回出したです。
<?php
$numbers = range(1, 20);
shuffle($numbers);
for($i = 0; $i < 20; $i++) {
echo $numbers[$i]."<br>\n";
}
?>

236 名前:nobodyさん mailto:sage [2009/02/21(土) 20:16:32 ID:???]
ふつうセッションIDはCOOKIEで渡す
ケータイの場合はGET渡ししかない

237 名前:nobodyさん mailto:sage [2009/02/21(土) 20:17:25 ID:???]
>>235
出したんなら良かったな

238 名前:nobodyさん mailto:sage [2009/02/21(土) 20:21:23 ID:???]
モバゲーで鳴らした俺はこの程度の日本語崩壊くらいなんて事は無い
モバゲーではこの程度の言語障害者珍しくも無い
マジ日本はどこへ向かうんだ

$numbers = range(1, 20);
shuffle($numbers);

echo array_pop($number);
// なんか処理
echo array_pop($number);
// なんか処理
echo array_pop($number);

1ページ内の処理ならこれでいける。
2枚以上の画面にわたって変数を持って行きたいならセッションを使うしかない。

239 名前:234 [2009/02/21(土) 20:33:28 ID:230PJjNE]
>>236
COOKIEですか・・・ちょっと調べてみます。ありがとうございます。
クライアントはパソコンなので、GETでもPOSTでも使えます。
COOKIEでもウィンドウ毎って可能なんですか?



240 名前:nobodyさん mailto:sage [2009/02/21(土) 20:38:24 ID:???]
>>239
パソコンならhiddenを使う必要ない。セッションはクッキーが勝手に確立してくれる
GETやらPOSTも意識する必要ない。セッションに少し慣れればすべて解決する

別ウインドウのことを言ってるのだとしても
リンクやフォームから作成された別ウインドウは同一セッションとなる

241 名前:234 mailto:sage [2009/02/21(土) 20:51:05 ID:???]
>>240
同一セッションでは困るんですが・・・ウィンドウ毎に分けたいので・・・

242 名前:nobodyさん mailto:sage [2009/02/21(土) 20:54:07 ID:???]
>>241
であればウインドウごとにID発行してそれをセッションで持ちまわす

243 名前:242 mailto:sage [2009/02/21(土) 20:58:18 ID:???]
ごめん、うそついた
同一セッションで別ID発行してもセッションが上書きされるだけだからダメか

244 名前:nobodyさん mailto:age [2009/02/21(土) 20:59:36 ID:???]
入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
で質問。
入力->フィルター->エスケープ->DB -> 取り出し->
ここまではわかるが。
その後なんでまたフィルタにかけるの?
while文でたとえば
<? while ( $item = mysql_fetch_array( $result ) ) { ?>
<tr>
<td><?= $item['item_id'] ?><?= $item['item_id2'] ?></td>
<td><?= $item['item_name'] ?></td>
<td><?= $item['author_name'] ?></td>
<td><?= $item['publisher_name'] ?></td>
<td><?= date( 'Y年m月d日', strtotime( $item['release_date'] ) ) ?></td>
<td><?= $item['list_price'] ?></td>
<td><?= $item['sale_price'] ?></td>
<td><?= get_category_name( $link, $item['category_id'] ) ?></td>
<td><?= $item['quantity'] ?></td>
<td><?= $item['state'] ?></td>
<td>
<nobr>[<a href="admin_edit_item.php?item_id=<?= $item['item_id'] ?>">編集</a>]</nobr>
<nobr>[<a href="admin_del_item1.php?item_id=<?= $item['item_id'] ?>" onClick="return confirm( '完全に削除されます。よろしいですか?' )">削除</a>]</nobr>
</td>
<? $n ++; } ?>
でまわしてはいかんのかね?


245 名前:nobodyさん mailto:sage [2009/02/21(土) 21:09:52 ID:???]
>>244
俺も取り出しのあとのフィルターってのはよくわからん
DBには正しいものが入ってるはずだしな
でもhtml適合化は必要だろ。そのコードだとScript実行されるよ

246 名前:234 mailto:sage [2009/02/21(土) 21:10:06 ID:???]
>>243
そうなんです。>234の様にformかurlに入れれば、
とりあえずウィンドウ毎に別の情報を引き継げます。
だけど、formとurlの両立が難しい。
何か、簡単にウィンドウ毎を識別する方法があれば・・・

247 名前:244です。 mailto:sage [2009/02/21(土) 21:15:34 ID:???]
htmlspecialcharsか

248 名前:nobodyさん mailto:sage [2009/02/21(土) 21:17:49 ID:???]
>234
まったく同一のページを2ウィンドウ開くのならば、URLかPOST値にセッション情報を含めないとダメだな。
手を抜くならセッションキーGET渡しで
・Smarty使ってるならポストフィルタで全サイト内リンクにセッションキーを追加する
・JavaScript経由で全リンクをセッションキー付きに書き換える
辺りか。

リンクを書き換えないなら、複数ウィンドウシステムに入った時点で
index.php/hogehoge/
index.php/fugafuga/
のような固有URLを割り振り、これをセッションキーにするのも手。
index.php/hogehoge/menu から <a href="./information">で
index.php/hogehoge/information に遷移させられるから記述が多少楽になる。
ただし、セッション情報がリクエストヘッダでだだ漏れだし、外部リンクに気を払う必要も出てくる(REFERERで漏れる)。

249 名前:nobodyさん mailto:sage [2009/02/21(土) 21:20:12 ID:???]
>>244
>入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
どこにそんなことが書いてある?

入力 -> エスケープ -> DB -> 取り出し -> サニタイズ -> 表示
これでいい



250 名前:nobodyさん mailto:sage [2009/02/21(土) 21:26:33 ID:???]
>>249
サニタイズってのは、入力値に不正な値や壊れた文字列が入っていないかをチェックするもの。
やるなら、入力の直後だが、サニタイズって言うと、>>249みたいな誤解をするやつがいるから、
入力後にやるのが、バリデート+フィルター。

251 名前:nobodyさん mailto:sage [2009/02/21(土) 21:28:51 ID:???]
DBからの取り出し後にフィルターを書ける理由
DBってのはデータストア。
収録されたデータをすべて出力していいとは限らないし、
形式によってはフィルターをかける必要がある。jk

252 名前:nobodyさん mailto:sage [2009/02/21(土) 21:33:13 ID:???]
>>250
入力段階でチェックするのはvalidate
sanitizeは表示段階で、浄化、つまり悪意のあるスクリプトやタグを無効にするもの

253 名前:nobodyさん mailto:sage [2009/02/21(土) 21:43:54 ID:???]
フィルターって要するにバリデートだろ。
エスケープやサニタイズとは別の話題。

254 名前:nobodyさん mailto:sage [2009/02/21(土) 21:44:23 ID:???]
>>252
まぁ、そう思っててもいいけどな。
それは、htmlspecialcharsをサニタイズだと思っている子たちの誤解
悪意と善意を確実に識別できるのはどこかを考えれば正解はどっちかわかるはずだが、
困ったことに、サニタイズ≒出力フィルタだと書いちまってるサイトやら本があるからなぁ。

要するに、サニタイズなんて曖昧なメタファーでプログラムを語るなってことだ。

255 名前:nobodyさん mailto:sage [2009/02/21(土) 21:45:32 ID:???]
>>253
バリデートはフィルターに含まれる。
エスケープとは別。
で、何が言いたいの?

256 名前:nobodyさん mailto:sage [2009/02/21(土) 21:46:05 ID:???]
>>251
具体的にどういうデータだったらそのフィルターとやらをかけるの?放送禁止用語とか?

257 名前:nobodyさん mailto:sage [2009/02/21(土) 21:47:37 ID:???]
>>254
htmlspecialcharsもサニタイズの一種だろ。話を難しくしすぎ

258 名前:234 mailto:sage [2009/02/21(土) 21:48:33 ID:???]
>>248
そうですよね。ありがとうございます。
固有URLの実装方法は分かりませんし、
そもそもフレームワークにCakePHPを使うので、そういうURLなのです。
リンクじゃなくて、全てformのボタンにするのも手ですかねぇ・・・。


259 名前:nobodyさん mailto:sage [2009/02/21(土) 21:49:18 ID:???]
>>256
放禁みたいなNGフィルター、SNS用の権限フィルター
多端末対策で文字コード変換フィルター
スクリプト許可端末、スクリプト拒否端末用の変換フィルター
タグ許可・不許可
まぁ、なんでもいいでしょ



260 名前:nobodyさん mailto:sage [2009/02/21(土) 22:00:32 ID:???]
バリデート
 検証。入力値などに問題が無いかをチェックする(チェックした後どうするかは知らない)。
フィルタ
 入力値をチェックし、ヤバいものは除去する、ないし弾く(エラーにする、無視する)。
サニタイズ
 消毒。転じて無害化。害の無いものにする。変換・置換など無害化の方法は多数あるが。。
エスケープ
 ある環境で特殊な意味を持つ値(HTMLならば<など)を、その環境のルールで規定された別の表現(<)に置き換える。
 ダブルクォート中で"の前にバックスラッシュを置くのもエスケープ。

どれがベストかというと、どの表現も曖昧さが残るので使うべきではない。
DBへの入力の無害化処理と、HTML出力への無害化処理は違うし、無害化の方法も1通りではない。
設計初期などで抽象度を残した表現をしたい時くらいしか使わないな。
>259は文脈を意図的に曲解した例。

261 名前:nobodyさん mailto:sage [2009/02/21(土) 22:01:28 ID:???]
>>257
htmlspecialchars=html適合化っていう具体的かつ正確な言葉があるのに、
曖昧かつ誤解に満ちて見解が分かれるサニタイズなんて言葉にする必要はないだろ。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<104KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef