私は、特定のHTMLページに表示される画像をアップロードする必要があるポータルで作業しています。ここでは何が良い練習になるべきですか?画像をアップロードするか、リモート画像を使用するかを質問する
アップロードすることを避け、ユーザーに画像のURLを指定するようにしてください。
画像ファイルをアップロードするようユーザーに依頼します。
コードインジェクションが含まれていると画像が致命的になることがありますが、リモートのものは安全ですか?
おかげ
私は、特定のHTMLページに表示される画像をアップロードする必要があるポータルで作業しています。ここでは何が良い練習になるべきですか?画像をアップロードするか、リモート画像を使用するかを質問する
アップロードすることを避け、ユーザーに画像のURLを指定するようにしてください。
画像ファイルをアップロードするようユーザーに依頼します。
コードインジェクションが含まれていると画像が致命的になることがありますが、リモートのものは安全ですか?
おかげ
それはあなたのウェブサイトの一貫性に依存します。アップロードはURLを入力するよりもはるかに優れています。たとえば、ターゲットとするオーディエンスが、アップロードすることを好むプロフェッショナルなクライアントであれば、リモートのURLと入手方法を説明することは難しいでしょう。しかし、アップロードはより伝統的な方法であり、より簡単に感じられます。
一方、対象ユーザーのほとんどがインターネットユーザーの場合、アップロードオプションを指定する必要はありません。しかし、私はアップロードがユーザーにとってより自然で簡単だと感じています。また、画像の種類にもよりますが、画像がユーザーのアバターで、アップロードが適切であれば、ユーザーが他のWebサイトから見つけた画像のみを共有するように画像を追加している場合は、リモートURLが適切です。
サーバーへのリモートのアップロードと取得はいずれも致命的な可能性がありますが、リモートのものをデータベースに保存するだけでセキュリティ上の問題は発生しません。
この機能をアップロードしたい場合、またはサーバーにリモートイメージを格納するのであれば、あなたのサーバーのセキュリティを確保するために、いくつかの特定のステップを実行する必要があります。
は、有効な画像であることが、ファイル拡張子とMIMEを確認してください。 (これだけに依存しないでください。)
新しいイメージオブジェクトに画像のサイズを変更してコピー(PHPのgetimagesizeを使用して)、それが有効なイメージファイルです
を確認してください。そのイメージをサーバーに保存します。
保存するフォルダには、を使用してすべての種類のコード実行を無効にする必要があります。htaccessファイル(でSetHandlerデフォルト・ハンドラ)グラーム・アリの提案に加えて
まあ、それはプロジェクトの性質に依存します。
実際、どのような方法でも問題ありませんが、ユーザー入力を検証してフィルタリングする必要があります。
ファイルが画像であるかどうかを検証するオプションはたくさんあります。 すべての画像ファイルには解像度とその他の関連データが必要であるため、phpのgetimagesize()関数を例として挙げることができます。
ここにはあなたの答えもある他の質問があります。一見する必要があります。
:
は、ファイル名をサニタイズすることを確認します。ユーザーがアップロードしたメディアの新しいファイル名を生成するのがベストです。
書き込み可能なユーザー権限のみを持つアップロードディレクトリを作成しますが、それはいくつかの問題を引き起こす可能性があります。
セキュリティ上の問題に取り組む以外にも、モバイルデバイスから取得したメディアがランダムな方向を持つ可能性があるため、向きなどの重要な要素を把握する必要があります。
リモートイメージとは、リモートリソースに存在するイメージをいつでも変更することができることを意味します。例えばあなたがミッキーマウスの写真へのリンクに貼り付けたユーザーはそれを承認し、ユーザーはリモート画像をハードコアのポルノに変更します。 "おっとっと"。 –