2017.W36 - 了解你在写的程式 Part II
> 了解用的每一个函数 直到被发现有漏洞为止
## 前言 ##
最近心很累 尤其是发现大家对资安都不怎么重视
冲功能的代价通常 半年之后会陆续需要擦屁股
只是最近看到屎的那个人是我 ...
## 内容 ##
cURL [0] 是一个常见的档案传输工具 用来上传、下载档案
也提供额外的 C 函式库 libcurl 让第三方使用
目前支援了多种常见的网络协议 包含 HTTP、FTPS、SCP、Telnet、IMAP 等
当需要操作 cURL 做额外设定的时候 可以使用 curl_easy_setopt 函数
最近发现 常犯的几个 libcurl 使用上的 '错误'
其一是 CURLOPT_SSL_VERIFYPEER [1] 设置为 0 表示不验证 HTTPS
另一个则是 CURLOPT_PROTOCOLS [2] 跟 CURLOPT_REDIR_PROTOCOLS
默认的 libcurl 会支援所有可以支援的 Protocol
稍有不慎 (也就是开放让使用者输入完整 URI) 会开启 File:// 等危险的本地协议
另一种 CURLOPT_REDIR_PROTOCOLS 没有设定正确
就容易有 SSRF 等安全疑虑存在
[0]: https://curl.haxx.se
[1]: https://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html
[2]: https://curl.haxx.se/libcurl/c/CURLOPT_PROTOCOLS.html