原理
如果应用程序对用户提供的url和远端服务器返回的信息没有进行合适验证和过滤,就可能存在这种服务器端请求伪造的缺陷。
攻击
a.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
b.攻击运行在内网或本地的应用程序(比如溢出);
c.对内网web应用进行指纹识别,通过访问默认文件实现;
d.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
e.利用file协议读取本地文件等。
防御
a:过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
b: 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
c:限制请求的端口为http常用的端口,比如,80,443,8080,8090。
d:黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
e:禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。