標籤:基本 sse creat 前端 ima 使用 gravity bst 瀏覽器
首先是前端代碼,upload.html
[html] view plain copy
- <html>
- <head>
- </head>
- <body>
- <form id="form1" name="form1" enctype="multipart/form-data" method="post" action="upload.php">
- <label>Choose an image to upload
- <input type="file" name="uploaded" />
- </label>
- <p>
- <label>
- <input type="submit" name="upload" value="upload"/>
- </label>
- </p>
- </form>
- </body>
- </html>
後端代碼,upload.php
[php] view plain copy
- <?php
- if (isset($_POST[‘upload‘]))
- {
- // 獲得上傳檔案的基本資料,檔案名稱,類型,大小,臨時檔案路徑
- $filename = $_FILES[‘uploaded‘][‘name‘];
- $filetype = $_FILES[‘uploaded‘][‘type‘];
- $filesize = $_FILES[‘uploaded‘][‘size‘];
- print "<pre> File name : $filename </pre>";
- print "<pre> File type : $filetype </pre>";
- print "<pre> File size : $filesize </pre>";
- $tmpname = $_FILES[‘uploaded‘][‘tmp_name‘];
- print "<pre> Temp File path : $tmpname </pre>";
-
- $uploaddir=‘c:/wamp/www/xpic/upload/‘;
-
- $target_path=$uploaddir.basename($filename);
-
- // 獲得上傳檔案的副檔名
- $fileext= substr(strrchr($filename,"."),1);
- print "<pre>File extension : $fileext </pre>";
-
- $serverip = $_SERVER[‘SERVER_ADDR‘];
-
- //判斷檔案尾碼與類型,合法才進行上傳操作
- if(($fileext == "jpg") && ($filetype=="image/jpeg"))
- {
-
- if(move_uploaded_file($tmpname,$target_path))
- {
- //使用上傳的圖片產生新的圖片
- $im = imagecreatefromjpeg($target_path);
-
- //給新圖片指定檔案名稱
- srand(time());
- $newfilename = strval(rand()).".jpg";
- print "<pre>new file name $newfilename </pre>";
- $newimagepath = $uploaddir.$newfilename;
- imagejpeg($im,$newimagepath);
- //顯示二次渲染後的圖片(使用使用者上傳圖片產生的新圖片)
- print ‘<b>New image</b><img src="http://‘.$_SERVER[‘SERVER_ADDR‘].‘/xpic/upload/‘.$newfilename.‘"/>‘;
- unlink($target_path);
- }
- else
- {
- print "<pre>Your image was not uploaded3. </pre><br/>";
- }
-
- }
- else
- {
- print "<pre>Your image was not uploaded2.</pre> <br/>";
- }
-
- }
-
- else
- {
- print "<pre>Your image was not uploaded1.</pre> <br/>";
- }
-
- ?>
實驗過程
首先選擇一張lena圖,在圖片末端寫入一句話後門代碼,最終儲存格式為jpg
查看它的檔案源碼
上傳圖片
結果瀏覽器中顯示
此時,在程式的同路徑下的upload檔案夾內就存有上傳後的照片
此時再看圖片源碼發現之前尾碼在圖片中的PHP代碼已經不見了。
實驗成功,圖片木馬中的php代碼被破壞。
在使用php中那些與影像處理有關的函數時,需要將GD2的DLL檔案php_gd2.dll作為一個擴充包含在php.ini中。
在上述實驗中,php的版本為5.3.10,其預設已經將DLL檔案包含,即extension=php_gd2.dll。
原始碼中有兩個重要的函數分別是imagecreatefromjpeg()和imagejpeg()。函數細節如下:
1.imagecreatefromjpeg:由檔案或 URL 建立一個新圖象。
resource imagecreatefromjpeg ( string $filename )
參數:filename:JPEG映像的路徑。
傳回值:成功後返回映像資源,失敗後返回FALSE。
2.imagejpeg:輸出圖象到瀏覽器或檔案。
bool imagejpeg(resource $image[,string $filename[,int $quality]])
imagejpeg()從image映像以filename為檔案名稱建立一個JPEG映像。
參數:image:由圖象建立函數(例如imagecreatetruecolor())返回的圖象資源。
filename:檔案儲存的路徑,如果未設定或為NULL,將會直接輸出原始圖象流。如果要省略這個參數而提供 quality 參數,使用NULL。
quality:quality 為可選項,範圍從0(最差品質,檔案更小)到100(最佳品質,檔案最大)。預設為IJG預設的品質值(大約75)。
傳回值:成功時返回TRUE,或者在失敗時返回FALSE。
PHP二次渲染