今天我得到一個錯誤,很驚訝得到它,因爲一切看起來都很好......在調用CGI時,Apache2中是否存在特殊情況,並且URI包含一個沒有值的單個查詢字符串參數?
我有一個用C++編寫的CGI,它接受查詢字符串的URI。查詢字符串就是選擇頁面等CGI安裝在一個Ubuntu安裝標準位置:
/usr/lib/cgi-bin/snapmanager.cgi
今天我完成了添加登錄屏幕並登錄後,我想添加一個註銷鏈接。鏈接只需在網址的末尾添加?logout
:
http://www.example.com/cgi-bin/snapmanager.cgi?logout
失敗。
檢查錯誤日誌,我得到一個錯誤,說「註銷」實際上出現在命令行上。令人驚訝的是,如果你問我!我嘗試過:
http://www.example.com/cgi-bin/snapmanager.cgi?logout=now
和一切按預期工作。在命令行上沒有註銷。
我也試過:
http://www.example.com/cgi-bin/snapmanager.cgi?logout&host=foo
這工作太。再一次,沒有在命令行上註銷。
但是,如果切換參數的位置再次失敗:
http://www.example.com/cgi-bin/snapmanager.cgi?host=foo&logout
所以看起來的Apache2叫我與logout
查詢字符串作爲命令行參數CGI當一個查詢字符串名稱是最後定義。
爲了以防萬一,我試圖在名稱的開頭添加破折號,果然,在我的日誌中顯示爲命令行開關!
error:snapmanager.cgi: option --logout is not supported.
真的很可怕。這是一個巨大的安全風險,如果你知道一個開關,可以「調整你的方式」...
是否記錄在某處?