什么是ssrf
一个对外的web接口,改接口能让用户控制curl命令,去访问别的web服务。
简图如下
想象一下当用户请求的baidu.com/x.php?image=google.com/1.jpg
改成 baidu.com/x.php?image=private.com/php.info
,是不是觉得原本不可能访问到内网的主机,现在就很容易就能做到了。
原理
php代码演示:
$url = $_get['url']; curl($url); function curl($url){ $ch = curl_init(); // 初始化curl会话对象 curl_setopt($ch,curlopt_url,$url); // 抓取url并把它传递给浏览器 curl_setopt($ch,curlopt_header,0); curl_exec($ch); // 执行请求 curl_close($ch); }
1.查看代码的时候检查是否使用curl_setopt( )函数;
2.在看传入的url是否是来自外部;
防护
跳转的url参数只能是白名单里面的url。
黄山市民网:https://www.huangshanshimin.com/