我有一个图像生成 servlet,它从查询字符串生成图像文本,我像这样使用:
<img src="myimage.jpg.jsp?text=hello%20world">
以下是我的安全措施:
- 查询字符串参数的 Urlencoding
- 域白名单
- 查询字符串参数长度检查
我的问题:
- 有什么安全措施我忘记了吗?
与标准相比,上述内容如何增加 DOS 攻击风险:
<img src="myimage.jpg">
感谢您的帮助。
我有一个图像生成 servlet,它从查询字符串生成图像文本,我像这样使用:
<img src="myimage.jpg.jsp?text=hello%20world">
以下是我的安全措施:
我的问题:
与标准相比,上述内容如何增加 DOS 攻击风险:
<img src="myimage.jpg">
感谢您的帮助。
要检查的事情是,
使用 HTTP Referer 标头来验证请求是否来自您的页面。仅当您只打算在您的网站页面上使用这些图像时,这才有意义。您可以验证这些图像是从您的页面加载的,并且没有直接包含在其他站点的页面中,或者没有直接访问图像 URL。不过,这很容易被伪造来执行 DOS 攻击。
检查您用于生成图像的底层库。您传递了哪些参数来生成图像并检查哪些参数可能由用户控制,这些参数可能会影响图像的大小或图像的处理时间。我不确定字体、字体大小是如何提供给图像的,它们是否是硬编码的,或者它们是否是通过用户的信息派生的。
由于这个 URL 模式会生成一个图像,我假设每个调用都是 CPU 密集型的,并且包含实际图像的一些数据传输。如果您真的担心 DOS,您可能想要控制触发这些 URL 的速率。
正如我在评论中已经提到的,URL 只能是 1024 个字符长,因此文本字段可以包含的字符数存在固有限制。您可以通过提供额外的检查来强制执行更小的限制。
对于 DoS 预防速率限制,每个 IP 每 X 秒可以接收多少个请求。
因此,要实现这一点,在进行任何处理之前记录每个请求的远程 IP 地址,然后计算最近(例如 30 秒)内先前请求的数量。如果来自该 IP 地址的数字大于 15,则使用“ HTTP 500.13 Web Server Too Busy
”拒绝请求。
这是基于您的数据库日志记录和查找的处理器密集程度低于图像生成代码的假设。这不能防止大规模DDoS攻击,但会大大降低风险。
域白名单
我假设这是在“ referer
”标题上?是的,这将阻止您的图像直接包含在其他网站中,但可以通过通过其他网站的服务器代理请求来规避它。上面的 DoS 保护将有助于缓解这种情况。
Querystring parameter length check
是的,这将有助于减少单个图像请求可以执行的处理量。
我的问题:
有什么安全措施我忘记了吗?
大概。作为开始,我将验证您不会面临OWASP Top 10的风险。
与标准相比,上述如何增加 DOS 攻击风险
标准图像请求将简单地从您的服务器请求静态图像,唯一真正的开销是 IO。通过 JSP 进行处理意味着在 CPU 做更多工作的同时执行多个请求可能会使服务器过载。