如果URL有一个坏域,img.onerror()似乎不会触发

时间:2016-02-10 16:57:37

标签: javascript node.js image webpack

首先,让每个人都看看这个可爱的猫头鹰:

http://happy.fm/wp-content/uploads/2011/10/random-owl.jpg

我将其用作测试图像,以查看是否可以使用客户端Javascript检测给定的URL是否为合法图像。我在网上搜索并发现了一些应该起作用的简单代码:

const img = new Image();
img.onload = () => {
    console.log("HOORAY! SUCCESS!", img);
}

img.onerror = () => {
    console.log("BOO! FAIL!")
}

img.src = values.image;

如果我输入的URL具有有效的域,但文件路径错误,如下所示:

http://happy.fm/wp-content/uploads/2011/10/random-owlDOESNOTEXIST.jpg

...然后onerror()可靠地开火。但是,如果是伪造的,就像这样:

http://happy.fmDOESNOTEXIST/wp-content/uploads/2011/10/random-owl.jpg

...然后onerror()永远不会开火。是这样的预期行为吗?有没有办法解决?

是的,我知道只做客户端验证并不是真正解决这个问题的最好方法,但是假装这是唯一的方法。

编辑:值得一提的是,我在运行于webpack-dev-server之上的Node.js / Webpack本地环境中看到了这个错误。也许这会成为某种权限问题。

1 个答案:

答案 0 :(得分:0)

好吧,我是个白痴。我进行了上游检查,以验证入站URL是否采用有效格式。当我检查域名时,我这样做了:

http://happy.f/wp-content/uploads/2011/10/random-owl.jpg

拥有一个单一字符的顶级域名是不合法的,所以我的验证例程就抓住了。只要我放入一个有效格式但仍然虚假的顶级域名,就像这样:

http://happy.fasdfasdfasdfasdf/wp-content/uploads/2011/10/random-owl.jpg

我的onerror()方法被解雇了。

因此... d'哦