中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
PHP程序安全策略
PHP最初是被稱作Personal Home Page,后來隨著PHP成為一種非常流行的腳本語言,名稱也隨之改變了,叫做Professional HyperText PreProcessor。以PHP4.2為例支持它的WEB服務器有:Apache, Microsoft Internet information Sereve, Microsoft Personal web Server,AOLserver,Netscape Enterprise 等等。
  PHP是一種功能強大的語言和解釋器,無論是作為模塊方式包含到web服務器里安裝的還是作為單獨的CGI程序程序安裝的,都能訪問文件、執(zhí)行命令或者在服務器上打開鏈接。而這些特性都使得PHP運行時帶來安全問題。雖然PHP是特意設(shè)計成一種比用Perl或C語言所編寫的CGI程序要安全的語言,但正確使用編譯時和運行中的一些配置選項以及恰當?shù)膽镁幋a將會保證其運行的安全性。

  一、安全從開始編譯PHP開始。

  在編譯PHP之前,首先確保操作系統(tǒng)的版本是最新的,必要的補丁程序必須安裝過。另外使用編譯的PHP也應當是最新的版本,關(guān)于PHP的安全漏洞也常有發(fā)現(xiàn),請使用最新版本,如果已經(jīng)安裝過PHP請升級為最新版本:4.2.3。

  相關(guān)鏈接:http://security.e-matters.de/advisories/012002.html

  安裝編譯PHP過程中要注意的3個問題:

  1、只容許CGI文件從特定的目錄下執(zhí)行:首先把處理CGI腳本的默認句柄刪除,然后在要執(zhí)行CGI腳本的目錄在http.conf 文件中加入ScriptAlias指令。

  #Addhadler cgi-script .cgi

  ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

  <Directory "/usr/local/apache/cgi-bin‘>

  AllowOverride None

  Options None

  Order allow,deny

  Allow from all

  </Directory>

  <Directory "/home/*/public_html/cgi-bin">

  AllowOverride None

  Options ExecCGI

  Order allow,deny

  Allow from all

  </Directory>

  

  SriptAlias的第一個參數(shù)指明在Web中的可用相對路徑,第二個參數(shù)指明腳本放在服務器的目錄。應該對每個目錄

  別名都用Directory,這樣可使得除系統(tǒng)管理員之外的人不知道Web服務器上CGI腳本的清單。

  Directory允許用戶創(chuàng)建自己的CGI腳本。也可用SriptAliasMatch,但Directory更容易使用。 允許用戶創(chuàng)建自己

  CGI腳本可能會導致安全問題,你可能不希望用戶創(chuàng)建自己的CGI。 Apache默認配置是注釋掉cgi—script的處理句柄,但有/cgi-bin目錄使用SriptAlias和Directory指令。 你也可禁止CGI執(zhí)行,但仍允許執(zhí)行PHP腳本。

  2.把PHP解析器放在web目錄外

  把PHP解析器放在Web目錄樹外是非常重要的做法。這樣可以防止web服務器對PHP的解析器的濫用。特別是

  不要把PHP解析器放在cgi-bin或允許執(zhí)行CGI程序的目錄下。然而,使用Action解析腳本是不可能的,因為用Action指令時,PHP解析器大多數(shù)要放在能夠執(zhí)行CGI的目錄下只有當PHP腳本作為CGI程序執(zhí)行時,才能把PHP解析器放在Web目錄樹之外。

  如果希望PHP腳本作為CGI程序執(zhí)行(這們可以把PHP解析器放在Web目錄樹之外),可以這樣:

  ( 1)所有的PHP腳本必須位于能執(zhí)行CGI程序的目錄里。

  ( 2)腳本必須是可執(zhí)行的(僅在UNIX/Linux機器里)。

  (3)腳本必須在文件頭包括PHP解析器的路徑。

  你可用下面命令使PHP腳本為可執(zhí)行:

  #chmod +x test.php4

  這樣使在當前目錄下的文件名為test.PhP4的腳本變?yōu)榭蓤?zhí)行。 下面是一個能作為CGI程序運行的PHP腳的小例子。

  #!/usr/local/bin/php

  echo "This is a my small cgi program”

  3. 按Apache模塊方式安裝:

  當將PHP作為Apache模塊使用時,它將繼承Apche的用戶權(quán)限(一般情況下用戶為“nobody”)。這一點對于安全性和驗證有不少影響。例如,使用PHP訪問數(shù)據(jù)庫,除非數(shù)據(jù)庫支持內(nèi)建的訪問控制,將不得不設(shè)置數(shù)據(jù)庫對于用戶“nobody”的可訪問權(quán)限。這將意味著惡意的腳本在沒有訪問用戶名和密碼,也能訪問并修改數(shù)據(jù)庫。通過Apache驗證來保護數(shù)據(jù)不被暴露,或者也可使用LDAP、.htaccess文件等設(shè)計自己的訪問控制模型,并在PHP腳本中將此代碼作為其中部分引入。 通常,一旦安全性建立,此處PHP用戶(此情形即Apache用戶)就風險大大降低了,會發(fā)現(xiàn)PHP護現(xiàn)在已被封禁了將可能的染毒文件寫入用戶目錄的能力。 此處最常犯的安全性錯誤是賦予Apache服務器根(root)權(quán)限。 將Apache用戶權(quán)限提升到根權(quán)限是極端危險的??赡軙<罢麄€系統(tǒng),因此要小心使用sudo,chroot安全隱患大的命令等。除非你對安全有絕對的掌握,否則不要讓其以ROOT權(quán)限運行。


更安全的php 上


  二、讓PHP的使用更安全。

  1、以安全模式運行PHP

  以安全模式運行PHP是使PHP腳本安全使用的好方法,特別是在允許用戶使用自己開發(fā)的PHP腳本時。使用安全模式會使PHP在運行函數(shù)時檢查是否存在安全問題。 include、readfile、fopen、file、unlink、rmdir等等:被包含的文件或者該文件所在目錄的所有者必須是正在運行的腳本的所有者; Exec、System、Passthm等等:要執(zhí)行的程序必須位于特定的目錄(默認為/usr/local/php/bin)。編譯PHP時可以用—with-exe-dir選項設(shè)定這個值。

  Mysql—Connect:這個函數(shù)用可選的用戶名連接MySQL數(shù)據(jù)庫。在安全模式下,用戶名必須是當前被執(zhí)行的腳本的所有者,或運行httpd的用戶名(通常是nobody)。

  HTTP Authentication:包含HTTP驗證代碼腳本所有者的用戶ID(數(shù)字型)會自動加到驗證域。這樣可以防止有人通過抓取密碼的程序來欺騙同一個服務器上的HTTP驗證腳本。

  2、使用 用戶識別和驗證

  有時需要唯一地確認一個用戶。用戶通常由請求和響應系統(tǒng)確認。用戶名/口令組合就是這種系統(tǒng)的一個很好的例子,比如系統(tǒng)要求給出A1i的口令,響應的是Ali的口令。這樣驗證是因為只有Ali才知道這個口令。

 ?。?)服務器端用戶驗征

  這是用于服務端上對PHP程序要求最小的驗證方法。只要讓Apache來管理對用戶的驗證就行了。

  AuthName "Secret page" # The realm

  AuthType Basic

  # The password file has been placed outside the web tree

  AuthUserFile /home/car2002/website.pw

  <LIMIT GET POST>

  require valid-user

  </LIMIT>

  

  你需要把上述文件(文件名為.htaccess)放在需要保護的地方。用Apache的htpasswd程序,可以建立包含用戶名和口令組合的文件。把這個文件放在Web目錄樹之外,只讓該文件的擁有者查看和修改這個文件。當然,Web服務器必須能夠讀取這個文件。

  如果想讀取被保護的目錄,Web服務器要求瀏覽器提供用戶名和密碼。瀏覽器彈出對話框,用戶可以輸入他們的用戶名和密碼。如果用戶名和密碼與口令文件中相符合,就允許用戶讀取被保護的頁面;反之,將得到錯誤頁面,告訴用戶沒有通過驗證。被保護的域會顯示出來以便用戶知道輸入那個用戶名和密碼。

 ?。?)在PHP中進行用戶識別和驗證

  和在Apache服務器端進行用戶識別和驗證相比,在PHP進行用戶識別和驗證有以下優(yōu)點:

  A、可注銷。

  B、可失效。如用戶登錄后40分鐘沒有瀏覽你的網(wǎng)站,你可強制他們重新通過驗證。

  C、可定制。

  D、可基于數(shù)據(jù)庫。你可以用保存在各種各樣的數(shù)據(jù)庫里的數(shù)據(jù)來驗證用戶,并且記錄訪問者訪問網(wǎng)站的詳細日志。

  E、可用于每個頁面。你可在每個頁面上決定是否需要驗證。

  F、你也可以使瀏覽器彈出對話框。下面的例子顯示了怎樣從,MySQL數(shù)據(jù)庫中檢索用名和口令:讓用戶填人用戶名和口令。

  <?

  if(!isset($PHP_AUTH_USER)) {

  Header("WWW-authenticate: basic realm=\"restricted area\"");

  Header( "HTTP/I.0 401 Unauthorized");

  echo "You failed to provide the correct password...\n";

  exit;

  } else {

  mysql_select_db("users") ;

  $user_id = strtolower($PHP^AUTH_USER);

  $result = mysql_query("SELECT password FROM users " .

  "WHERE username = ‘$username‘") ;

  $row = mysql_fetch_array($result) ;

  if ($PHP_AUTH_PW != $row["password"]) {

  Header( "WWW-authenticate: basic realm=\"restricted area\"

  Header( "HTTP/I.0 401 Unauthorized");

  echo "You failed to provide the correct password...\n" ;

  exit;

  }

  }

  ?>

  Only users with a working username/password combination can see this

  

  (3) 檢測IP地址

  一般人們普遍認為一個IP地址唯一地確定一個訪問者。但實際上并不是這樣的。代理服務器可用相同的IP地址發(fā)送不同用戶的請求。另外IP地址的盜用也普遍存在。檢測 IP地址有它們的用處,但相當有限。例如你是一個論壇版主,你發(fā)現(xiàn)某個用戶粘貼一些不健康的、違法的內(nèi)容。你可以找到他的IP地址,把從這個IP連進來的用戶逐出論壇。使用下面一行命令將會得到某個特定請求的源IP地址:

  # ip = $REMOTE_ADDR

  4、使用PHP加密技術(shù)

  在PHP中,加密技術(shù)主要用來加密信息、產(chǎn)生校驗和和摘要。使用加密技術(shù)可大大地增強安全性能。 這里只講述使用加密技術(shù)的一些概念。如果你想進一步了解,應參考一些好的加密技術(shù)資料。加密技術(shù)的標準是Bmce Schneier的應用加密技術(shù),非常值得一讀。他的網(wǎng)站(www.counterpane.com/labs.html )是在互聯(lián)網(wǎng)上查找加密技術(shù)資料的好起點。數(shù)據(jù)加密是一個非常復雜的話題,這里只簡單介紹一下。

  PHP中大多數(shù)的加密函數(shù)由mcrypt庫和mhash庫提供。你需要在系統(tǒng)中裝上這兩個庫,在編譯時加上--ith-mcrypt和--ith-hash選項。PHP從 3.013版本開始支持mcrypt庫。

  5、使用具有SSL技術(shù)

  SSI是英文Server Side Includes的縮寫。使用具有SSL(安全套接字協(xié)議層)功能的web服務器,可以不用改變一行代碼而提高網(wǎng)站的安全性能。SSI使用加密方法來保護web服務器和瀏覽器之間的信息流。SSL不僅用于加密在互聯(lián)網(wǎng)上傳遞的數(shù)據(jù)流,而且還提供雙方身份驗證。這樣,你就可以安全地在線購物而不必擔心別人矢隨你的信用卡的信息。這種特性使得SSL適用于那些交換重要信息的地方,像電子商務和基于Web的郵件。

  SSL使用公共密鑰加密技術(shù),服務器在連接結(jié)束時給客戶端發(fā)送公用密鑰用來加密信息,而加密的信息只有服務器用它自己持有的專用密鑰才能解開??蛻舳擞霉妹荑€加密數(shù)據(jù),并且發(fā)送給服務端自己的密鑰,以唯一確定自己,防止在系統(tǒng)兩端之間有人冒充服務端或客戶端進行欺騙。

  加密的HTTP連接用443端口號代替80端口號,以區(qū)別于普通的不加密的HTTP??蛻舳耸褂眉用蹾TTP連接時會自動使用443端口而不是80端口。這使得服務端更容易作出相應的響應。

  在Apache服務器下,可以通過直接編輯服務器配置文件或者在需要使用SSI的目錄中創(chuàng)建.htaccess文件來啟動SSI。登錄到服務器,找到配置文件的存放目錄,使用文字編輯器打開文件srm.conf,找到以下幾行:

  # If you want to use server side includes, or CGI outside
# ScriptAliased directories, uncomment the following lines.
#AddType text/x-server-parsed-html .shtml
#AddType application/x-httpd-CGI .CGI

  將以AddType開頭的兩行并且去掉每一行最前面的"#"符號即可。保存所做的修改,然后再打開文件access.conf。

     ?。糄irectory /usr/local/etc/httpd/htdocs>
    # This may also be "None", "All", or any combination of "Indexes",
    # "Includes", or "FollowSymLinks"
    Options Indexes FollowSymLinks
   ?。?Directory>

      將其中的Options Indexes FollowSymLinks改為:Options Indexes FollowSymLinks Includes 即可。
2. PHP安全設(shè)置

PHP本身再老版本有一些問題,比如在 php4.3.10和php5.0.3以前有一些比較嚴重的bug,所以推薦使用新版。另外,目前鬧的轟轟烈烈的SQL Injection也是在PHP上有很多利用方式,所以要保證安全,PHP代碼編寫是一方面,PHP的配置更是非常關(guān)鍵。
我們php手工編譯安裝的,php的默認配置文件在 /usr/local/php/conf/php.ini,我們最主要就是要配置php.ini中的內(nèi)容,讓我們執(zhí)行php能夠更安全。
整個PHP中的安全設(shè)置主要是為了防止phpshell和SQL Injection的攻擊,一下我們慢慢探討。


(1) 打開php的安全模式
php的安全模式是個非常重要的內(nèi)嵌的安全機制,能夠控制一些php中的函數(shù),比如system(),同時把很多文件操作函數(shù)進行了權(quán)限控制,也不允許對某些關(guān)鍵文件的文件,比如/etc/passwd,但是默認的php.ini是沒有打開安全模式的,我們把它打開:
safe_mode = on

(2) 用戶組安全
當safe_mode打開時,safe_mode_gid被關(guān)閉,那么php腳本能夠?qū)ξ募M行訪問,而且相同組的用戶也能夠?qū)ξ募M行訪問。
建議設(shè)置為:
safe_mode_gid = off
如果不進行設(shè)置,可能我們無法對我們服務器網(wǎng)站目錄下的文件進行操作了,比如我們需要對文件進行操作的時候。

(3) 安全模式下執(zhí)行程序主目錄
如果安全模式打開了,但是卻是要執(zhí)行某些程序的時候,可以指定要執(zhí)行程序的主目錄:
safe_mode_exec_dir = /usr/bin
一般情況下是不需要執(zhí)行什么程序的,所以推薦不要執(zhí)行系統(tǒng)程序目錄,可以指向一個目錄,然后把需要執(zhí)行的程序拷貝過去,比如:
safe_mode_exec_dir = /tmp/cmd
但是,我更推薦不要執(zhí)行任何程序,那么就可以指向我們網(wǎng)頁目錄:
safe_mode_exec_dir = /usr/www

(4) 安全模式下包含文件
如果要在安全模式下包含某些公共文件,那么就修改一下選項:
safe_mode_include_dir = /usr/www/include/
其實一般php腳本中包含文件都是在程序自己已經(jīng)寫好了,這個可以根據(jù)具體需要設(shè)置。

(5) 控制php腳本能訪問的目錄
使用open_basedir選項能夠控制PHP腳本只能訪問指定的目錄,這樣能夠避免PHP腳本訪問/etc/passwd等文件,一定程度上限制了phpshell的危害,我們一般可以設(shè)置為只能訪問網(wǎng)站目錄:
open_basedir = /usr/www

(6) 關(guān)閉危險函數(shù)
如果打開了安全模式,那么函數(shù)禁止是可以不需要的,但是我們?yōu)榱税踩€是考慮進去。比如,我們覺得不希望執(zhí)行包括system()等在那的能夠執(zhí)行命令的php函數(shù),或者能夠查看php信息的phpinfo()等函數(shù),那么我們就可以禁止它們:
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
如果你要禁止任何文件和目錄的操作,那么可以關(guān)閉很多文件操作
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
以上只是列了部分不叫常用的文件處理函數(shù),你也可以把上面執(zhí)行命令函數(shù)和這個函數(shù)結(jié)合,就能夠抵制大部分的phpshell了。

(7) 關(guān)閉PHP版本信息在http頭中的泄漏
我們?yōu)榱朔乐购诳瞳@取服務器中php版本的信息,可以關(guān)閉該信息斜路在http頭中:
expose_php = Off
比如黑客在 telnet www.irunnet.com 80 的時候,那么將無法看到PHP的信息。

關(guān)閉注冊全局變量

打開php的安全模式
php的安全模式是個非常重要的內(nèi)嵌的安全機制,能夠控制一些php中的函數(shù),比如system(),同時把很多文件操作函數(shù)進行了權(quán)限控制,也不允許對某些關(guān)鍵文件的文件,比如/etc/passwd,但是默認的php.ini是沒有打開安全模式的,我們把它打開:
safe_mode = on

(2) 用戶組安全
當safe_mode打開時,safe_mode_gid被關(guān)閉,那么php腳本能夠?qū)ξ募M行訪問,而且相同組的用戶也能夠?qū)ξ募M行訪問。
建議設(shè)置為:
safe_mode_gid = off
如果不進行設(shè)置,可能我們無法對我們服務器網(wǎng)站目錄下的文件進行操作了,比如我們需要對文件進行操作的時候。

(3) 安全模式下執(zhí)行程序主目錄
如果安全模式打開了,但是卻是要執(zhí)行某些程序的時候,可以指定要執(zhí)行程序的主目錄:
safe_mode_exec_dir = /usr/bin
一般情況下是不需要執(zhí)行什么程序的,所以推薦不要執(zhí)行系統(tǒng)程序目錄,可以指向一個目錄,然后把需要執(zhí)行的程序拷貝過去,比如:
safe_mode_exec_dir = /tmp/cmd
但是,我更推薦不要執(zhí)行任何程序,那么就可以指向我們網(wǎng)頁目錄:
safe_mode_exec_dir = /usr/www

(4) 安全模式下包含文件
如果要在安全模式下包含某些公共文件,那么就修改一下選項:
safe_mode_include_dir = /usr/www/include/
其實一般php腳本中包含文件都是在程序自己已經(jīng)寫好了,這個可以根據(jù)具體需要設(shè)置。

(5) 控制php腳本能訪問的目錄
使用open_basedir選項能夠控制PHP腳本只能訪問指定的目錄,這樣能夠避免PHP腳本訪問/etc/passwd等文件,一定程度上限制了phpshell的危害,我們一般可以設(shè)置為只能訪問網(wǎng)站目錄:
open_basedir = /usr/www

(6) 關(guān)閉危險函數(shù)
如果打開了安全模式,那么函數(shù)禁止是可以不需要的,但是我們?yōu)榱税踩€是考慮進去。比如,我們覺得不希望執(zhí)行包括system()等在那的能夠執(zhí)行命令的php函數(shù),或者能夠查看php信息的phpinfo()等函數(shù),那么我們就可以禁止它們:
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
如果你要禁止任何文件和目錄的操作,那么可以關(guān)閉很多文件操作
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
以上只是列了部分不叫常用的文件處理函數(shù),你也可以把上面執(zhí)行命令函數(shù)和這個函數(shù)結(jié)合,就能夠抵制大部分的phpshell了。

(7) 關(guān)閉PHP版本信息在http頭中的泄漏
我們?yōu)榱朔乐购诳瞳@取服務器中php版本的信息,可以關(guān)閉該信息斜路在http頭中:
expose_php = Off
比如黑客在 telnet www.irunnet.com 80 的時候,那么將無法看到PHP的信息。

關(guān)閉注冊全局變量

在PHP中提交的變量,包括使用POST或者GET提交的變量,都將自動注冊為全局變量,能夠直接訪問,這是對服務器非常不安全的,所以我們不能讓它注冊為全局變量,就把注冊全局變量選項關(guān)閉:
register_globals = Off
當然,如果這樣設(shè)置了,那么獲取對應變量的時候就要采用合理方式,比如獲取GET提交的變量var,那么就要用$_GET[‘var‘]來進行獲取,這個php程序員要注意。

(9) 打開magic_quotes_gpc來防止SQL注入
SQL注入是非常危險的問題,小則網(wǎng)站后臺被入侵,重則整個服務器淪陷,所以一定要小心。php.ini中有一個設(shè)置:
magic_quotes_gpc = Off
這個默認是關(guān)閉的,如果它打開后將自動把用戶提交對sql的查詢進行轉(zhuǎn)換,比如把 ‘ 轉(zhuǎn)為 \‘等,這對防止sql注射有重大作用。所以我們推薦設(shè)置為:
magic_quotes_gpc = On

(10) 錯誤信息控制
一般php在沒有連接到數(shù)據(jù)庫或者其他情況下會有提示錯誤,一般錯誤信息中會包含php腳本當前的路徑信息或者查詢的SQL語句等信息,這類信息提供給黑客后,是不安全的,所以一般服務器建議禁止錯誤提示:
display_errors = Off
如果你卻是是要顯示錯誤信息,一定要設(shè)置顯示錯誤的級別,比如只顯示警告以上的信息:
error_reporting = E_WARNING & E_ERROR
當然,我還是建議關(guān)閉錯誤提示。

(11) 錯誤日志
建議在關(guān)閉display_errors后能夠把錯誤信息記錄下來,便于查找服務器運行的原因:
log_errors = On
同時也要設(shè)置錯誤日志存放的目錄,建議根apache的日志存在一起:
error_log = /usr/local/apache2/logs/php_error.log
注意:給文件必須允許apache用戶的和組具有寫的權(quán)限。

3. Mysql的安全設(shè)置

我們把Mysql安裝在 /usr/local/mysql目錄下,我們必須建立一個用戶名為mysql,組為mysql的用戶來運行我們的mysql,同時我們把它的配置文件拷貝到 /etc目錄下:
# cp suport-files/my-medium.cnf /etc/my.cnf
chown root:sys /etc/my.cnf
chmod 644 /etc/my.cnf

使用用戶mysql來啟動我們的mysql:
# /usr/local/mysql/bin/mysqld_safe -user=mysql &

(1) 修改root用戶的的口令
缺省安裝的mysql是沒有密碼的,所以我們要修改,以防萬一。下面采用三種方式來修改root的口令。

* 用mysqladmin命令來改root用戶口令
# mysqladmin -uroot password test
這樣,MySQL數(shù)據(jù)庫root用戶的口令就被改成test了。(test只是舉例,我們實際使用的口令一定不能使用這種易猜的弱口令)

* 用set password修改口令:
mysql> set password for root@localhost=password(‘test‘);
這時root用戶的口令就被改成test了。

* 直接修改user表的root用戶口令  
mysql> use mysql;
mysql> update user set password=password(‘test‘) where user=‘root‘;
mysql> flush privileges;

這樣,MySQL數(shù)據(jù)庫root用戶的口令也被改成test了。其中最后一句命令flush privileges的意思是強制刷新內(nèi)存授權(quán)表,否則用的還是緩沖中的口令,這時非法用戶還可以用root用戶及空口令登陸,直到重啟MySQL服務器。

(2) 刪除默認的數(shù)據(jù)庫和用戶
我們的數(shù)據(jù)庫是在本地,并且也只需要本地的php腳本對mysql進行讀取,所以很多用戶不需要。mysql初始化后會自動生成空用戶和test庫,這會對數(shù)據(jù)庫構(gòu)成威脅,我們?nèi)縿h除。
我們使用mysql客戶端程序連接到本地的mysql服務器后出現(xiàn)如下提示:
mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not(host="localhost" and user="root");
mysql> flush privileges;

(3) 改變默認mysql管理員的名稱
這個工作是可以選擇的,根據(jù)個人習慣,因為默認的mysql的管理員名稱是root,所以如果能夠修改的話,能夠防止一些腳本小子對系統(tǒng)的窮舉。我們可以直接修改數(shù)據(jù)庫,把root用戶改為"admin"
mysql> use mysql;
mysql> update user set user="admin" where user="root";
mysql> flush privileges;

(4) 提高本地安全性
提高本地安全性,主要是防止mysql對本地文件的存取,比如黑客通過mysql把/etc/passwd獲取了,會對系統(tǒng)構(gòu)成威脅。mysql對本地文件的存取是通過SQL語句來實現(xiàn),主要是通過Load DATA LOCAL INFILE來實現(xiàn),我們能夠通過禁用該功能來防止黑客通過SQL注射等獲取系統(tǒng)核心文件。
禁用該功能必須在 my.cnf 的[mysqld]部分加上一個參數(shù):
set-variable=local-infile=0

(5) 禁止遠程連接mysql
因為我們的mysql只需要本地的php腳本進行連接,所以我們無需開socket進行監(jiān)聽,那么我們完全可以關(guān)閉監(jiān)聽的功能。
有兩個方法實現(xiàn):
* 配置my.cnf文件,在[mysqld]部分添加 skip-networking 參數(shù)
* mysqld服務器中參數(shù)中添加 --skip-networking 啟動參數(shù)來使mysql不監(jiān)聽任何TCP/IP連接,增加安全性。如果要進行mysql的管理的話,可以在服務器本地安裝一個phpMyadmin來進行管理。

(6) 控制數(shù)據(jù)庫訪問權(quán)限
對于使用php腳本來進行交互,最好建立一個用戶只針對某個庫有 update、select、delete、insert、drop table、create table等權(quán)限,這樣就很好避免了數(shù)據(jù)庫用戶名和密碼被黑客查看后最小損失。
比如下面我們創(chuàng)建一個數(shù)據(jù)庫為db1,同時建立一個用戶test1能夠訪問該數(shù)據(jù)庫。
mysql> create database db1;
mysql> grant select,insert,update,delete,create,drop privileges on db1.* to test1@localhost identified by ‘a(chǎn)dmindb‘;
以上SQL是創(chuàng)建一個數(shù)據(jù)庫db1,同時增加了一個test1用戶,口令是admindb,但是它只能從本地連接mysql,對db1庫有select,insert,update,delete,create,drop操作權(quán)限。

(7) 限制一般用戶瀏覽其他用戶數(shù)據(jù)庫
如果有多個數(shù)據(jù)庫,每個數(shù)據(jù)庫有一個用戶,那么必須限制用戶瀏覽其他數(shù)據(jù)庫內(nèi)容,可以在啟動MySQL服務器時加--skip-show-database 啟動參數(shù)就能夠達到目的。

( 忘記mysql密碼的解決辦法
如果不慎忘記了MySQL的root密碼,我們可以在啟動MySQL服務器時加上參數(shù)--skip-grant-tables來跳過授權(quán)表的驗證 (./safe_mysqld --skip-grant-tables &),這樣我們就可以直接登陸MySQL服務器,然后再修改root用戶的口令,重啟MySQL就可以用新口令登陸了。

(9) 數(shù)據(jù)庫文件的安全
我們默認的mysql是安裝在/usr/local/mysql目錄下的,那么對應的數(shù)據(jù)庫文件就是在/usr/local/mysql/var目錄下,那么我們要保證該目錄不能讓未經(jīng)授權(quán)的用戶訪問后把數(shù)據(jù)庫打包拷貝走了,所以要限制對該目錄的訪問。
我們修改該目錄的所屬用戶和組是mysql,同時改變訪問權(quán)限:
# chown -R mysql.mysql /usr/local/mysql/var
# chmod -R go-rwx /usr/local/mysql/var

(10) 刪除歷史記錄
執(zhí)行以上的命令會被shell記錄在歷史文件里,比如bash會寫入用戶目錄的.bash_history文件,如果這些文件不慎被讀,那么數(shù)據(jù)庫的密碼就會泄漏。用戶登陸數(shù)據(jù)庫后執(zhí)行的SQL命令也會被MySQL記錄在用戶目錄的.mysql_history文件里。如果數(shù)據(jù)庫用戶用SQL語句修改了數(shù)據(jù)庫密碼,也會因.mysql_history文件而泄漏。所以我們在shell登陸及備份的時候不要在-p后直接加密碼,而是在提示后再輸入數(shù)據(jù)庫密碼。
另外這兩個文件我們也應該不讓它記錄我們的操作,以防萬一。
# rm .bash_history .mysql_history
# ln -s /dev/null .bash_history
# ln -s /dev/null .mysql_history

(11) 其他
另外還可以考慮使用chroot等方式來控制mysql的運行目錄,更好的控制權(quán)限,具體可以參考相關(guān)文章。



4. vsFTPd安全設(shè)置

vsFTPd是一款非常著名的ftp daemon程序,目前包括Redhat.com在內(nèi)很多大公司都在使用,它是一款非常安全的程序,因為它的名字就叫:Very Secure FTP Daemon (非常安全的FTP服務器)。
vsftpd設(shè)置選項比較多,涉及方方面面,我們下面主要是針對安全方面進行設(shè)置。
目前我們的需求就是使用系統(tǒng)帳戶同時也作為是我們的FTP帳戶來進行我們文件的管理,目前假設(shè)我只需要一個帳戶來更新我的網(wǎng)站,并且我不希望該帳戶能夠登陸我們的系統(tǒng),比如我們的網(wǎng)站的目錄是在/usr/www下面,那么我們新建一個用戶ftp,它的主目錄是/usr/www,并且它的shell是/usr/sbin/nologin,就是沒有shell,防止該用戶通過ssh等登陸到系統(tǒng)。

下面在進行系統(tǒng)詳盡的設(shè)置,主要就是針對vsftpd的配置文件vsftpd.conf文件的配置。

(1) 禁止匿名用戶訪問, 我們不需要什么匿名用戶,直接禁止掉:
anonymous_enable=NO

(2) 允許本地用戶登陸,因為我們需要使用ftp用戶來對我們網(wǎng)站進行管理:
local_enable=YES

(3) 只允許系統(tǒng)中的ftp用戶或者某些指定的用戶訪問ftp,因為系統(tǒng)中帳戶眾多,不可能讓誰都訪問。
打開用戶文件列表功能:
userlist_enable=YES
只允許用戶文件列表中的用戶訪問ftp:
userlist_deny=NO
用戶名文件列表路徑:
userlist_file=/etc/vsftpd.user_list

然后在/etc下建立文件 vsftpd.user_list 文件,一行一個,把用戶ftp加進去,同時也可以加上你允許訪問的系統(tǒng)帳戶名。

(4) 禁止某些用戶登陸ftp:
pam_service_name=vsftpd
指出VSFTPD進行PAM認證時所使用的PAM配置文件名,默認值是vsftpd,默認PAM配置文件是/etc/pam.d/vsftpd。

/etc/vsftpd.ftpusers
VSFTPD禁止列在此文件中的用戶登錄FTP服務器,用戶名是一行一個。這個機制是在/etc/pam.d/vsftpd中默認設(shè)置的。

這個功能和(3)里的功能有點類似,他們倆能結(jié)合使用,那樣就最好了。

(5) 把本地用戶鎖定在自己的主目錄,防止轉(zhuǎn)到其他目錄,比如把/etc/passwd給下載了:
chroot_local_users=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
然后在/etc下建立vsftpd.chroot_list文件,里面把我們要限制的本地帳戶加進去,一行一個,我們加上ftp,防止它登陸到系統(tǒng)。

(6) 隱藏文件真實的所有用戶和組信息,防止黑客拿下ftp后查看更多系統(tǒng)用戶信息:
hide_ids=YES

(7) 取消ls -R命令,節(jié)省資源,因為使用該命令,在文件列表很多的時候?qū)⒗速M大量系統(tǒng)資源:
ls_recurse_enable=NO

( 上傳文件的默認權(quán)限,設(shè)置為022:
local_umask=022
如果要覆蓋刪除等,還要打開:
write_enable=YES

(9) ftp的banner信息,為了防止黑客獲取更多服務器的信息,設(shè)置該項:
ftpd_banner=banner string
把后面的banner string設(shè)為你需要的banner提示信息,為了安全,建議不要暴露關(guān)于vsFTPd的任何信息。
另外,如果你的信息比較多的話,可以設(shè)置為提示信息是讀取一個文件中的信息:
banner_file=/directory/vsftpd_banner_file

(10) 打開日志功能:
xferlog_enable=YES
同時設(shè)置日志的目錄:
xferlog_file=/var/log/vsftpd.log
啟用詳細的日志記錄格式:
xferlog_enable=YES

(11) 如果打開虛用戶功能等,那么建議關(guān)閉本地用戶登陸:
local_enable=NO


vsFTPd還有很多安全設(shè)置,畢竟人家的名字就是:Very Secure FTP Daemon,反正它的溢出漏洞什么的是很少的,如果要更安全,建議按照自己的需要設(shè)置vsftpd,設(shè)置的好,它絕對是最安全的。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
基于IIS的WEB服務器架建
Apache服務器的用戶認證 - 帝國程序開發(fā)
PHP安全配置
php防注入方法
boa_發(fā)布網(wǎng)站
中文FreeBSD用戶組 : 用FreeBSD構(gòu)建家庭網(wǎng)絡世界
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服