本系列文章分享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语言中,其他类型的安全漏洞,期待你的关注。
(谢绝转载,更多内容可查看我的专栏)
1395

被折叠的 条评论
为什么被折叠?



