當前位置:首頁 » 文件管理 » apache文件上傳

apache文件上傳

發布時間: 2022-10-24 16:44:26

㈠ 如何設置apache+php上傳文件大小上限

完整修改步驟:
1.修改Apache設置
在httpd.conf 加一句(隨便加哪都行) LimitRequestBody 10240000(這個數字多大都可以,我設的上限是10M)
2.修改PHP設置
相關的設置有如下幾個,但是我只改了其中的post_max_size

(下面的內容是直接粘第一篇文章里的)
打開php.ini, Ctrl+F 找到下面的項並修改之。下面以上傳100M為例。
file_uploads = on ;是否允許通過HTTP上傳文件的開關。默認為ON即是開
upload_tmp_dir ;文件上傳至伺服器上存儲臨時文件的地方,如果沒指定就會用系統默認的臨時文件夾
upload_max_filesize = 100m ;望文生意,即允許上傳文件大小的最大值。默認為2M
post_max_size = 100M ;指通過表單POST給PHP的所能接收的最大值,包括表單里的所有值。默認為8M
一般地,設置好上述四個參數後,上傳<=8M的文件是不成問題,在網路正常的情況下。
但如果要上傳>8M的大體積文件,只設置上述四項還一定能行的通。除非你的網路真有100M/S的上傳高速,否則你還得關心關心下面的參數:
max_execution_time = 600 ;每個PHP頁面運行的最大時間值(秒),默認30秒
max_input_time = 600 ;每個PHP頁面接收數據所需的最大時間,默認60秒
memory_limit = 128M ;每個PHP頁面所吃掉的最大內存,默認8M
希望可以採納,謝謝。

㈡ 如何上傳網頁文件到本地apache伺服器

apache是一個模塊化的web伺服器,通過動態載入模塊可以支持很多功能。默認情況下一般可以支持html、php、perl等網頁,載入相關模塊後也可以支持asp和jsp。

㈢ 文件上傳漏洞攻擊方法有什麼

文件上傳漏洞是什麼?怎樣防禦文件上傳漏洞攻擊?文件上傳漏洞是web安全中經常利用到的一種漏洞形式。這種類型的攻擊從大的類型上來說,是攻擊 數據與代碼分離原則 的一種攻擊。
一些web應用程序中允許上傳圖片,文本或者其他資源到指定的位置,文件上傳漏洞就是利用這些可以上傳的地方將惡意代碼植入到伺服器中,再通過url去訪問以執行代碼
造成文件上傳漏洞的原因是
對於上傳文件的後綴名(擴展名)沒有做較為嚴格的限制
對於上傳文件的MIMETYPE 沒有做檢查
許可權上沒有對於上傳的文件的文件許可權,(尤其是對於shebang類型的文件)
對於web server對於上傳文件或者指定目錄的行為沒有做限制
下面就閑話一些文件上傳漏洞的防禦方式和攻擊者的繞過方式
1.前端限制
function check(){
var filename=document.getElementById("file");
var str=filename.value.split(".");
var ext=str[str.length-1];
if(ext=='jpg'||ext=='png'||ext=='jpeg'||ext=='gif'){
return true;
}else{
alert("這不是圖片!")
return false;
}
return false;
}
在表單中使用onsumbit=check()調用js函數來檢查上傳文件的擴展名。這種限制實際上沒有任何用處,任何攻擊者都可以輕而易舉的破解。只能用於對於用戶完全信任的情況下,很難稱之為一種安全措施只能稱之是一種防止用戶誤操作上傳的措施,
反制:
隨便的編輯一下頁面/用burpsuite/寫個小腳本就可以突破之,無須多言
2.檢查擴展名
顧名思義,就是在文件被上傳到服務端的時候,對於文件名的擴展名進行檢查,如果不合法,則拒絕這次上傳
在這里,還有一點是值得一提的,在檢查擴展名是否合法的時候,有兩種策略
黑名單策略,文件擴展名在黑名單中的為不合法,示例代碼
$postfix = end(explode('.','$_POST['filename']);
if($postfix=='php'||$postfix=='asp'||$postfix=='sh'){
echo "invalid file type";
return;
}
白名單策略,文件擴展名不在白名單中的均為不合法
$postfix = end(explode('.','$_POST['filename']);
if($postfix=='jpg'||$postfix=='png'||$postfix=='gif'){
//save the file and do something next
} else {
echo "invalid file type";
return;
}
白名單策略是更加安全的,通過限制上傳類型為只有我們接受的類型,可以較好的保證安全,因為黑名單我們可以使用各種方法來進行注入和突破
反制
在一些 webserver 中,存在解析漏洞
1.老版本的IIS中的目錄解析漏洞,如果網站目錄中有一個 /.asp/目錄,那麼此目錄下面的一切內容都會被當作asp腳本來解析
2.老闆本的IIS中的分號漏洞:IIS在解析文件名的時候可能將分號後面的內容丟棄,那麼我們可以在上傳的時候給後面加入分號內容來避免黑名單過濾,如 a.asp;jpg
3.舊版Windows Server中存在空格和dot漏洞類似於 a.php. 和 a.php[空格] 這樣的文件名存儲後會被windows去掉點和空格,從而使得加上這兩個東西可以突破過濾,成功上傳,並且被當作php代碼來執行
4.nginx空位元組漏洞 xxx.jpg%00.php 這樣的文件名會被解析為php代碼運行
5.apache的解析漏洞,上傳如a.php.rar a.php.gif 類型的文件名,可以避免對於php文件的過濾機制,但是由於apache在解析文件名的時候是從右向左讀,如果遇到不能識別的擴展名則跳過,rar等擴展名是apache不能識別的,因此就會直接將類型識別為php,從而達到了注入php代碼的目的
3.檢查HTTP Header中的Content-Type
HTTP協議規定了上傳資源的時候在Header中加上一項文件的MIMETYPE,來識別文件類型,這個動作是由瀏覽器完成的,服務端可以檢查此類型不過這仍然是不安全的,因為HTTP header可以被發出者或者中間人任意的修改,不過加上一層防護也是可以有一定效果的
反制
使用各種各樣的工具(如burpsuite)強行篡改Header就可以,太容易將header中的
Content-Type: application/php
或者其他類型
改為
Content-Type: image/jpg
Content-Type: image/png
Content-Type: text/plain
等這些web程序允許的淚洗改附上常用的MIMETYPE表
text/plain(純文本)
text/html(HTML文檔)
text/javascript(js代碼)
application/xhtml+xml(XHTML文檔)
image/gif(GIF圖像)
image/jpeg(JPEG圖像)
image/png(PNG圖像)
video/mpeg(MPEG動畫)
application/octet-stream(二進制數據)
application/pdf(PDF文檔)
application/(編程語言) 該種語言的代碼
application/msword(Microsoft Word文件)
message/rfc822(RFC 822形式)
multipart/alternative(HTML郵件的HTML形式和純文本形式,相同內容使用不同形式表示)
application/x-www-form-urlencoded(POST方法提交的表單)
multipart/form-data(POST提交時伴隨文件上傳的表單)
4.分析文件頭內容來檢查文件類型
與方法2不同,還有一種檢查類型的方式是使用對於文件內容的驗證機制,這種方法利用的是每一個特定類型的文件都會有不太一樣的開頭或者標志位。可以通過比如php的exif_imagetype()函數,一個通過這種方法來過濾的示例代碼如下:
if (! exif_imagetype($_FILES['uploadedfile']['tmp_name'])) {
echo "File is not an image";
return;
}
也可以自己編寫函數來進行識別,圖片文件通常有稱作幻數的頭位元組,我們來看一下幾種圖片文件的幻數:
(注意!下面是二進制而不是文本格式的數據)
JPG
FF D8 FF E0 00 10 4A 46 49 46
GIF
47 49 46 38 39 61
(相當於文本的GIF89a)
PNG
89 50 4E 47
通過檢查頭幾位位元組,可以分辨是否是圖片文件
如果是其他類型的二進制文件,也有響應的頭位元組,如下表
反制
給上傳腳本加上相應的幻數頭位元組就可以,php引擎會將
(一般不限制圖片文件格式的時候使用GIF的頭比較方便,因為全都是文本可列印字元。)
GIF89a
do_something();
?>
如果是其他類型的二進制文件,也有響應的頭位元組,如下表
格式
文件頭
TIFF (tif)
49492A00
Windows Bitmap (bmp)
424D
CAD (dwg)
41433130
Adobe Photoshop (psd)
38425053
Rich Text Format (rtf)
7B5C727466
MS Word/Excel (xls.or.doc)
D0CF11E0
MS Access (mdb)
5374616E64617264204A
ZIP Archive (zip),
504B0304
RAR Archive (rar),
7221
Wave (wav),
57415645
AVI (avi),
41564920
Real Media (rm),
2E524D46
MPEG (mpg),
000001BA
MPEG (mpg),
000001B3
Quicktime (mov),
6D6F6F76
Adobe Acrobat (pdf),
255044462D312E
Windows Media (asf),
3026B2758E66CF11
MIDI (mid),
4D546864
5.限制Web Server對於特定類型文件的行為
導致文件上傳漏洞的根本原因在於服務把用戶上傳的本應是數據的內容當作了代碼,一般來說,用戶上傳的內容都會被存儲到特定的一個文件夾下,比如我們很多人習慣於放在 ./upload/ 下面要防止數據被當作代碼執行,我們可以限制web server對於特定文件夾的行為。
大多數服務端軟體都可以支持用戶對於特定類型文件的行為的自定義,以Apache為例:
在默認情況下,對與 .php文件Apache會當作代碼來執行,對於 html,css,js文件,則會直接由HTTP Response交給客戶端程序對於一些資源文件,比如txt,doc,rar等等,則也會以文件下載的方式傳送的客戶端。我們希望用戶上傳的東西僅僅當作資源和數據而不能當作代碼
因此可以使用伺服器程序的介面來進行限制
以Apache為例,我們可以利用 .htaccess 文件機制來對web server行為進行限制
在這里插一句,如果不是專門的文件下載目錄,請務必關掉文件夾瀏覽的許可權,以防止嗅探和可能的越權,也是使用.htaccess文件,在其中加上一句
Options All -Indexes
即可。
禁止腳本執行有多種方式可以實現,而且分別有不同的效果,我們分別來看一下
1.指定特定擴展名的文件的處理方式,原理是指定Response的Content-Type可以加上如下幾行
AddType text/plain .pl .py .php
這種情況下,以上幾種腳本文件會被當作純文本來顯示出來,你也可以換成其他的Content-Type
2.如果要完全禁止特定擴展名的文件被訪問,用下面的幾行
Options -ExecCGI
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi識別
在這種情況下,以上幾種類型的文件被訪問的時候,會返回403 Forbidden的錯誤
3.也可以強制web伺服器對於特定文件類型的處理,與第一條不同的是, 下面的方法直接強行讓apache將文件識別為你指定的類型,而第一種是讓瀏覽器
ForceType text/plain
看代碼就可以很明白的知道,符合上面正則的全部被認為是純文本,也可以繼續往裡面加入其他類型。
4.只允許訪問特定類型的文件
order deny,allow
deny from all
在一個上傳圖片的文件夾下面,就可以加上這段代碼,使得該文件夾裡面只有圖片擴展名的文件才可以被訪問,其他類型都是拒絕訪問。
這又是一個白名單的處理方案
永遠記得,白名單是最有保障的安全措施

可以通過 move_uploaded_file 函數把自己寫的.htaccess 文件上傳,覆蓋掉伺服器上的文件,來定義文件類型和執行許可權如果做到了這一點,將獲得相當大的許可權。

㈣ 如何用Apache 的fileupload 將文件上傳到另一台電腦

stem.out.println("size limit exception!");
} catch(Exception e) { e.printStackTrace();
} Iterator iter = items==null?null:items.iterator();
while(iter != null &&
iter.hasNext()) { FileItem item = (FileItem)iter.next();
//簡單的表單域 if(item.isFormField()) { System.out.print("form field:");
System.out.print(item.getFieldName() + " ");
System.out.print(item.getString());
} //文件域 else if(!item.isFormField()) { System.out.println("client name:" + item.getName());
String fileName = item.getName().substring(item.getName().lastIndexOf("\\"));
BufferedInputStream in = new BufferedInputStream(item.getInputStream());
//文件存儲在工程的upload目錄下,這個目錄也得存在 BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(new File("../webapps/fileupload/upload/" + fileName)));
Streams.(in, out, true);
} } } else { System.out.println("enctype error!");
} } }
因為使用tomcat做得伺服器,所以裡面的路徑都是以tomcat為基礎來寫得,具體情況需要修改。
stem.out.println("size limit exception!");
} catch(Exception e) { e.printStackTrace();
} Iterator iter = items==null?null:items.iterator();
while(iter != null &&
iter.hasNext()) { FileItem item = (FileItem)iter.next();
//簡單的表單域 if(item.isFormField()) { System.out.print("form field:");
System.out.print(item.getFieldName() + " ");
System.out.print(item.getString());
} //文件域 else if(!item.isFormField()) { System.out.println("client name:" + item.getName());
String fileName = item.getName().substring(item.getName().lastIndexOf("\\"));
BufferedInputStream in = new BufferedInputStream(item.getInputStream());
//文件存儲在工程的upload目錄下,這個目錄也得存在 BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(new File("../webapps/fileupload/upload/" + fileName)));
Streams.(in, out, true);
} } } else { System.out.println("enctype error!");
} } }
因為使用tomcat做得伺服器,所以裡面的路徑都是以tomcat為基礎來寫得,具體情況需要修改。

㈤ 為什麼使用apache的ftp包上傳文件,只有第一文件能上傳成功

在定義了store對象後,在它的on方法中綁定監聽,先得到擴展參數,然後再把store中已經有的之前的catalogid值賦給它,這樣,點擊分頁時,就會傳遞catalogid參數了。

㈥ apache 如何http上傳文件

JAVA代碼

sql">StringtargetUrl="http://localhost:8080/Test";
PostMethodfilePost=newPostMethod(targetUrl){//這個用來中文亂碼
publicStringgetRequestCharSet(){
return"UTF-8";//
}
};
try{
HttpClientclient=newHttpClient();
Filefile=newFile("c:/新聞.xml");
Part[]parts=newPart[]{newCustomFilePart(file.getName(),file)};
filePost.setRequestEntity(newMultipartRequestEntity(parts,filePost.getParams()));
intstatuscode=client.executeMethod(filePost);
if(statuscode==HttpStatus.SC_OK){
System.out.println("添加文件成功");
}else{
System.out.println("添加文件失敗");
}
}catch(Exceptionex){
ex.printStackTrace();
}
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.OutputStream;

importorg.apache.commons.httpclient.methods.multipart.FilePart;
importorg.apache.commons.httpclient.util.EncodingUtil;
/**
*解決中文文件名亂碼
*/
{
publicCustomFilePart(Stringfilename,Filefile)
throwsFileNotFoundException{
super(filename,file);
}

(OutputStreamout)throwsIOException{
super.sendDispositionHeader(out);
Stringfilename=getSource().getFileName();
if(filename!=null){
out.write(EncodingUtil.getAsciiBytes(FILE_NAME));
out.write(QUOTE_BYTES);
out.write(EncodingUtil.getBytes(filename,"utf-8"));
out.write(QUOTE_BYTES);
}
}
}

而服務端使用apache的commonfileupload:

Filetempfile=newFile(System.getProperty("java.io.tmpdir"));//採用系統臨時文件目錄
=newDiskFileItemFactory();
diskFileItemFactory.setSizeThreshold(4096);//設置緩沖區大小,這里是4kb
diskFileItemFactory.setRepository(tempfile);//設置緩沖區目錄
ServletFileUploadfu=newServletFileUpload(diskFileItemFactory);
fu.setSizeMax(4194304);//限制文件大小最大為4M
ListfileItems=fu.parseRequest(request);
Iteratori=fileItems.iterator();
while(i.hasNext()){
FileItemfi=(FileItem)i.next();
StringfileName=fi.getName();
if(fileName!=null){
FilefullFile=newFile(fi.getName());
FilesavedFile=newFile(uploadPath,fullFile.getName());
fi.write(savedFile);
}
}
System.out.println("uploadsucceed");

㈦ 如何把文件或網站上傳到apache伺服器

把網站安裝程序用cutftp上傳到伺服器,上傳的時候需要你輸入遠端伺服器ftp帳號密碼,連接成功後,直接將左邊本地的文件拖到右邊的窗口中就是上傳了,上傳完後,如果你的php程序有安裝功能,就直接根據mysql遠端伺服器資料庫帳號密碼進行安裝,安裝完進後台導入本地的mysql資料庫備份,全部完成.

㈧ 如何用apache ab進行文件上傳壓力測試

Apache附帶的ab工具(本機使用的PHP環境是WAMP集成環境,ab工具位於D:wampinapacheApache2.2.21in)非常容易使用,ab可以直接在Web伺服器本地發起測試請求,這至關重要,因為有些時候我們需要測試的僅僅是伺服器的處理性能,並不想摻雜著網路傳輸時間的影響。ab進行一切測試的本質都是基於HTTP的,所以可以說ab對於Web伺服器軟體的黑盒性能測試,獲得的一切數據和計算結果,都是可以通過HTTP來解釋的。



測試本機是否正確安裝ab工具,在power shell想將當前目錄定位到bin,輸入 .ab –V 命令,如果安裝正確,則會將其版本信息列印出來。


PSD:wampinapacheApache2.2.21in>.ab-V
ThisisApacheBench,Version2.3<$Revision:655654$>
Copyright1996AdamTwiss,ZeusTechnologyLtd,http://www.zeustech
,<ahref="http://www.apache.org/">http://www.apache.org/</a>


好了,一切就緒,下面提供一個壓力測試的實例:


輸入命令 PS

D:wampinapacheApache2.2.21in>.ab-n1000-c10http://localhost/index.php
ThisisApacheBench,Version2.3<$Revision:655654$>
Copyright1996AdamTwiss,ZeusTechnologyLtd,http://www.zeustech.net/
,http://www.apache.org/

Benchmarkinglocalhost(bepatient)
Completed100requests
Completed200requests
Completed300requests
Completed400requests
Completed500requests
Completed600requests
Completed700requests
Completed800requests
Completed900requests
Completed1000requests
Finished1000requests


ServerSoftware:Apache/2.2.21
ServerHostname:localhost
ServerPort:80

DocumentPath:/index.php
DocumentLength:211bytes

ConcurrencyLevel:10
Timetakenfortests:0.496seconds
Completerequests:1000
Failedrequests:0
Writeerrors:0
Non-2xxresponses:1000
Totaltransferred:400000bytes
HTMLtransferred:211000bytes
Requestspersecond:2015.93[#/sec](mean)
Timeperrequest:4.960[ms](mean)
Timeperrequest:0.496[ms](mean,acrossallconcurrentrequests)
Transferrate:787.47[Kbytes/sec]received

ConnectionTimes(ms)
minmean[+/-sd]medianmax
Connect:000.401
Processing:251.1412
Waiting:241.1412
Total:251.1512

(ms)
50%5
66%5
75%5
80%6
90%6
95%7
98%8
99%9
100%12(longestrequest)


下面開始解析這條命令語句:啟動ab,並出入三個參數(PS D:wampinapacheApache2.2.21in> .ab -n1000 -c10 http://localhost/index.php )


-n1000 表示請求總數為1000


-c10 表示並發用戶數為10


http://localhost/index.php 表示這寫請求的目標URL



測試結果也一目瞭然,測試出的吞吐率為:Requests per second: 2015.93 [#/sec] (mean) 初次之外還有其他一些信息。


Server Software 表示被測試的Web伺服器軟體名稱


Server Hostname 表示請求的URL主機名


Server Port 表示被測試的Web伺服器軟體的監聽埠


Document Path 表示請求的URL中的根絕對路徑,通過該文件的後綴名,我們一般可以了解該請求的類型


Document Length 表示HTTP響應數據的正文長度


Concurrency Level 表示並發用戶數,這是我們設置的參數之一


Time taken for tests 表示所有這些請求被處理完成所花費的總時間


Complete requests 表示總請求數量,這是我們設置的參數之一


Failed requests 表示失敗的請求數量,這里的失敗是指請求在連接伺服器、發送數據等環節發生異常,以及無響應後超時的情況。如果接收到的HTTP響應數據的頭信息中含有2XX以外的狀態碼,則會在測試結果中顯示另一個名為 「Non-2xx responses」的統計項,用於統計這部分請求數,這些請求並不算在失敗的請求中。


Total transferred 表示所有請求的響應數據長度總和,包括每個HTTP響應數據的頭信息和正文數據的長度。注意這里不包括HTTP請求數據的長度,僅僅為web伺服器流向用戶PC的應用層數據總長度。


HTML transferred 表示所有請求的響應數據中正文數據的總和,也就是減去了Total transferred中HTTP響應數據中的頭信息的長度。


Requests per second 吞吐率,計算公式:Complete requests / Time taken for tests


Time per request 用戶平均請求等待時間,計算公式:Time token for tests/(Complete requests/Concurrency Level)


Time per requet(across all concurrent request) 伺服器平均請求等待時間,計算公式:Time taken for tests/Complete requests,正好是吞吐率的倒數。也可以這么統計:Time per request/Concurrency Level


Transfer rate 表示這些請求在單位時間內從伺服器獲取的數據長度,計算公式:Total trnasferred/ Time taken for tests,這個統計很好的說明伺服器的處理能力達到極限時,其出口寬頻的需求量。


Percentage of requests served within a certain time(ms) 這部分數據用於描述每個請求處理時間的分布情況,比如以上測試,80%的請求處理時間都不超過6ms,這個處理時間是指前面的Time per request,即對於單個用戶而言,平均每個請求的處理時間。


未完待續。。。

㈨ 怎麼用Apache搭建一個可以文件上傳下載的web網站

很簡單如果你有域名就綁定沒有直接使用IP進行訪問安裝php環境就可以了幫助直接訪問文件名字就可以下載的

㈩ 使用apache的fileupload組件上傳文件怎麼解決編碼問題

你在保存文件的時候有個參數設置這個文件的編碼啊

熱點內容
腳本整理 發布:2024-10-07 10:20:48 瀏覽:233
圖片上傳功能java 發布:2024-10-07 10:14:18 瀏覽:128
rc4c語言實現 發布:2024-10-07 10:08:34 瀏覽:407
為什麼steam每天登錄都要輸密碼 發布:2024-10-07 10:08:33 瀏覽:436
電腦軟體連接不到伺服器怎麼解決 發布:2024-10-07 10:04:07 瀏覽:923
pubg如何換伺服器圖解 發布:2024-10-07 10:04:06 瀏覽:320
androidstudio異常 發布:2024-10-07 09:50:48 瀏覽:471
視頻緩存轉mp4 發布:2024-10-07 09:35:37 瀏覽:27
Java的腳本語言有哪些 發布:2024-10-07 09:27:43 瀏覽:876
如何使用香港伺服器 發布:2024-10-07 09:01:37 瀏覽:916