我正在编写一种CMS界面系统,在某些领域,用户必须输入图片网址,外部网站链接等。
我想检查给定字符串是否是有效网址,并且不包含某些恶意代码,例如str = '"></a><script>alert("You are doomed!");</script><a href="'
服务器写在node.js上。所以我尝试了标准require('url').parse(str)
。在上面的字符串中,它返回
{
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: null,
query: null,
pathname: '%22%3E%3C/a%3E%3Cscript%3Ealert(%22You%20are%20doomed!%22);%3C/script%3E%3Ca%20href=%22',
path: '%22%3E%3C/a%3E%3Cscript%3Ealert(%22You%20are%20doomed!%22);%3C/script%3E%3Ca%20href=%22',
href: '%22%3E%3C/a%3E%3Cscript%3Ealert(%22You%20are%20doomed!%22);%3C/script%3E%3Ca%20href=%22'
}
这似乎很合适,因为几乎所有字段都是null
,但它也会在str='/myimage.png'
上返回有效网址的空值。