2012-12-20 5 views
-2

이 내 웹 사이트에 텍스트 파일을 업로드 할 내 원래의 코드입니다에 fwrite 취약점

<?php 
$myFile = $_GET['myFile']; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = $_GET['stringData']; 
fwrite($fh, $stringData); 
fclose($fh); 
?> 

가 당신을 위해 충분히 안전한가요 아니면이 같은 것을 사용해야합니다

<?php 
if (isset($_GET['myFile'])) { 
    $myFile = basename($_GET['myFile']); 
    $fh = fopen($myFile, 'w') or die("can't open file"); 
} 
$stringData = $_GET['stringData']; 
fwrite($fh, $stringData); 
fclose($fh); 
?> 
+0

왜 당신은 당신의 수신 데이터의 주위에 단순히'베이스 이름을 포장()'호출이 보안 혜택을 제공 할 것으로 생각 ... 자세한 내용을 보려면? 또한, 두 번째 예제에서'if' 문 안에서 실제로 파일 핸들을 작성하고 닫는 부분이없는 이유는 무엇입니까? '$ _GET [ 'myFile']'가 설정되어 있지 않은 경우, 존재하지 않는 파일 핸들을 쓰고 닫으려고 할 때 에러가 발생합니다. –

답변

1

첫 번째 코드는하지 않습니다를 파일을 서버에 업로드하면 클라이언트 측에 지정된 이름과 내용으로 텍스트 파일이 작성됩니다.

myFile 값을 지정하지 않으면 두 번째 코드가 실패 할 수 있습니다. 두 번째 부분은 생성되지 않은 파일에 쓰려고 시도합니다.

1

당신은 기본적으로 현재 디렉토리에있는 파일을 업로드 할 수 있도록 ....

예를 들어, 아니 ... 당신이 그런 식으로 코드를 작성해서는 안

을 원하는대로 공격자가 수행하는 PHP 스크립트를 업로드 할 수 있습니다.

  1. 파일을 특정 위치에만 업로드하십시오.
  2. 당신은 그들에게 이름을 알려줍니다.