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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

Q&A

解決済

2回答

1711閲覧

PHPで画像をデータベースから表示する際のセキュリティについて

homepage-site

総合スコア48

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

0グッド

2クリップ

投稿2021/07/22 05:52

前提・実現したいこと

指定画像を安全に表示したいので、base64で表示するのが最も安全なのか教えていただきたい

ヘディングのテキスト

<?php $img = base64_encode(file_get_contents('画像URL')); ?> <img src="data:image/png;base64,<?php echo $img; ?>">

発生している問題・エラーメッセージ

なし

試したこと

画像を直接上げてはいけない原因を調べたところ、
Webで画像を表示する場合、imgのsrc属性に画像が置いてあるURLを指定するというのが一般的だと思います。
画像URLを指定するというのは、画像を表示するためにそのURLにアクセスできるということを表しています。
そこで,
画像をHTMLやCSSに埋め込めるようにする為に、画像をbase64にエンコードします

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

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

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

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

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

m.ts10806

2021/07/22 05:59

守りたいのは何ですか?
homepage-site

2021/07/22 06:12

外部からアクセスできる場所にアクセス・実行できるファイルを一個置かれただけで、かなりのことができるようになりますと以前指摘を受けまして。 本来ならアップロードした時点でファイルを調べて、それでOKであれば (例えばちゃんと画像ファイルなのかどうか等) 公開フォルダへコピーするなりするべきだといわれました。 そこで画像をbase64でエンコードされた文字列をGETパラメータで渡すようにしたのですが、 base64はただのエンコードなので誰でもデコード出来るという問題もあるようです。 画像を表示する際に外部からアクセスできないようするにはどのようのな方法が有効でしょうか?
homepage-site

2021/07/22 06:51

・暗号化  可逆な存在  =複合することができる  =変換方式が決まっているため、だれでも復元(decode)できる。 ・ハッシュ関数化  不可逆な存在  =複合することが出来ない 可逆な存在といえば「Base64」 エンコード(暗号化)も出来るし、デコード(複合化)もできる。 (でもね、厳密には暗号化=エンコードとは言えないんだよ…) (詳しくはもう少し下で…) 逆に、不可逆な存在といえば「SHA-1」 こっちは複合化することが出来ない。 画像をハッシュ関数化してそれをもとに画像を表示させる方法がわからないんですが、 phpで可能なんでしょうか?
maisumakun

2021/07/22 07:13

> 外部からアクセスできる場所にアクセス・実行できるファイルを一個置かれただけで、かなりのことができるようになります アップロード側の仕組みはどのようなものなのですか?
homepage-site

2021/07/22 07:17

wordpressでサイトを作成している途中でして、レンタルサーバーのカラフルボックスのCPANELからアップロードしております。
maisumakun

2021/07/22 07:19

えっと、ファイルをアップロードするのは「サイト運営側」だけですか?
homepage-site

2021/07/22 07:21

サイト運営側だけに限定しております。
maisumakun

2021/07/22 07:25

「サイト運営側」しか上げない状況なのに、「アップロードした時点でファイルを調べて、それでOKであれば」のようなチェックを必要とするような、特殊な運営体制なのでしょうか?
guest

回答2

0

外部からアクセスできる場所にアクセス・実行できるファイルを一個置かれただけで、かなりのことができるようになります

このような心配をするのであれば、対策を考えるべきはアップロード側です。

表示側でどんな手を加えようとも、アップロードしたファイルがサーバ内で不適切な動作をすることに対しては、何1つ役に立ちません(極論、表示しなくても無関係です)。

投稿2021/07/22 07:16

maisumakun

総合スコア145930

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

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

maisumakun

2021/07/22 07:29 編集

> サイト運営側だけに限定しております。 でしたら、「不正な画像をアップロード」できるのも内部犯に限られることになるので、プログラムレベルで対策すべき脅威はありません(本気で内部犯対策が必要なのなら、サーバログの監査や制度面など、もっと上位の観点から対策が必要となります)。
homepage-site

2021/07/22 07:27

ご丁寧に解答いただきありがとうございます。
退会済みユーザー

退会済みユーザー

2021/07/27 08:10

ちょっとこのコメントが気になりました。 > 「不正な画像をアップロード」できるのも内部犯に限られることになる XSS を利用して不正アップロードする手口が徳丸さんのとこで紹介されていました。 https://www.youtube.com/watch?v=FpCabifwhKg WordPress なら外部から似たような攻撃でアップロードされる可能性があるので、プログラムレベルでも適切にアップロード対策をしておくべきだと思います。 *コメント意図の読み間違いがあればすみません^^;
guest

0

ベストアンサー

imgタグは正常な画像しか表示しないので最新のブラウザならセキュリティを気にしなくても良いかと思います

投稿2021/07/22 06:54

編集2021/07/22 06:55
a.com

総合スコア902

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

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

homepage-site

2021/07/22 07:14

ありがとうございます。 Base64化してファイル名をmd5でハッシュ化してセキュリティを強化してみます。 funcsion.php function rename_file_md5($fileName) { $i = strrpos($fileName, '.'); if ($i) $Exts = '.'.substr($fileName, $i + 1); else $Exts = ''; $fileName = md5(time().$fileName).$Exts; return strtolower($fileName); } add_filter('sanitize_file_name', 'rename_file_md5', 10);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問