客户端DOM开放重定向(Client_DOM_Code_Injection)漏洞解析

本系列文章分享JavaScript语言常见的安全漏洞,漏洞的原理,可能导致的安全问题,以及如何防御与避免。本文分享的是Client_DOM_Code_Injection类。

漏洞描述

那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL。这种篡改就被称为开发重定向攻击。

风险

攻击者可以使用社交工程让受害者单击指向应用程序的链接,然后立即将用户重定向到另一个任意网站。用户可能会认为他们仍在原来的应用程序网站上。第二个网站可能令人反感、包含恶意软件,或者用于网络钓鱼(最常见)。

起因

应用程序将用户的浏览器重定向到用户请求中提供的 URL,而不会警告用户他们被重定向到网站外。攻击者可以使用社交工程让受害者点击指向应用程序的链接,并使用参数定义通过应用程序将用户浏览器重定向到另一个站点,并且用户可能不会发现被重定向。

通用建议

如何避免

1. 理想情况下,不要允许任意 URL 重定向。而要在服务器侧创建从用户提供的参数值到合法 URL 的映射。

2. 如果确实需要允许任意 URL:

o 对于应用程序站点内的 URL,先对用户提供的参数进行过滤和编码,然后通过在其前面添加应用程序站点域前缀将其用作相对 URL。

o 对于应用程序外的 URL(如有必要),使用中间免责声明页面明确警告用户他们将离开您的站点。

3. 防止开发重定向只需要判断重定向的链接是本地的链接或者是合法的链接即可。

o 如果登录链接和站点其他页面都在同一个域名,在ASP.MVC中可以用Url.IsLocalUrl(string url)来判断。

o 如果登录链接和站点其他页面不在同一个域名,如单点登录,则需要自己去实现判断的逻辑。

4. 源代码示例

CSharp

Avoid redirecting to arbitrary URLs, instead map the parameter to a list of static URLs.

Response.Redirect(getUrlById(targetUrlId));


Java

Avoid redirecting to arbitrary URLs, instead map the parameter to a list of static URLs.

Response.Redirect(getUrlById(targetUrlId));

后续会继续为大家介绍JavaScript语言中,其他类型的安全漏洞,期待你的关注。

(谢绝转载,更多内容可查看我的专栏)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值