<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            php語言

            淺談PHP 安全性

            時間:2025-04-29 12:21:45 php語言 我要投稿
            • 相關推薦

            淺談PHP 安全性

              本文所討論的安全性環境是在Linux+Apache+Mysql+PHP。超出此范圍的安全性問題不在本文范疇之內。

              一、apache server安全性設置

              1、以Nobody用戶運行

              一般情況下,Apache是由Root 來安裝和運行的。如果ApacheServer進程具有Root用戶特權,那么它將給系統的安全構成很大的威脅,應確保Apache Server進程以最可能低的權限用戶來運行。通過修改httpd.conf文件中的下列選項,以Nobody用戶運行Apache 達到相對安全的目的。

              User nobody

              Group# -1

              2、ServerRoot目錄的權限

              為了確保所有的配置是適當的和安全的,需要嚴格控制Apache 主目錄的訪問權限,使非超級用戶不能修改該目錄中的內容。Apache 的主目錄對應于Apache Server配置文件httpd.conf的Server Root控制項中,應為:

              Server Root /usr/local/apache

              3、SSI的配置

              在配置文件access.conf 或httpd.conf中的確Options指令處加入Includes NO EXEC選項,用以禁用Apache Server 中的執行功能。避免用戶直接執行Apache 服務器中的執行程序,而造成服務器系統的公開化。

              Options Includes Noexec

              4、阻止用戶修改系統設置

              在Apache 服務器的配置文件中進行以下的設置,阻止用戶建立、修改 .htaccess文件,防止用戶超越能定義的系統安全特性。

              AllowOveride None

              Options None

              Allow from all

              然后再分別對特定的目錄進行適當的配置。

              5、改變Apache 服務器的缺省訪問特性

              Apache 的默認設置只能保障一定程度的安全,如果服務器能夠通過正常的映射規則找到文件,那么客戶端便會獲取該文件,如http://localhost/~ root/ 將允許用戶訪問整個文件系統。在服務器文件中加入如下內容:

              order deny,ellow

              Deny from all

              將禁止對文件系統的缺省訪問。

              6、CGI腳本的安全考慮

              CGI腳本是一系列可以通過Web服務器來運行的程序。為了保證系統的安全性,應確保CGI的作者是可信的'。對CGI而言,最好將其限制在一個特定的目錄下,如cgi-bin之下,便于管理;另外應該保證CGI目錄下的文件是不可寫的,避免一些欺騙性的程序駐留或混跡其中;如果能夠給用戶提供一個安全性良好的CGI程序的模塊作為參考,也許會減少許多不必要的麻煩和安全隱患;除去CGI目錄下的所有非業務應用的腳本,以防異常的信息泄漏。

              7、SSL鏈接加密

              以上這些常用的舉措可以給Apache Server 一個基本的安全運行環境,顯然在具體實施上還要做進一步的細化分解,制定出符合實際應用的安全配置方案。

              二、PHP安全性設置

              服務器并不能阻止所有的安全問題,例如程序漏洞問題、用戶輸入表單問題、PHP文件權限問題等。 也可以通過一些手段來迷惑黑客或者別有用心者。

              1、程序代碼漏洞問題

              很多 PHP 程序所存在的重大弱點并不是 PHP 語言本身的問題,而是編程者的安全意識不高而導致的。因此,必須時時注意每一段代碼可能存在的問題,去發現非正確數據提交時可能造成的影響。

              <?php

              unlink($evil_var);

              fwrite($fp,$evil_var);

              system($evil_var);

              exec($evil_var);

              ?>

              必須時常留意你的代碼,以確保每一個從客戶端提交的變量都經過適當的檢查,然后問自己以下一些問題:

              此腳本是否只能影響所預期的文件?

              非正常的數據被提交后能否產生作用?

              此腳本能用于計劃外的用途嗎?

              此腳本能否和其它腳本結合起來做壞事?

              是否所有的事務都被充分記錄了?

              在寫代碼的時候問自己這些問題,否則以后可能要為了增加安全性而重寫代碼了。注意了這些問題的話,也許還不完全能保證系統的安全,但是至少可以提高安全性。

              還可以考慮關閉 register_globals,magic_quotes 或者其它使編程更方便但會使某個變量的合法性,來源和其值被搞亂的設置。

              2、用戶輸入表單問題

              驗證用戶輸入的.任何數據,保證PHP代碼的安全。

              注意1:JS只是為了提高來訪用戶的體驗而產生的,而不是驗證的工具。因為任何一個來訪的用戶都可能會,也有可能無意間就禁用了客戶端腳本的執行,從而跳過這層驗證。所以我們必須在PHP的服務器端程序上檢驗這些數據。

              注意2:不要使用$_SERVER[‘HTTP_REFERER’]這個超級變量來檢查數據的來源地址,一個很小的菜鳥黑客都會利用工具來偽造這個變量的數據,盡可能利用Md5,或者rand等函數來產生一個令牌,驗證來源的時候,驗證這個令牌是否匹配。

              3、PHP文件權限問題

              PHP 被設計為以用戶級別來訪問文件系統,所以完全有可能通過編寫一段 PHP 代碼來讀取系統文件如/etc/passwd,更改網絡連接以及發送大量打印任務等等。因此必須確保 PHP 代碼讀取和寫入的是合適的文件。 請看下面的代碼,用戶想要刪除自己主目錄中的一個文件。假設此情形是通過 web 界面來管理文件系統,因此 Apache 用戶有權刪除用戶目錄下的文件。

              <?php

              $username=$_POST['user_submitted_name'];

              $homedir="/home/$username";

              $file_to_="$userfile";

              unlink("$homedir/$userfile");

              echo"$file_to_ has been d!";

              ?>

              既然 username 變量可以通過用戶表單來提交,那就可以提交別人的用戶名和文件名,并刪除該文件。這種情況下,就要考慮其它方式的認證:

              -只給 PHP 的 web 用戶很有限的權限。 -檢查所有提交上來的變量。 -以下是更加安全的文件名和變量的驗證和檢查:

              <?php

              $username=$_SERVER['REMOTE_USER'];

              $homedir="/home/$username";

              if(!ereg('^[^./][^/]*$',$userfile))

              die('bad filename');

              if(!ereg('^[^./][^/]*$',$username))

              die('bad username');

              ?>

              4、隱藏PHP擴展名

              一般而言,通過隱藏的手段提高安全性被認為是作用不大的做法。但某些情況下,盡可能的多增加一份安全性都是值得的。

              一些簡單的方法可以幫助隱藏 PHP,這樣做可以提高攻擊者發現系統弱點的難度。在 php.ini 文件里設置 expose_php = off ,可以減少他們能獲得的有用信息。

              另一個策略就是讓 web 服務器用 PHP 解析不同擴展名。無論是通過 .htaccess 文件還是 Apache 的配置文件,都可以設置能誤導攻擊者的文件擴展名:

              # 使PHP看上去像其它的編程語言

              AddType application/x-httpd-php .asp .py .pl

              # 使 PHP 看上去像未知的文件類型

              AddType application/x-httpd-php .bop .foo .133t

              # 使 PHP 代碼看上去像HTML頁面

              AddType application/x-httpd-php .htm .html

              要讓此方法生效,必須把 PHP 文件的擴展名改為以上的擴展名。這樣就通過隱藏來提高了安全性,雖然防御能力很低而且有些缺點。

            【淺談PHP 安全性】相關文章:

            PHP安全性漫談07-20

            PHP中的安全性知識10-31

            六個常見PHP安全性攻擊10-04

            解析php安全性問題中的Null字符問題10-12

            淺談php中curl和fsockopen的應用08-26

            淺談php自定義錯誤日志10-20

            淺談php浮點數比較方法詳解09-02

            淺談PHP擴展模塊Pecl和Pear以及Perl的區別07-27

            php學習之php配置07-15

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院