假设您有一个网站,并且您正在使用一些returnUrlURL 参数将用户重定向回他在登录或编辑用户区域中的某些记录后所在的页面。是否有一些标准方法可以检查是否returnUrl与 Web 应用程序位于同一服务器上?
到目前为止,我发现,atacker 可以通过两种方式将用户重定向到其他地方,并且可以执行以下操作来防止这些攻击:
- 攻击者在参数 (http://evil.com/) 中提供整个 URL - 在这里可以检查参数是否包含
http(s)://或ftp:// - 如果缺少协议,浏览器会自动添加协议,因此攻击者可以提供类似
//evil.comor//numeric_ip_address的内容,它也会将用户重定向到服务器之外 - 在这里您仍然可以检查 URL 是否以//
还有其他方法可以对 URL 地址进行编码吗?如果我只检查前两种情况,我能确定参数不会被滥用吗?