使用document.referrer阻止对某些域的访问

时间:2014-06-21 01:24:51

标签: javascript

如果访问者来自domain1.com domain2.com或domain3.com,我不想显示某些内容

<script>
var refers = document.referrer;

if(refers!="domain1.com") {
// bye bye content will not be displayed if domain1.com is the refer
} else if (refers!="domain2.com"){
// bye bye content will not be displayed if domain2.com is the refer
} else if (refers!="domain3.com") {
// bye bye content will not be displayed if domain3.com is the refer
} 
else {
// All other domains referrers are allowed to see the content
}
</script>

此代码不起作用,另一个问题是document.referrer不抓取子域或www。必须与请求的domain1.com完全一样,如果它包含www将无法被检测到。

我是新手...请不要建议任何htaccess重写规则

由于

1 个答案:

答案 0 :(得分:0)

在我提出问题之前,我必须说明一下:

使用document.referrer是解决此问题的非常糟糕的选择。技能最小的任何人都可以点击view source按钮查看所有内容。这只是最基本的用户。

document.referrer非常不可靠,即使用户从您网站上的其他网页访问,也有很多原因可以解决这个问题。

出于学习目的,这没关系,但这在任何实际应用程序或程序中都是不可接受的做法!

那说......

function isReferrerGood() {

  function strEndsWith(str, suffix) {
    var reguex = new RegExp(suffix + '$');

    if (str.match(reguex) != null)
      return true;

    return false;
  }

  var i;
  var domain;
  var goodDomains = [
    "example.com",
    "example2.com"
  ];

  var ref = document.referrer;
  // For testing purposes, we'll set our own value
  // Note that this is a sub-domain of one of our good domains.
  ref = "abc.example.com";

  // Loop through the domains
  for (i = 0; i < goodDomains.length; i++) {
    domain = goodDomains[i];
    if (strEndsWith(ref, domain)) {
      return true;
    }
  }
  return false;

}
alert(isReferrerGood());