2010-11-29 60 views
0

我需要停止用户将JavaScript放入应该是链接字段的位置。我知道我可以在他们输入的网址开头检查“javascript:”,但我想知道是否有某种方法可以构建<a>标签来强制它将href作为地址对待?我觉得这将是一个更好的解决方案,因为人们总是想方设法避开基本检查。防止用户输入javascript而不是用于在href中使用的url

+2

为了什么目的呢?该字段是否发送到服务器?如果是这样,验证应该发生在那边。任何人都可以随时与客户一起做任何想做的事情。 – spender 2010-11-29 20:12:22

+0

这是为了阻止用户制造XSS攻击。 – 2010-11-29 20:19:58

回答

3

一个有趣的解决方案(如果你问我,非常有效)是将http://放在尚未开始的URL前面。这是我的意思的草图:

if(url.slice(0,"http://".length) !== "http://" && url.slice(0,"https://".length) !== "https://") { 
    url = "http://" + url; 
} 
+0

这可能是一个很好的解决方案。谢谢。 – 2010-11-29 20:21:42

0

没有强制标签将href作为URL对待的纯HTML方式。

你唯一能做的就是检查href属性中的javascript。

1

更好的白名单比黑名单和检查http(s)协议,我猜。

1

您总是可以预先安装http://或https://协议。可能需要替换才能删除任何现有的http或https。

即使你有

http://javascript:alert('test'); 

的JavaScript将无法运行。

1

首先,您应该认识到浏览器可以被操纵为提交用户想要的任何内容,因此客户端验证既不必要也不足够,只是方便(对用户)。

鉴于这种情况,一个简单的过程,想到:

  • 强制每个URL是需要在URL的开头协议规范绝对的。
  • 强制该协议是{http,https}之一。

试试这个:

function validateUrl(value) { 
    return value.match(/^(http|https):\/\//) != null; 
} 

if(validateUrl(inputField.value)) { 
    // value is acceptable 
} else { 
    // value is not an acceptable URL 
}