在浏览器的涉及中,为了防止链接地址被伪造,浏览器一般会在状态栏显示地址信息,但可惜的是,显示的地址信息是静态的,也就是说,浏览器难以发现地址的动态变化,截图如下:
针对浏览器的这种特性,我们可以很容易伪造出与浏览器状态栏地址信息不同的链接,示例代码如下:
<a href="http://www.sina.com.cn" id="sina">新浪</a>
方法一:利用mouseup事件
通过组合使用mouseup、mouseout事件,利用mouseup与click之间的时间差,改变链接的href属性,从而能在链接触发点击时,导向到伪造的地址。
var a = document.getElementById('sina'),
href = a.href;
// 注册事件
a.addEventListener('mouseup', function(event) {
// 修改为需要导向的地址
this.href = 'http://blog.youkuaiyun.com/yiifaa';
})
// 抹除设置的属性
a.addEventListener('mouseout', function(event) {
this.href = href;
})
这里需要强调的是,一定要使用mouseup事件,绝不能使用mouseenter事件,否则露馅。
方法二:截获点击事件
利用事件的冒泡特性,阻止默认事件的发生,即可实现地址的跳转。
var a = document.getElementById('sina');
a.addEventListener('click', function(event) {
location.href = 'http://blog.youkuaiyun.com/yiifaa';
event.preventDefault();
});