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

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

ただいまの
回答率

90.52%

  • PHP

    20288questions

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

  • JavaScript

    16349questions

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

  • jQuery

    6675questions

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

  • HTML5

    4002questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 187

taro_nii_chan

score 180

 前提

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

foods.csv

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

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

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

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

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

 やりたい事

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

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

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

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

 蛇足ですが

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/07/08 09:36

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

    キャンセル

  • taro_nii_chan

    2018/07/08 09:42

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

    キャンセル

  • mts10806

    2018/07/08 09:43

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

    キャンセル

回答 1

checkベストアンサー

+2

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 09:55

    ありがとうございます。
    とても勉強になります。

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

    キャンセル

  • 2018/07/08 09:58

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

    キャンセル

  • 2018/07/09 05:11

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

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20288questions

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

  • JavaScript

    16349questions

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

  • jQuery

    6675questions

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

  • HTML5

    4002questions

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

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