Open Redirect 的問題可以參考:
這兩個連結。主要是要避免 phishing 的問題上。
一開始是以「只允許 /
開頭」為條件過濾,但 protocol-relative 的 //www.example.com
可以繞開。
如果變成「只允許 /
開頭,但不允許 //
開頭」,是不是就沒事了呢?
在「Evolution of Open Redirect Vulnerability.」這邊又看到新招:「/\www.example.com
」。
想要用 parse_url()
檢查?沒問題:
$ php -a Interactive mode enabled php > var_dump(parse_url("/\\www.example.com")); array(1) { 'path' => string(17) "/\www.example.com" }
但實際測試會發現 IE8 與 Google Chrome 都會跳到 www.example.com (沃槽),其他瀏覽器就先不測了 ~_~
不過原文說的 ///www.example.com
在 PHP 上測試應該是不會過的?
$ php -a Interactive mode enabled php > var_dump(parse_url("///www.example.com")); bool(false)
反正又冒出一堆問題要處理了 ~_~