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

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

PHP安全-文件上傳攻擊

Feb 22, 2017 am 09:26 AM



文件上傳攻擊

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

CODE:

?

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

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

允許用戶進(jìn)行選擇文件并上傳的表單元素是很簡(jiǎn)單的:

CODE:

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

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

為了更好地演示文件上傳機(jī)制,下面是一個(gè)允許用戶上傳附件的例子:

CODE:

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

Please choose a file to upload:


隱藏的表單變量MAX_FILE_SIZE告訴了瀏覽器最大允許上傳的文件大小。與很多客戶端限制相同,這一限制很容易被攻擊者繞開,但它可以為合法用戶提供向?qū)АT诜?wù)器上進(jìn)行該限制才是可靠的。

PHP的配置變量中,upload_max_filesize控制最大允許上傳的文件大小。同時(shí)post_max_size(POST表單的最大提交數(shù)據(jù)的大?。┮材軡撛诘剡M(jìn)行控制,因?yàn)槲募峭ㄟ^表單數(shù)據(jù)進(jìn)行上傳的。

接收程序upload.php顯示了超級(jí)全局?jǐn)?shù)組$_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)容,但是它無法給出表單數(shù)據(jù)的原始信息。作為一個(gè)關(guān)注安全的開發(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)的元數(shù)據(jù)。用戶只提供了名稱與類型,因此tmp_name,error及size都是PHP所提供的。

由于PHP在文件系統(tǒng)的臨時(shí)文件區(qū)保存上傳的文件(本例中是/tmp/phpShfltt),所以通常進(jìn)行的操作是把它移到其它地方進(jìn)行保存及讀取到內(nèi)存。如果你不對(duì)tmp_name作檢查以確保它是一個(gè)上傳的文件(而不是/etc/passwd之類的東西),存在一個(gè)理論上的風(fēng)險(xiǎn)。之所以叫理論上的風(fēng)險(xiǎn),是因?yàn)闆]有一種已知的攻擊手段允許攻擊者去修改tmp_name的值。但是,沒有攻擊手段并不意味著你不需要做一些簡(jiǎn)單的安全措施。新的攻擊手段每天在出現(xiàn),而簡(jiǎn)單的一個(gè)步驟能保護(hù)你的系統(tǒng)。

PHP提供了兩個(gè)方便的函數(shù)以減輕這些理論上的風(fēng)險(xiǎn):is_uploaded_file( ) and move_uploaded_file( )。如果你需要確保tmp_name中的文件是一個(gè)上傳的文件,你可以用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)!


本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系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脫衣機(jī)

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

寫干凈、易維護(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