PHP質問・雑談スレ6【初心者お断り(ROM歓迎)】
■ このスレッドは過去ログ倉庫に格納されています
PHPに関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。
PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
https://mevius.5ch.net/tech/ (【PHP】で板内を検索)
前スレ
https://medaka.5ch.net/test/read.cgi/php/1538639036/
その他リンク
・PHPマニュアル
https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
https://ideone.com/
・プログラミングのお題スレ (求PHPer参戦)
https://mevius.5ch.net/tech/ (お題スレで板内を検索)
このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
(FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼
このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
(HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造 最近ちんぽがかゆいです。
パンツを脱いでちんぽを調べてみたら
尿道のところに細い糸のようなものがくっついていました。
糸を取ろうと思って指を近づけてみたら
糸がうねうね動きながら尿道の中に消えていきました。
・・・・僕のちんぽは蟲に乗っ取られました。 サーバーサイドPHPなんですが
HTTPレスポンスヘッダでheader関数を使って
Content-Type: text/html; charset=UTF-8
のように文字コードまで送信しておくのがセキュリティ上好ましいという話を良く聞きますが
PHP7.2で試すと上記のヘッダーを送信しなくても自動で送信されてるんですよね
文字コードの指定まで完璧に
最近のバージョンでこうなったんでしょうか?
それと文字コードはUTF-8固定なんですかね、あるいはphp.iniのdefault_charsetから得ているのでしょうか
どうも公式マニュアルにこのあたりの情報がないのですが、わかる方教えてください 前半はよく知らんけど、後半はマニュアルに書いてある。
https://www.php.net/manual/ja/ini.core.php
default_charset 確認してみ。 >>4
レスありがとうございます
default_charsetの方に説明がありましたか
見落としてました
default_charsetがちゃんと設定されていれば
header()でConten-Typeを送信しなくても良さそうですね
もちろんtext/htmlのときだけですが そんなところで時間使うのもったいない
フレームワーク使ってそんな些細なところはすっ飛ばせ >>7
firefoxやchromeでそういうプラグインあると楽しいよね あんまり楽しくない・・・これ以上ややこしくするんじゃない・・・ HTTPレスポンスヘッダの文字コードって何かセキュリティに効果あるんか?
レスポンスがどうだろうと、ユーザーが別の文字コードにエンコードしたら意味無いだろ?
異なる文字コードでフォーム送信してきたデータをうまく処理する仕組みがなければ
セキュリティリスクは変わらないと思うんだが。
まぁ意図してやらなきゃ発生しないって意味ではセキュリティ上好ましいって言えるのか? 文字エンコーディングが曖昧だとブラウザが文字エンコーディングを
自動判別してしまう場合がある
そのとき、サーバー側が意図した文字エンコーディングとは違うものがブラウザで
採用されてしまった場合、サーバー側が意図していないメタ文字などが浮かび上がって
しまう場合がある
こういう解釈を俺はしている サーバ、クライアント、どちらからどちらに文字列を送るかよくわからないけど、嘘ついたら希望の処理をしない ブラウザ側が容易に文字コードを指定できる以上、
ヘッダを指定しようと、美乳入れようと、おまじない以上の価値しか無い
セキュリティ向上には繋がらない
セキュリティとしてはどのような文字コードでフォーム送信してきても
上手く処理できる仕組みでなければリスクは残る
例えばUTF-7なら、<>や"を記述せず表すことが出来る。それを鵜呑みにして通過させたらえらい事になる。
そういうのを回避する為、PHPでは親切なことにhtmlspecialcharsという素敵な関数が用意されている。
これを通していれば文字コード関連はまず問題ない。
ヘッダで文字コード指定するより、入力にhtmlspecialcharsしておくほうがセキュリティ的には大切だ。 >>10
CGM とかのユーザ投稿を許容するサイトで、もし任意の charset 指定ができてしまうと、文字のバケ具合によってはエスケープされてない記号が生きる可能性が出てくる。
結果書き込み内容によっては XSS とかができるようになって困ってしまう。 >>18
任意の文字コードは誰でも出来るだろ
何でブラウザ側にある情報を任意に指定できないと思ってるんだ?
chromeだとこれ入れれば出来る
https://chrome.google.com/webstore/detail/set-character-encoding/bpojelgakakmcfmjfilgdlmhefphglae
ブラウザ側の文字コードが何であってもサーバー側の都合のいい様にエスケープするのがhtmlspecialcharsだろ htmlspcialcharsでエスケープした後の文字列を、別の文字エンコーディングで解釈すれば
htmlspecialcharsの効果なんてないんだよ
htmlspecialcharsでの対策と、Content-Typeにおける文字エンコーディング指定は
それぞれ別の攻撃に対する対応なんだよ
徳丸本くらいは読んだ方がいい サーバーに対するセキュリティというより、
サーバーを使うユーザーに対するセキュリティだな PostgreSQLってPHPでまともに動くの?
接続処理にプロセスのフォークが使われてて
スレッドを使うMySQLより重いと聞いた
コネクションプールはリクエストの度に毎回環境を捨てるphpでは使えないし 10〜15年前ぐらいにタイムスリップしたのかと思ったわ マルチプロセスなのは変わってなくない?MySQLよりも重たいのは確かにある。コネクションプールもPHPじゃダメだよね。
使い物にならないってことは100%ありえないけど。なんならPostgreSQLのほうが得意な分野もあるし。 ■ このスレッドは過去ログ倉庫に格納されています