1

我正在编写一个网络应用程序,我接受图像源作为 url 查询参数。我想验证图像源以确保用户/调用者没有发送可能导致 XSS 或类似情况的请求。您能否建议我一种验证图像 src 或正则表达式的好方法,它可以确保没有恶意内容被推送到我的服务器并可能影响最终用户。

我可以想到以下格式的图像源:

  1. http://foo.com/bar.jpg(绝对)
  2. /foo/bar.jpg(相对)
  3. foo/bar.jpg(相对)

谢谢,高拉夫

4

2 回答 2

0

正则表达式可能不是您想要的。由于您使用的是 Java,请使用URI

final URI input;

try {
    input = URI.create(inputStringHere);
} catch (IllegalArgumentException e) {
    // Not even a valid URI: deal with it
}

// do other tests on input
于 2012-12-24T10:44:47.767 回答
0

此解决方案假定您将 url 作为参数,然后从该 url 服务器端检索数据。

单独的正则表达式不是要走的路,因为它只检查文件名,并不会告诉您实际数据是否是恶意的。我会分三个步骤来做到这一点:

  1. 测试文件名以确保它以受支持的类型结尾。这不是为了安全,而是为了避免下载不可用的数据,实际上是可选的。就像是:/\.(jpe?g|gif|png)$/
  2. 使用 HEAD 请求而不是 GET 请求来访问数据所在的网络服务器。确保返回的 mime-type 与预期的图像类型匹配。这是第一道安全线。如果它不好,请不要获取数据。除此以外:
  3. 下载数据,并在本地对其进行测试,以确保它确实是服务器所说的 mime 类型。如果您在 unixy 环境中,请尝试通过file -I -.

即使这样也不能绝对保证安全,但它应该清除最明显的攻击媒介。

于 2012-12-24T10:49:37.287 回答