发过光的男人 發表於 2023-7-5 00:00:00

discuz不修改代码达到允许referer跳转到同顶级域名的解决方案

<p>
<span>查看了discuz的drerferer方法.发现它不允许跳转到不同子域名的跳转. </span><br><span>如果想跳转,可以修改这个方法,允许.但是这样处理会在以后升级时,又得要修改.比较麻烦. </span><br><span>再想一下,discuz这样处理,简单的个人理解,就是假设有人想干干事.那在某个位置放置一个跳转到其它网站上的url,然后再把这个网站仿得跟之前使用的那个"正版"网站一样,就可以达到骗取密码之类的目的了.所以这是比较危险.或者这个方式还有更加多的利用.所以.它做了这个防止. </span><br><span>现在我要说的是使用一个不变动的方式来增加跳转功能. </span><br><br><span>在discuz的根目录下放置一个:referer.htm文件.内容如下,主要是为了能跳过去.且在这个文件中做一个跳的域名的判断.不符合就简单的跳到首页,因为?号会导致服务尝试查询解析,所以就不用了.还是用hash吧. </span></p>
<div>
<p>
<span><u>复制代码</u></span></p>
<p>
代码如下:</p>
</div>
<p>
<br>
&lt;script&gt; <br>
/* by qidizi: discuz 不允许跳转到其它域名,现使用js处理,减少修改的工作量,允许跳到同顶域--不能跳到其它域,防止仿站之类的欺骗*/ <br>
(function(){ <br>
var topDomain = location.host.split('.'); <br>
topDomain = topDomain+'.'+topDomain; <br>
if (location.hash.length &lt; 3) return location = 'http://' +location.host + '/'; <br>
var referer = unescape(location.hash.replace(/#/g, '').replace('%_', '%')); <br>
if (new RegExp('^http\\:\\/\\/([^\\/]+\\.)?' +topDomain+ '\\/', 'i').test(referer)) {//同top domain <br>
location = referer; <br>
} else { <br>
location = 'http://' +location.host + '/'; <br>
} <br>
})(); <br>
&lt;/script&gt; </p>
<p>
<br><span>使用方式如下.使用js生成的一个退出链接,点击退出成功再会退出当前的这个页面.这样这个目的就达到了. </span><br><span>+ ' &lt;a href="http://bbs.aspku.net/member.php?mod=logging&amp;action=logout&amp;formhash=' +json['formHash']+ '&amp;referer=/referer.htm' +escape('#') +escape(location).replace(/%/g, '%_')+ '" target="_self"&gt;退出&lt;/a&gt;' </span><br><span>ok,经过测试.此方案工作正常</span></p>
頁: [1]
查看完整版本: discuz不修改代码达到允许referer跳转到同顶级域名的解决方案