【问题标题】:Classic ASP display an image from a BLOB in SQL Server经典 ASP 在 SQL Server 中显示来自 BLOB 的图像
【发布时间】:2021-11-18 04:27:53
【问题描述】:

不知道哪里出错了。

我正在尝试在 ASP 页面中显示 PNG 图标。 PNG 以 BLOB 格式存储在 SQL 数据库中。 表中图片如下(一小部分)。

T2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AU
kSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXX
Pues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgAB
eNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAt
AGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3
AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dX
Lh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+

页面 PIC.ASP 如下所示:

<!--#include file="SQLConnect.asp"-->

 <%FN=request.querystring("FN")
sql1="SELECT * FROM [Database].[dbo].[Images] where filename= '" & FN & "'"
rs1.open sql1,conn, 3, 3
Response.Expires = 0
        Response.Buffer = TRUE
        Response.Clear
        Response.ContentType = "image/png"
Response.BinaryWrite rs1("BLOB")
rs1.close%>

我得到一个黑屏,上面有一个非常小的白色方块,看不到任何图像。 难住了。看起来它会起作用。 任何帮助感谢大家!

【问题讨论】:

  • 这看起来很容易受到 sql 注入的攻击

标签: asp-classic


【解决方案1】:

首先,在我们做任何事情之前,请仔细考虑如果有人查看了您的 html 并决定将此 URL 发送到您的图像处理程序 asp 会发生什么:

http://example.com/yourpage.asp?FN=%27%3BDELETE%20FROM%20%5BImages%5D%3B--

Classic ASP 具有parameterized queries 的机制。使用它们。 每一次!否则,您的应用程序实际上是在乞求被黑客入侵,如果您还没有被黑客入侵,那么您已经很幸运了。 /p>

这很严重!如果您有这样的网站正在生产中,那么值得停止其他所有事情,直到您解决所有问题。单身的。地方。您已经使用字符串连接将用户提供(甚至影响)的信息包含到 SQL 字符串中。

即使对于实践/学习/概念验证代码,这也太重要了!不要自学以一种在你需要真正去做时会回来咬你的东西的方式。


除此之外,您正在做我期望的大部分事情:设置内容类型并使用Response.BinaryWrite() 而不是常规的Reponse.Write()。您缺少的一件事是这些数据仍然是base-64 编码。您需要先对该数据进行 base-64 解码,然后才能将其用作图像。

【讨论】:

  • 它是一个单一用途的内部唯一页面,用于剥离图像的应用,以便我们可以有效地使用它们。我将调用页面的内容类型设置为XLS,以创建一个带有名称和图像的excel文件。
  • 内部应用程序仍然可能被滥用,甚至经常是偶然的。 Sql 注入是一个巨大的交易,而不是随便溜走。永远。
猜你喜欢
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 2013-12-28
  • 2011-05-27
  • 2012-09-05
相关资源
最近更新 更多