質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1938閲覧

formから画像をアップロードしたときのリクエストメッセージにあるバイナリを文字化けせずに確認する方法はありますか?

7968

総合スコア253

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2017/04/13 10:06

編集2017/04/13 11:29

2017.04.13 追記
最初、画像はbase64なのかと思い、タイトルと本文にbase64と記載していましたが、バイナリと教えて頂いたので、タイトルは変更しました。
本文はそのままです。(勘違いしたまま)


タイトルには、私の憶測も入っているので、(なに言ってんだ..こいつ)となっているかと思いますので、順を追って説明します。

現在、PHPでファイルをアップロードする方法を調べております。

まずは、理解を深めるためにリクエストメッセージがどのようになるのか確認したいと考えております。

そのために、下記のファイルを作成し、XAMPP環境で試しました。
※確認用のため、脆弱性対策とか一切考えてません。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <p>Pictures: <input type="file" name="pictures"> <input type="submit" value="send"> </p> </form> <?php if(isset($_FILES['pictures'])) { $tmp = $_FILES['pictures']['tmp_name']; $dir = 'c:/xampp/htdocs/test/img/'; $filename = $_FILES['pictures']['name']; move_uploaded_file($tmp, $dir . $filename); echo "<img src='img/$filename'>"; } ?> </body> </html>

下記はFirefoxのコンソールでリクエストメッセージを確認した画像です。

イメージ説明

リクエストメッセージのボディ部分にある画像ファイル?が文字化け?しています。
私の勝手な憶測ですが、ここにはbase64などでエンコードされた画像のテキストが入っているのかと思います。

下記のような感じ?

/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABQAAD/4QMZaHR0 cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1 TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5z Om1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIw MTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDov L3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRp b24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8x LjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBl L1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkI2QTFGMTIzMUYzMTExRTc5Rjg3QTdDNjky 略

base64というのはメールがbase64だから、リクエストメッセージもbase64なのかなという勝手な推測です...

私の確認の仕方がに問題があるのかもしれませんが、Fiddlerでも該当箇所が文字化けしており、Chromeのデベロッパーツールでは該当箇所は表示されませんでした。

文字化けせずに確認できる方法があれば、教えてください((_ _ (´ω` )ペコ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

メールは本来テキストしか送れないので、base64のようにテキスト化して添付します。
httpはバイナリも送れるので、そのまま送ります。

「文字化けしないで確認する」というのは、リクエストを解析して画像として表示したいということですか?
なんのために?自分で送っているファイルなのに?

投稿2017/04/13 10:25

shi_ue

総合スコア4437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

7968

2017/04/13 11:03 編集

回答ありがとうございます。 なるほど、バイナリなんですね。 PHPにはMIMEタイプを確認する関数がいくつかあります。 その関数はどのようにMIMEタイプを判断しているのか調べていたところ、ファイルにはマジックナンバーがあることを知りました。 マジックナンバーまとめ http://qiita.com/forestsource/items/15933888466ba9c3f048 ということは、リクエストメッセージにもマジックナンバーが記載されているのかと推察しました。 それを確かめたいです。 実際にリクエストメッセージを確認すると、文字化けしていてどのような記載なのかわからず質問しました。 下記のように画像ファイルの中身を偽装することもできるので、可能ならリクエストメッセージのバイナリをそのまま確認したいです。(バイナリについていまいち理解していないので、文章がおかしいかもしれません><) 画像ファイルによるクロスサイト・スクリプティング(XSS)傾向と対策 http://blog.tokumaru.org/2007/12/image-xss-summary.html
shi_ue

2017/04/13 11:15

こちらから送るファイルなので、バイナリエディタなどで確認すれば良いのでは?
7968

2017/04/13 11:27

ローカル上にある画像ファイルを下記のオンラインバイナリエディタでマジックナンバーを確認しました。 HexEd.it https://hexed.it/ ただ、リクエストメッセージ上ではどんな感じなのか見たかったです...
shi_ue

2017/04/13 12:25

winsharkでパケットをキャプチャしてみるといいですね。 HTTPプロトコルが直接見られますので。
7968

2017/04/13 13:25

教えてくださり、ありがとうございます((_ _ (´ω` )ペコ Wiresharkを使ってみます。
shi_ue

2017/04/14 05:28 編集

あ、間違えました。wiresharkでした(^ ^)。
7968

2017/04/14 10:46 編集

winsharkでググったら、wiresharkが出てきたので全然大丈夫です^^ ちなみに、FiddlerにHexViewがあり、Hex表記ですが確認できました。 質問する前にもHexViewでの表記を確認していましたが、base64だと思っており、文字化けしてるのかと誤解していました>< お陰様で確認することができました。 ありがとうございました((_ _ (´ω` )ペコ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問