- ベストアンサー
PHP初心者のためのフォームで動的な画像表示
- フォームの内容にしたがって画像を動的に出力する方法を学びます。
- セキュリティを考慮し、POST送信による動的な画像表示の方法を理解しましょう。
- 初心者にもわかりやすいコード例を交えて解説します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>> そもそも<img>としてbargraph.phpを表示させるやり方は問題ない・・・というか普通ですか? 非常によくある手法です。プログラマ側としては一番実装がラクになります。但し、アクセスの集中するサイトである場合、前の解答で述べたようにテンポラリファイルを生成したほうが負荷を緩和できたりすることも考えられます。 >> GET送信=よくないっていう偏見とURLの後ろにくっつけるのが綺麗じゃないと思っていたのでこういった質問になってしまいました。 FirefoxのLiveHTTPHeaderなどのアドオンを利用すれば、ノンプログラマな一般人の人でも任意のPOSTリクエストを送信出来てしまうため、GETであろうとPOSTであろうと入力の妥当性を検証すべきことには変わりありません。 確かにファイルの後ろにクエリを付加することは汚いように思うかもしれませんが、画像ファイルとして参照するだけならばこれでも問題はないでしょう。そこまで気にするならばそもそも画像を出力するファイルの拡張子を(見た目上)PHPから他に変更することから始まると思います。
その他の回答 (2)
結論から言うと、「bargraph.phpを画像として扱わせる」既存のソースコードでは実現できません。テンポラリファイルを生成するための書き換えが必要になり、一定時間経過したら削除する等のことも考えて手間が増えます。 「セキュリティのことを考えて」とありますが、これを表示させることでどんな脆弱性が発生するかどうかを十分に調べた上でのご質問でしょうか?XSS脆弱性を防ぐだけでは不十分ですか?
補足
再びありがとうございます。 そういうやり方はできないんですね。 一般的にどういう方法をとるのが普通なのかわからなかったので GET送信=よくない っていう偏見とURLの後ろにくっつけるのが綺麗じゃないと 思っていたのでこういった質問になってしまいました。 そもそも<img>としてbargraph.phpを表示させるやり方は問題ない ・・・というか普通ですか? 表示させるグラフ部分を直接同じファイルのソースに書き込むべきですか? たびたびすみませんお願いします。
URLエンコードすればXSS脆弱性は無くなります。手抜きでいいなら <img src="bargraph.php?a=<?=@urlencode($_POST['select_name1'])?>"> エラーも厳密に防ぎたいならば <?php $k = 'select_name1'; $a = isset($_POST[$k]) && is_string($_POST[$k]) ? $_POST[$k] : ''; $a = urlencode($a); ?> <img src="bargraph.php?a=<?=$a?>">
補足
回答ありがとうございます。 勉強になります。 URLの後ろに乗せない方法で画像を動的に表示したいです。
お礼
回答ありがとうございます。 聞きたいことがよくわかりました。 サイトの規模的にも今の方法に 最初に教えてもらったURLエンコードでいきたいと思います。 ありがとうございました。