申し訳ありません。そこで、いくつかのpngイメージファイルを含むサムネイルストレージを作成したいと考えています。ASP.NET WebApi - サーバー上の参照ファイル
私はサーバー側にディレクトリを作成しました。今私のコントローラでは、画像のリクエストを処理したいと思います。
public class ThumbnailController : ApiController
{
[Route("api/v1/thumbnail")]
[HttpGet]
public HttpResponseMessage GetThumbnail(string id)
{
var result = new HttpResponseMessage(HttpStatusCode.OK);
string filePath = [email protected]"D:\server_data\Images\Thumbnails\{id}.png";
if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Invalid file");
var image = Image.FromFile(filePath);
using (var memoryStream = new MemoryStream())
{
image.Save(memoryStream, ImageFormat.Jpeg);
result.Content = new ByteArrayContent(memoryStream.ToArray());
}
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
return result;
}
}
今、この1つはセキュリティ上の問題があります:私はhttp://my.address.com/api/v1/thumbnail?id=../securefile.png
のようなものを呼び出す場合、私は基本的に、親ディレクトリにあるsecurefile.png
画像ファイルになるだろう
現在、私のコントローラのコードは次のようになります。同様に、私はハードドライブ上の任意のpngイメージをダウンロードすることができましたが、これは明らかに望ましくありません。サムネイルディレクトリがサーバのルートから切り離されなければならない理由
ので、私は、私はドットを開始トリムや特殊文字の着信id
をチェックすることができ、問題を回避するためにstring filePath = HostingEnvironment.MapPath($"~/Images/{id}.png");
のようなものを使用することはできません推測し、それはそれを戦う正しい方法のように感じることはありません。より良い実践が存在するのだろうかと思う。