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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

395閲覧

ファイル・アップローダを設置するに当たって、エンドユーザの利便性とセキュリティ

taro_nii_chan

総合スコア207

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2018/07/07 23:39

前提

以下のような csv があります。

foods.csv

csv

1"食種", "詳細品目", "内容量", "税抜価格" 2"野菜", "キャベツ", "1個", "100円" 3"野菜", "レタス", "3個", "198円" 4"魚貝類", "サーモン", "280g", "398円" 5"魚貝類", "アサリ", "300g", "298円" 6"精肉", "鶏もも肉", "400g", "319円" 7(中略) 8"レトルト", "カレー", "1袋", "178円" 9"レトルト", "シチュー", "1袋", "189円" 10"レトルト", "ご飯小盛り", "150g", "98円"

これをファイル・アップローダ(ドラッグ・アンド・ドロップ)でWebサーバにアップロードする事を考えています。
実際にアップロード作業をするのはクライアントのクライアント(エンドユーザと呼ぶことにします。恐らく特定の1人か2人)です。
アップロードされたタイミングで PHP で

  • 「食種マスター」
  • 「詳細品目マスター」
  • 「データcsv」

を作ろうと思ってます。
データがどれくらい大きくなりそうなのか現段階では予測がつかないのですが、
大きくなったときのためにマスターは作っておいて損はないかと考えています。

で、これをクライアントに提案してみたら
「セキュリティが気になる」
と言われました。
「アップローダーのURLがわかれば誰でもCSVファイルを上書きできると危険だ」
ということで、もっともだと思いました。
csv はエンドユーザの HP で使う大事なファイルなので、リスクはできるだけ避けたいです。
でもエンドユーザに出来るだけ負担はかけたくありません。

やりたい事

エンドユーザは技術的なことは知らないでしょうから、出来るだけ分かりやすい使い方がいいです。

  • BASIC認証をかける
  • 1行目が"食種", "詳細品目", "内容量", "税抜価格"だったらそれはもうエンドユーザであると見なして読み込んでしまう

くらいしか思いつかなかったのですが、BASIC認証はエンドユーザに ID, PW を覚えておいてもらわないとなのでちょっと面倒をおかけしちゃうかな?って言うのと、
第3者が宣伝していない URL に特定の1行目のフォーマットでアップロードを試みるかな?と言うので僕自身が迷っています。

何とかいいやり方をクライアントに提案して喜んでいただきたいのですが、
もっとスマートな方法はありますでしょうか?

蛇足ですが

foods.csv というのはサンプルです。実際は別のもののカテゴリカテゴリ詳細値1値2形式のファイルです。

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

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

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

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

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

m.ts10806

2018/07/08 00:06

通常ID,パスワードによるログイン画面挟むと思うんですが、それは検討事項にあがってないのでしょうか?
m.ts10806

2018/07/08 00:08

社内でしか使われないのは確定ですか?出先からアップロードしたりというのは発生しませんか?
taro_nii_chan

2018/07/08 00:24

例えの話で申し訳ないのですが、上記(foods.csv)の場合、エンドユーザは食料品ネット販売見積りサイトのオーナーと考えてください。一般のお客さんがHPを見て好きな食品を選ぶと内容量と税抜価格が表示され、購入フォームにそれが反映されて、住所、e-mail 等必要事項を記入の上お見積りボタンを押すとエンドユーザのところにメールが飛んで、実際にいくらで何を買うというやり取りがメールベースで行われるという形態です。ですのでアップローダがなければ ftp や レンタルサーバのファイル送信機能を使うのでログインが必要ですが、アップローダを使えば、ひとつの方法としてログイン無しでデータの更新ができるという事です。
m.ts10806

2018/07/08 00:30 編集

いえ、PHPであれば画面自体にログインを挟むことが簡単にできるのでは?ということです。そういうまず一つ目の対策はあると思います。
taro_nii_chan

2018/07/08 00:32

BASIC認証と同じことを PHP で出来るよという事でしょうか?
m.ts10806

2018/07/08 00:36

PHPに限らずセッション機能がついているサーバー側の言語であればBASIC認証のような簡易認証よりも高いセキュリティのログイン認証ができますが・・・。teratailだってそうですし、その他ログイン機能があるサービスを使われたことがあると思いますが、言語は違えど概念は同じです。むしろBASIC認証の方が珍しいです。使う端末やネットワーク環境まで制限されているのであれば、IP制限かける手もありますよ。
taro_nii_chan

2018/07/08 00:42

そうなんですね。BASIC認証の方が珍しいというのは初めて知りました。こういう生の情報が得られるのが teratail の魅力ですね。勉強になります。端末・ネットワーク環境は制限されているかどうか分からないと思いますが、ip制限という方法がある事も勉強になりました。ありがとうございます。
m.ts10806

2018/07/08 00:43

参考記事おいて回答としておきますね。
guest

回答1

0

ベストアンサー

PHPログイン参考記事
PHPによる簡単なログイン認証いろいろ
PHPとMySQLで新規登録とログインを実装する(PDO使用)
ログイン画面、phpによるログイン処理の作成

IPの確認
ipアドレスを取得する方法

アクセスしてきた人(セッション)のIPアドレスを取得

PHPでIPアドレスを判定してアクセスを制限する
※IPアドレスリストはブラウザからアクセスできない場所に置くか、DB上に保管すると良いです

第3者が宣伝していない URL に特定の1行目のフォーマットでアップロードを試みるか

絶対ないとは言えません。
noindex,nofollowをつけていても検索に引っかからないだけでURLが分かればアクセスできますし、
迷惑メール送るみたいに1文字ずつ変えてアクセスしていって404エラーにならなかったリストなどを作ればアクセスできます。
画面が分かればそこから総当たりで色んなフォーマットを試していけば正常なフォーマットがばれないとも言い切れません。
それだけ脆弱性のある作りをしている可能性もあるからです
「これだけやれば安心」というのはありません。
ファイルアップロードの例外処理はこれぐらいしないと気が済まないという記事もありますが、それだけやることが多いわけです。
まずはログイン認証を挟み、もし他のIPからのアクセス多いようであればIP制限をかけるようにすると良いです。

あとはアップローダを社内環境に構築、とかですね。
ローカルにPHP環境構築して、データ更新の接続先をその本サーバーにするとか(その場合、ローカルIP・つまり外部からアクセスできるように穴あけてもらわないといけないかもしれませんが・・・)

投稿2018/07/08 00:48

編集2018/07/08 00:56
m.ts10806

総合スコア80850

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

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

taro_nii_chan

2018/07/08 00:55

ありがとうございます。 とても勉強になります。 他の方の違ったアプローチがあるかも知れないので、もう少し待ってみた上でクローズしようと思います。 ありがとうございました。
m.ts10806

2018/07/08 00:58

質問内の気になったことに対して追記しました。
taro_nii_chan

2018/07/08 20:11

張っていただいたリンク、熟読ではないですけど全部目を通しました。 大企業の基幹業務じゃないからと言って適当にやって安心してはいけないんだと思いました。 今回に限らず今後も同じテーマは出てくると思うのでこの機会にじっくり勉強しようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問