Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有更好的方法吗?(递归解析HTML unicode实体)_Javascript_Html_Security_Unicode_Xss - Fatal编程技术网

Javascript 有更好的方法吗?(递归解析HTML unicode实体)

Javascript 有更好的方法吗?(递归解析HTML unicode实体),javascript,html,security,unicode,xss,Javascript,Html,Security,Unicode,Xss,我正在分析一个不受信任的URI,但必须尊重它的URI保护。我试图防止javascript:链接,但我觉得我需要在其上递归,因为您可以: javascriptjavascript:: 在剥离了javascript:的所有实例之后,再次找回我们的老朋友javascript: 我的另一个关注点是类似嵌套的unicode实体。例如,我们可以: "j&#X41vascript:alert('pwnt')" ……但我们也可以: "j&#&#X5841vascript:alert('

我正在分析一个不受信任的URI,但必须尊重它的URI保护。我试图防止
javascript:
链接,但我觉得我需要在其上递归,因为您可以:

javascriptjavascript::

在剥离了
javascript:
的所有实例之后,再次找回我们的老朋友
javascript:

我的另一个关注点是类似嵌套的unicode实体。例如,我们可以:

"j&#X41vascript:alert('pwnt')"
……但我们也可以:

"j&#&#X5841vascript: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不同变体的标签中。