• PHP程式開發網站安全簡介

    PHP 程式語言被廣泛運用在網站的建置與開發,

    這篇文章主要探討用PHP 程式語言開發網站時,

    設定上或是PHP 使用上所要注意的地方,分為下列五大部分:

    • 使用者輸入的變數
    • 檔案存取的 API
    • 動態指令執行的 API
    • 資料庫存取 API
    • 境變數設定

    另外,可以 ASP .NET 可以參考這篇

    http://www.qa-knowhow.com/?p=698

    使用者輸入變數

    PHP 可以透過變數讀取使用者輸入資料,

    這些使用者輸入資料建議做一定程度的檢查,而非直接處理或是儲存至資料庫

    $_POST
    $HTTP_POST_VARS
    $_GET
    $HTTP_GET_VARS
    Contains
    $_COOKIE
    $HTTP_COOKIE_VARS
    $_FILES
    $HTTP_POST_FILES
    $_SERVER[‘REQUEST_METHOD’]$_SERVER[‘REQUEST_URI’]$_SERVER[‘QUERY_STRING’]$_SERVER[‘HTTP_USER_AGENT’]$_SERVER[‘HTTP_REFERER’]
    $_REQUEST

     

    檔案存取

    如果存取的檔案名稱經由使用者輸入透過下列 API 執行,

    那麼駭客就有可能讀取到其他非預期的系統檔案。

    • fopen
    • readfile
    • file
    • fpassthru
    • gzopen
    • gzfile
    • gzpassthru
    • readgzfile
    • copy
    • rename
    • rmdir
    • mkdir
    • unlink
    • file_get_contents
    • file_put_contents
    • parse_ini_file

     

    資料庫相關存取

    PHP 中支援資料庫存取的API 相關的輸入值必須做一定的驗證,避免SQL injection 的發生

    • mysql_query
    • mssql_query
    • pg_query

     

    動態執行程式碼

    下列 API 因為可以動態執行程式碼或是執行系統指令,因此盡量避免使用。

    • eval
    • exec
    • passthru
    • popen
    • proc_open
    • shell_exec
    • system

     

    PHP 設定

    allow_url_fopen  = 0

    這個值預設為 =1 ,也就是允許遠端檔案存取。這樣一來也會造成檔案存取的資訊安全風險。建議將該設定值設定為 0

     

    safe_mode = 1

    這個值safe_mode建議設定為 enabled 。PHP 將會對於一些危險的 API 限制執行。

    例如:下列兩個 API 就會被停止使用,避免 OS command injection。

    • shell_exec
    • exec

     

    magic_quotes_gpc = 1

    這個值建議設定為 enabled。PHP 將會對於 ‘ 或是 ” 等符號進行編碼。

    這樣可以避免輸入值為潛在的程式碼,而讓PHP 執行。也會避免 SQL injection 的攻擊。

    然而,額外的編碼值有可能會造成非預期的結果。

    所以,針對 SQL injection的防護來說,還是建議使用 Prepared SQL Statement 或是 stored procedure.

     

    display_errors = 0

    這個值可以避免將過多的錯誤訊息 (程式碼錯誤、版本資訊等)回傳給browser 端。因為駭客會利用這些訊息得知Web Server程式碼的運作與相關本版資訊。

     

    file_uploads = 0

    這個設定值將決定是否允許檔案上傳。如果設定允許檔案上傳,就必須對上傳的檔案內容、型態與檔名做檢查,以免駭客上傳有害的檔案。

    可另外參考這篇 “檔案上傳的資訊安全風險”

    http://www.qa-knowhow.com/?p=389

     

    總結

    這篇文章介紹幾個重要 PHP 網站開發需要注意的地方:

    • 使用者輸入的變數
    • 檔案存取的 API
    • 動態指令執行的 API
    • 資料庫存取 API
    • 境變數設定

    這些API 並須對於使用者輸入的資料做進一步的檢查,才能夠進一步的執行與儲存。

    進行 Code Review 時,針對這幾個重點再次檢視相關輸入的處理,讓網站安全更加周全。

     

     參考資料:

     https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet

     

    Posted by Tony @ 7:31 pm

    Tags: , , , ,

  • Leave a Reply

    Your email address will not be published.