Javascript 有更好的方法吗?(递归解析HTML unicode实体)
我正在分析一个不受信任的URI,但必须尊重它的URI保护。我试图防止Javascript 有更好的方法吗?(递归解析HTML unicode实体),javascript,html,security,unicode,xss,Javascript,Html,Security,Unicode,Xss,我正在分析一个不受信任的URI,但必须尊重它的URI保护。我试图防止javascript:链接,但我觉得我需要在其上递归,因为您可以: javascriptjavascript:: 在剥离了javascript:的所有实例之后,再次找回我们的老朋友javascript: 我的另一个关注点是类似嵌套的unicode实体。例如,我们可以: "jAvascript:alert('pwnt')" ……但我们也可以: "j&#塁vascript:alert('
javascript:
链接,但我觉得我需要在其上递归,因为您可以:
javascriptjavascript::
在剥离了javascript:
的所有实例之后,再次找回我们的老朋友javascript:
我的另一个关注点是类似嵌套的unicode实体。例如,我们可以:
"jAvascript:alert('pwnt')"
……但我们也可以:
"j&#塁vascript:alert('pwnt')"
…虽然我似乎做错了(而成功的攻击者显然不会。)
与其指定要列入黑名单的内容(例如
javascript:
uri),不如指定要列入白名单的内容(例如http
和https
)。像这样的东西怎么样:
function sanitizeUri(uri) {
if (!uri.match(/^https?:\/\//)) {
uri = "http://" + uri;
}
return uri;
}
与其指定要列入黑名单的内容(例如
javascript:
uri),不如指定要列入白名单的内容(例如http
和https
)。像这样的东西怎么样:
function sanitizeUri(uri) {
if (!uri.match(/^https?:\/\//)) {
uri = "http://" + uri;
}
return uri;
}
你以前不是已经问过了吗?无论如何,我的建议还是一样的:使用
我链接到的特定消毒剂会自动剥离javascript:
URL,但您也可以将其设置为只允许某些如托马斯建议的白名单URL方案。正如他所指出的,这是一个好主意,因为只允许像http
和https
这样的安全方案要安全得多
(特别是,给定的模糊URL方案是否安全,可能不仅取决于用户的浏览器,还取决于他们的操作系统以及他们可能安装的第三方软件-许多程序喜欢将自己注册为自己URL方案的处理程序。)您以前没有问过吗?无论如何,我的建议还是一样的:使用
我链接到的特定消毒剂会自动剥离javascript:
URL,但您也可以将其设置为只允许某些如托马斯建议的白名单URL方案。正如他所指出的,这是一个好主意,因为只允许像http
和https
这样的安全方案要安全得多
(特别是,给定的模糊URL方案是否安全可能不仅取决于用户的浏览器,还取决于他们的操作系统以及他们可能安装的第三方软件-许多程序喜欢将自己注册为自己URL方案的处理程序。)您是否在客户端清除输入?这最好在服务器上完成。它来自第三方服务器,我不控制它。这是来自Twitter API的JSONP提要。我可以假设JSONP包装器是非恶意的,并且它忠实地传递内容。但必须假定内容是敌对的。明白了。只需检查:)是否正在客户端清理输入?这最好在服务器上完成。它来自第三方服务器,我不控制它。这是来自Twitter API的JSONP提要。我可以假设JSONP包装器是非恶意的,并且它忠实地传递内容。但必须假定内容是敌对的。明白了。只是检查:)但那不是我想做的。我试图通过允许ftp://和mailto:uri使其更灵活。然后还将其列入白名单。黑名单总是导致安全问题。为什么?我试图做的是缓解XSS,而不是其他协议。如果用户在其系统上注册并安装了愚蠢的ProtocolHandler,那是用户的错。@adlwalrus-您知道在所有浏览器中,“javascript:”是唯一会导致以下内容作为脚本执行的方案吗?还是它只是最有名的一个?除非你100%确定没有其他人(我不知道你怎么可能),否则你最好使用白名单。我几乎100%肯定这样的事情。在过去的三个小时里,我一直沉浸在阅读XSS不同变体的标签中,但这不是我想要做的。我试图通过允许ftp://和mailto:uri使其更灵活。然后还将其列入白名单。黑名单总是导致安全问题。为什么?我试图做的是缓解XSS,而不是其他协议。如果用户在其系统上注册并安装了愚蠢的ProtocolHandler,那是用户的错。@adlwalrus-您知道在所有浏览器中,“javascript:”是唯一会导致以下内容作为脚本执行的方案吗?还是它只是最有名的一个?除非你100%确定没有其他人(我不知道你怎么可能),否则你最好使用白名单。我几乎100%肯定这样的事情。在过去的三个小时里,我一直沉浸在阅读XSS不同变体的标签中。