正则表达式以验证图像源

时间:2012-12-24 10:32:45

标签: regex xss

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

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

  1. http://foo.com/bar.jpg(绝对)
  2. /foo/bar.jpg(亲戚)
  3. foo / bar.jpg(亲戚)
  4. 谢谢, 拉夫

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

单独使用正则表达式是不可取的,因为它只检查文件名,并不会告诉您实际数据是否是恶意的。我会分三步完成:

  1. 测试文件名以确保其以受支持的类型结束。这不是为了安全,而是为了避免下载不可用的数据,实际上是可选的。类似于:/\.(jpe?g|gif|png)$/
  2. 使用HEAD请求,而不是GET请求,启动数据所在的网络服务器。确保返回的mime类型与预期的图像类型匹配。这是第一道安全措施。如果不好,请不要获取数据。否则:
  3. 下载数据,并在本地测试,以确保它确实是服务器所说的mime类型。如果您处于unixy环境中,请尝试通过file -I -管道传输文件数据。
  4. 即使这不是绝对保证安全,但它应该清除最明显的攻击媒介。