shExpMatch()dnsDomainIs()有什么区别

定义说:

// dnsDomainIs()
// Evaluates hostnames and returns true if hostnames match. Used mainly to match and exception individual host names.

// Example:
if (dnsDomainIs(host, ".google.com")) return "DIRECT";



// shExpMatch()
// Attempts to match hostname or URL to a specified shell expression and returns true if matched.

// Example:
if (shExpMatch(url, "*vpn.domain.com*") ||
      shExpMatch(url, "*abcdomain.com/folder/*"))
  return "DIRECT";

如果我理解正确的话
shExpMatch()-可以使用一些通配符
dnsDomainIs()-可以使用确切的名称
shExpMatch()是否优于dnsDomainIs()

最佳答案

查看http://findproxyforurl.com/pac-functions/中的定义,它们具有完全不同的功能。 dnsDomainIs()使用完全相同的域名,例如.google.com,而shExpMatch()使用类似 shell 的字符串以及通配符(例如*.google.com)。

它们现在看起来非常不同,但是使用shExpMatch,您还可以匹配文件夹结构(如example.com/sub/folder/*http://example.com/img/*.png)中的项目。

第一个仅匹配主机名,不带协议(protocol),端口或子文件夹,而第二个匹配整个URL。但是,您可以像dnsDomainIs()一样使用shExpMatch(),但是我不确定,如果您可能会受到攻击,则可以通过无意中将google.com.example.com之类的URL用作google.com-dnsDomainIs()在此处会返回false,shExpMatch()可能返回true(未经测试,只是预感)

10-08 16:36