![]() |
1
3
在所有情况下,应用程序上的客户机输入都不应被信任(从安全角度来看)。这个
典型的攻击场景如下: 让我们假设您有一个盲目信任主机头值的应用程序,并在应用程序中使用它而不进行验证。 因此,您的应用程序中可能有以下代码,其中动态加载JS文件(按主机名):
在这种情况下,攻击者设置为主机头的任何内容都会反映在这个JS脚本加载上。因此,攻击者可以通过操纵响应从另一台主机加载JS脚本(可能是恶意的)来篡改这一点。如果应用程序使用任何缓存机制或CDN,并且此请求重复多次,则可以通过缓存代理对其进行缓存。然后,这也可以提供给其他用户(因为它被保存到缓存中)。 利用这一点的另一种方法是: 假设应用程序具有用户密码重置功能。应用程序将向任何要求使用唯一令牌重置密码的人发送一封电子邮件,如以下电子邮件:
现在,攻击者可以通过将主机头的值篡改为自己想要的值来触发已知受害者电子邮件的密码重置。然后,受害者将收到合法的密码重置电子邮件,但URL将更改为攻击者设置的域。如果受害者打开该链接,密码重置令牌可能会泄漏给攻击者,从而导致帐户被接管。 |