国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
檔案上傳攻擊" >檔案上傳攻擊
首頁 後端開發(fā) php教程 PHP安全-檔案上傳攻擊

PHP安全-檔案上傳攻擊

Feb 22, 2017 am 09:26 AM



檔案上傳攻擊

#? 有時(shí)在除了標(biāo)準(zhǔn)的表單資料外,你還需要讓使用者進(jìn)行檔案上傳。由於檔案在表單中傳送時(shí)與其它的表單資料不同,你必須指定一個(gè)特別的編碼方式multipart/form-data:

CODE:

?

<form action="upload.php" method="POST"
enctype="multipart/form-data">

一個(gè)同時(shí)有普通表單資料和檔案的表單是一個(gè)特殊的格式,而指定編碼方式可以使瀏覽器能按該可格式的要求去處理。

? 允許使用者進(jìn)行選擇檔案並上傳的表單元素是很簡單的:

CODE:

?

<input type="file" name="attachment" />

此元素在各種瀏覽器中的外觀表現(xiàn)形式各有不同。傳統(tǒng)上,介面上包括一個(gè)標(biāo)準(zhǔn)的文字方塊及一個(gè)瀏覽按鈕,以使用戶能夠直接手動(dòng)輸入文件的路徑或透過瀏覽選擇。在Safari瀏覽器中只有瀏覽按鈕。幸運(yùn)的是,它們的作用與行為是相同的。

? 為了更好地示範(fàn)檔案上傳機(jī)制,以下是一個(gè)允許使用者上傳附件的範(fàn)例:

CODE:

?

<form action="upload.php" method="POST"
enctype="multipart/form-data">
  

Please choose a file to upload:


#隱藏的表單變數(shù)MAX_FILE_SIZE告訴了瀏覽器最大允許上傳的檔案大小。與許多客戶端限制相同,此限制很容易被攻擊者繞開,但它可以為合法用戶提供嚮導(dǎo)。在伺服器上進(jìn)行該限制才是可靠的。

? PHP的設(shè)定變數(shù)中,upload_max_filesize控制最大允許上傳的檔案大小。同時(shí)post_max_size(POST表單的最大提交資料的大小)也能潛在地進(jìn)行控制,因?yàn)闄n案是透過表單資料上傳的。

? 接收程式upload.php顯示了超級(jí)全域陣列$_FILES的內(nèi)容:

CODE:



#?

<?php
 
  header(&#39;Content-Type: text/plain&#39;);
  print_r($_FILES);
 
  ?>

#為了理解上傳的過程,我們使用一個(gè)名為author.txt的檔案進(jìn)行測(cè)試,以下是它的內(nèi)容:

CODE:

#?

  Chris Shiflett
  http://miracleart.cn/


##當(dāng)你上傳該檔案到upload.php程式時(shí),你可以在瀏覽器中看到類似下面的輸出:

CODE:


?

###
 Array
  (
      [attachment] => Array
          (
              [name] => author.txt
              [type] => text/plain
              [tmp_name] => /tmp/phpShfltt
              [error] => 0
              [size] => 36
          )
 
  )
######################?雖然從上面可以看出PHP實(shí)際上在超級(jí)全局?jǐn)?shù)組$_FILES中提供的內(nèi)容,但是它無法給出表單資料的原始資訊。作為一個(gè)專注於安全的開發(fā)者,需要識(shí)別輸入以知道瀏覽器實(shí)際上發(fā)送了什麼,看看下面的HTTP請(qǐng)求資訊是很有必要的:############CODE:### #########?######
POST /upload.php HTTP/1.1
  Host: example.org
  Content-Type: multipart/form-data;
boundary=----------12345
  Content-Length: 245
 
  ----------12345
  Content-Disposition: form-data; name="attachment";
filename="author.txt"
  Content-Type: text/plain
 
  Chris Shiflett
  http://miracleart.cn/
 
  ----------12345
  Content-Disposition: form-data;
name="MAX_FILE_SIZE"
 
  1024
  ----------12345--
######################雖然你沒有必要理解請(qǐng)求的格式,但是你要能識(shí)別出文件及相關(guān)的元資料。使用者只提供了名稱與類型,因此tmp_name,error及size都是PHP所提供的。 ############? 由於PHP在檔案系統(tǒng)的臨時(shí)檔案區(qū)保存上傳的檔案(本例中是/tmp/phpShfltt),因此通常進(jìn)行的操作是把它移到其它地方進(jìn)行保存及讀取到記憶體。如果你不對(duì)tmp_name作檢查以確保它是一個(gè)上傳的檔案(而不是/etc/passwd之類的東西),存在一個(gè)理論上的風(fēng)險(xiǎn)。之所以叫理論上的風(fēng)險(xiǎn),是因?yàn)闆]有已知的攻擊手段允許攻擊者去修改tmp_name的值。但是,沒有攻擊手段並不意味著你不需要做一些簡單的安全措施。新的攻擊手段每天都在出現(xiàn),而簡單的一個(gè)步驟能保護(hù)你的系統(tǒng)。 ############? PHP提供了兩個(gè)方便的函數(shù)以減輕這些理論上的風(fēng)險(xiǎn):is_uploaded_file( ) and move_uploaded_file( )。如果你需要確保tmp_name中的文件是上傳的文件,你可以用is_uploaded_file( ):############CODE:############?### ###
 <?php
 
  $filename = $_FILES[&#39;attachment&#39;][&#39;tmp_name&#39;];
 
  if (is_uploaded_file($filename))
  {
    /* $_FILES[&#39;attachment&#39;][&#39;tmp_name&#39;] is an
uploaded file. */
  }
 
  ?>
###############

如果你希望只把上傳的文件移到一個(gè)固定位置,你可以使用move_uploaded_file( ):

CODE:

 <?php
 
  $old_filename =
$_FILES[&#39;attachment&#39;][&#39;tmp_name&#39;];
  $new_filename = &#39;/path/to/attachment.txt&#39;;
 
  if (move_uploaded_file($old_filename,
$new_filename))
  {
    /* $old_filename is an uploaded file, and the
move was successful. */
  }
 
  ?>


最后你可以用 filesize( ) 來校驗(yàn)文件的大?。?/span>

CODE:

 <?php
 
  $filename = $_FILES[&#39;attachment&#39;][&#39;tmp_name&#39;];
 
  if (is_uploaded_file($filename))
  {
    $size = filesize($filename);
  }
 
  ?>


這些安全措施的目的是加上一層額外的安全保護(hù)層。最佳的方法是永遠(yuǎn)盡可能少地去信任。?

以上就是PHP安全-文件上傳攻擊的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(miracleart.cn)!


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

我如何了解最新的PHP開發(fā)和最佳實(shí)踐? 我如何了解最新的PHP開發(fā)和最佳實(shí)踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什麼是PHP,為什麼它用於Web開發(fā)? 什麼是PHP,為什麼它用於Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時(shí)區(qū)? 如何設(shè)置PHP時(shí)區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

我如何驗(yàn)證PHP中的用戶輸入以確保其符合某些標(biāo)準(zhǔn)? 我如何驗(yàn)證PHP中的用戶輸入以確保其符合某些標(biāo)準(zhǔn)? Jun 22, 2025 am 01:00 AM

TovalidateuserinputinPHP,usebuilt-invalidationfunctionslikefilter_var()andfilter_input(),applyregularexpressionsforcustomformatssuchasusernamesorphonenumbers,checkdatatypesfornumericvalueslikeageorprice,setlengthlimitsandtrimwhitespacetopreventlayout

什麼是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? 什麼是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? Jun 22, 2025 am 01:03 AM

thephpfunctionserize()andunSerialize()redustoconvertComplexdatStructDestoresToroStoroStoroSandaBackagagain.1.Serialize()

如何將PHP代碼嵌入HTML文件中? 如何將PHP代碼嵌入HTML文件中? Jun 22, 2025 am 01:00 AM

可以將PHP代碼嵌入HTML文件中,但需確保文件以.php為擴(kuò)展名,以便服務(wù)器能正確解析。使用標(biāo)準(zhǔn)的標(biāo)籤包裹PHP代碼,可在HTML中任意位置插入動(dòng)態(tài)內(nèi)容。此外,可在同一文件中多次切換PHP與HTML,實(shí)現(xiàn)條件渲染等動(dòng)態(tài)功能。務(wù)必注意服務(wù)器配置及語法正確性,避免因短標(biāo)籤、引號(hào)錯(cuò)誤或遺漏結(jié)束標(biāo)籤導(dǎo)致問題。

編寫清潔和可維護(hù)的PHP代碼的最佳實(shí)踐是什麼? 編寫清潔和可維護(hù)的PHP代碼的最佳實(shí)踐是什麼? Jun 24, 2025 am 12:53 AM

寫乾淨(jìng)、易維護(hù)的PHP代碼關(guān)鍵在於清晰命名、遵循標(biāo)準(zhǔn)、合理結(jié)構(gòu)、善用註釋和可測(cè)試性。 1.使用明確的變量、函數(shù)和類名,如$userData和calculateTotalPrice();2.遵循PSR-12標(biāo)準(zhǔn)統(tǒng)一代碼風(fēng)格;3.按職責(zé)拆分代碼結(jié)構(gòu),使用MVC或Laravel式目錄組織;4.避免麵條式代碼,將邏輯拆分為單一職責(zé)的小函數(shù);5.在關(guān)鍵處添加註釋並撰寫接口文檔,明確參數(shù)、返回值和異常;6.提高可測(cè)試性,採用依賴注入、減少全局狀態(tài)和靜態(tài)方法。這些做法提升代碼質(zhì)量、協(xié)作效率和後期維護(hù)便利性。

如何使用PHP執(zhí)行SQL查詢? 如何使用PHP執(zhí)行SQL查詢? Jun 24, 2025 am 12:54 AM

Yes,youcanrunSQLqueriesusingPHP,andtheprocessinvolveschoosingadatabaseextension,connectingtothedatabase,executingqueriessafely,andclosingconnectionswhendone.Todothis,firstchoosebetweenMySQLiorPDO,withPDObeingmoreflexibleduetosupportingmultipledatabas

See all articles