- 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を表示させること。 ・解決しなくても回答をもらった場合はお礼を言うこと。 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。) ◆回答者への注意 ・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
- 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適合化っていう具体的かつ正確な言葉があるのに、 曖昧かつ誤解に満ちて見解が分かれるサニタイズなんて言葉にする必要はないだろ。
- 262 名前:nobodyさん mailto:sage [2009/02/21(土) 22:01:39 ID:???]
- 俺だせえ。
> 別の表現(<)に置き換える。 な。
- 263 名前:nobodyさん mailto:sage [2009/02/21(土) 22:05:41 ID:???]
- >>260
> ダブルクォート中で"の前にバックスラッシュを置くのもエスケープ PHPとかJSならエスケープだが、HTML中でこれができると思ってしまう奴もいるらしいからな。 HTML出力時にaddslashesするやつとか、 DBに入れる前にhtmlspecialcharsする奴とか、 入力時に両方処理する奴とか、 ほんと、ウンコだな
- 264 名前:nobodyさん mailto:sage [2009/02/21(土) 23:03:26 ID:???]
- >>263
自分のこといってるんですね わかります。
- 265 名前:nobodyさん mailto:sage [2009/02/21(土) 23:17:26 ID:???]
- >>263はうんこ
- 266 名前:nobodyさん mailto:sage [2009/02/21(土) 23:33:28 ID:???]
- ほんと、ウンコだな
- 267 名前:nobodyさん mailto:sage [2009/02/21(土) 23:47:51 ID:???]
- 叩かれる理由のない>>263を叩いてるのは
昼にhtmlspecialcharsの件で叩かれてたやつだろ
- 268 名前:nobodyさん mailto:sage [2009/02/21(土) 23:49:41 ID:???]
- >>263はうんこ
- 269 名前:nobodyさん mailto:sage [2009/02/22(日) 00:00:19 ID:???]
- >263
良く分からないけどやーいやーいうんこうんこー
- 270 名前:nobodyさん mailto:sage [2009/02/22(日) 00:13:17 ID:???]
- うんこを馬鹿にしたやつ全員明日から便秘に悩む。
- 271 名前:nobodyさん [2009/02/22(日) 00:31:09 ID:bY3v8MvV]
- >>270
のせいで、便秘ではないがうんこが止まらない。 この1時間で4回うんこにいっている
- 272 名前:nobodyさん mailto:sage [2009/02/22(日) 00:34:34 ID:???]
- <?=str_repeat( 'うんこ', date('s') )?>
- 273 名前:234 [2009/02/22(日) 00:46:35 ID:JUr+Er3M]
- リンクやPOSTで受け取るデータの他に、元のページから送られてくるデータって
何か無いかな・・・って考えてたら・・・$_SERVER['HTTP_REFERER']が使え ないかなぁ?って思ったのですが。どうでしょうか? 例えばheaderのmetaとかでreferer urlを変更して、セッションIDを追加したり とか出来ないでしょうか。 他にも、何か使えそうなデータって無いでしょうか?
- 274 名前:nobodyさん mailto:sage [2009/02/22(日) 01:01:49 ID:???]
- >>273
refererは自由に変えられるし、飛ばさないブラウザもあるし信用ならないよ まず別セッションにしたい理由がわからん ユーザーに複数セッションを使わせたいという状況は想像できないし 自分が複数セッション使いたいならブラウザもうひとつ立ち上げればよいだけ
- 275 名前:234 [2009/02/22(日) 01:27:54 ID:JUr+Er3M]
- >>274
refererが信用ならないのはおっしゃる通りです。ご指摘ありがとうございます。 リファラ出さないブラウザは対象外って事で良いのです。 複数セッションを使うために、別のブラウザを立ち上げれば済むのもご指摘通り。 自分だけで使うなら、その方が簡単なのですが。 例を挙げると、ウィンドウ1つに一人分の情報を表示/編集できる、マルチ・ ウィンドウの住所録ソフトみたいなものを想定しています。 ウィンドウ毎に別セッションにしないと無理じゃないかと思いました。 他に、定石があるようでしたら教えて下さい。 よろしくお願いいたします。
- 276 名前:nobodyさん mailto:sage [2009/02/22(日) 02:04:13 ID:???]
- あなたがたは無職なのに
なんで質問に回答するときはえらそうな 態度なの?
- 277 名前:nobodyさん [2009/02/22(日) 03:06:25 ID:3nGhqmkB]
- SQLite3 + PDO で、
1つ目のプロセスがトランザクション張ってて、 2つ目のプロセスがトランザクション張ろうとして、 当然1が既にデーターベースをロックしてるから、 2はロックを取得できなくて、そんで SQLITE_BUSYが帰ってきて、 database is locked ってわかったとき、 しばらくsleepさせて、リトライ って処理、どうやって書けばいいの? どっかにサンプルコードある?
- 278 名前:nobodyさん mailto:sage [2009/02/22(日) 04:28:08 ID:???]
- >>277
そこまで分かってるならforなりでいくらでも書けそうだけど・・ 具体的にどこが分からないのよ
- 279 名前:nobodyさん mailto:sage [2009/02/22(日) 18:00:44 ID:???]
- 例えばtp://test.jp/とういうサイトで、
ユーザ登録(ユーザ名をuserで登録)して、ページを開設する ↓ tp://test.jp/user/ みたいに自分のページができる ↓ このページを誰もがある程度操作できる(お絵かき掲示板とか、ブログのコメ投稿とか) mixiなどのようにログインページがいらないので次回からこのページは tp://test.jp/user/が存在する限り、だれもがこのurlから訪問することができる。 みたいなサイトみて思ったのですが、 1./user/の部分は実際にサイトの鯖でuser専用のディレクトリやそこに.phpなどを作っているのでしょうか? 2.それとも、apacheだったらhttpd.confなんかで、 tp://test.jp/mypage.php?userid=user → tp://test.jp/user/ みたいな変換をしているのでしょうか? しかし2.の方法だと、userというページがあるかどうかをどうやって判断しているんでしょう・・ 適当に、userid=tekitouとかしてみたときに、tp://test.jp/tekitou/となってしまい、そのページが あるかないかの判断はいろんな方法でできると思うのですが、ユーザ登録が増えれば増えるほど その判断する速度は落ちるような気がしてしまうのです・・ そもそも2の時点で他の方法でユーザを管理しているかもしれません、 上のようなサイトの、ユーザ管理とその引き出しはどう管理しているのか、 大体でもいいので教えていただけないでしょうか よろしくお願いします
- 280 名前:278 [2009/02/22(日) 18:01:32 ID:euIhPE01]
- id
- 281 名前:nobodyさん mailto:sage [2009/02/22(日) 18:03:04 ID:???]
- >>279
今の主流は動的URLを性的URLに変化する example.com/user/→example.com/id=user DBにデータを保存しておいてページのIDで呼び出す
- 282 名前:nobodyさん [2009/02/22(日) 18:09:47 ID:euIhPE01]
- すいません>>280の名前は279でした
>>281 なるほど、DBを使ってユーザーのページに誰かが訪れるその度に 検索呼び出ししているということでしょうか。 なんかすっきりしましたありがとうございました
- 283 名前:nobodyさん mailto:sage [2009/02/22(日) 18:12:49 ID:???]
- >>282
ちなみに毎回DBから同じ情報ひっぱってくるのは負荷かかるから キャッシュを使ってるのが多いと思う (ここはまたSmartyとか覚えたときにやってみるといい)
- 284 名前:nobodyさん [2009/02/22(日) 18:16:29 ID:euIhPE01]
- >>283
Smartyですか、参考に調べてみます ありがとうございました!
- 285 名前:nobodyさん [2009/02/22(日) 21:21:50 ID:3nGhqmkB]
- >>278
while で書いたけど、 deadlockになるのです
|

|