主网站有一个个人资料页面。我将个人资料图像保存在“图像”文件夹中,我想这是个坏主意。所以现在我将图像文件夹移动到 App_Data 以便现在不允许远程访问该文件夹(更多安全性和隐私性)。因此,我的代码现在调用一个名为 ServiceImages 的服务,该服务具有一个名为 getimages 的方法,该方法传递了一个用户名。所以它的作用是,它返回名为“用户名”+扩展名的图像(我用用户名的名称保存图像)。但是,然后可以使用远程工具通过使用字母和数字的排列作为用户名来破解和获取所有图像,以获取图像并保存它。这当然不是我想要的。至少,不要让获取所有个人资料图像变得那么容易。那么如何限制对此类自动化工具的访问呢?使用 IP 检查是一个好主意,如何做到这一点?我不希望将图像保存在数据库中。难道没有其他优雅的方式可以阻止这种自动黑客工具或脚本吗?我不希望我的网站成为被黑客入侵的新闻。
2 回答
恕我直言:我认为在您当前的设置中没有任何方法可以限制 IP 地址,因为您仍然必须根据授权用户的客户端请求提供个人资料图像。
App_Data 文件夹旨在存储数据库、xml 数据。我认为将用户图像存储在 App_Data 中并不是一个好主意。您始终可以拥有图像文件夹并通过禁用该文件夹上的目录浏览来保护文件夹位置。
我认为您需要一种更好的方法来命名您的个人资料图像,以避免图像名称的暴力/排列组合。我更喜欢 GUID 的某种唯一键或映射到用户名的字符/数字的随机组合并将该键存储在数据库中。这将要求您将图像名称执行 1 次转换为该唯一键并将这些键存储到数据库。
但是,您提供个人资料图像(直接使用 http 路径或动态使用处理程序),您需要一个强文件名,使用蛮力方法很难猜到。
将图像放在 app_data 或其子文件夹中只会停止直接浏览器。你所拥有的是一种“不安全的直接对象引用”。因此,您需要做的是交换到间接对象引用,例如使用 GUID 作为个人资料图片的文件名而不是 username.jpg,然后当您想要为用户请求文件时查找用户-> 映射表中的 guid。
当然,这并不能阻止任何人浏览每一个 GUID,但是,这将需要相当长的时间。你可能会偷偷摸摸,如果一个 IP 地址在 y 分钟内有 x 次失败的查找,则在 z 时间内停止来自它们的所有请求,这在你的处理程序中很容易做到。
但真的,值得吗?获取个人资料图片几乎不是一个黑客,除非您只希望个人资料图片仅限于登录的用户 - 在这种情况下,只需将它们放在不允许匿名访问的目录中。