2011-02-05 7 views
0
내 사이트가 해킹 방지를이 내가 할 이유 있도록 만들고 싶어

:

Text: mysql_real_escape_string($myVar); 
Number: (int)$myVar; 

내가 $myVar = $_FILE['myFile'];에 의해 주어진다 배열을 파일과 유사한 것을 사용 하는가?

+0

이 완전히 당신이 파일을 어떻게 할 건데에 따라 달라집니다 얼마나 잘 볼 수 존재한다. 실제 사례를 가장 잘 보여줍니다. (부수적으로, 들어오는 데이터에 대해 mysql_real_escape_string()을 전역 적으로 사용해서는 안되며, 데이터를 데이터베이스에 삽입 할 때만 사용해야하며, 그 함수는 데이터베이스 삽입만으로 당신을 보호 할 것입니다. int)'항상 괜찮습니다.) –

+1

어쨌든 PDO를 사용하면 mysql_real_escape_string()을 사용하는 것이 더 안전합니다. 물론 – Shoe

+0

PRO는 괜찮습니다. 그러나 주인이 PDO를 갖고 있지 않다면 어떻게해야합니까? 예를 들어 AppServ를 사용하고 기본적으로 MySQL 용 PDO 확장을 가지고 있지 않습니다. MSSQL 또는 사용하지 않는 것에 대해서만 ... – sed

답변

0

은 사용 사례에 따라 다릅니다. 예를 들어 filename을 DB에 저장하면 문자열로 이스케이프해야합니다. 또한 PHP 스크립트를 업로드하고 실행하는 것을 방지해야합니다.

+0

예, 아니오. 이미지를 업로드하고 있지만 md5 (uniqid())를 사용하여 이미지의 이름을 생성 된 문자열로 바꾸는 자체 스크립트를 사용합니다. 하지만 내 사이트가 PHP 스크립트를 업로드하지 못하도록 보호하려면 어떻게해야합니까? – sed

+0

업로드 된 파일의 MIME 유형과 아마도 콘텐츠를 확인해야합니다. – Distdev

1

파일 이름을 삭제하는 것은 매우 중요합니다.

예를 들어 Windows에서 허용되는 모든 문자가 * nix에서 허용되는 것은 아니며 그 반대의 경우도 있습니다. 파일 이름은 상대 경로도 포함 할 수 있으며 업로드되지 않은 다른 파일을 덮어 쓸 수 있습니다.

이 업로드 기능은 here

function Upload($source, $destination, $chmod = null) 
{ 
    $result = array(); 
    $destination = self::Path($destination); 

    if ((is_dir($destination) === true) && (array_key_exists($source, $_FILES) === true)) 
    { 
     if (count($_FILES[$source], COUNT_RECURSIVE) == 5) 
     { 
      foreach ($_FILES[$source] as $key => $value) 
      { 
       $_FILES[$source][$key] = array($value); 
      } 
     } 

     foreach (array_map('basename', $_FILES[$source]['name']) as $key => $value) 
     { 
      $result[$value] = false; 

      if ($_FILES[$source]['error'][$key] == UPLOAD_ERR_OK) 
      { 
       $file = ph()->Text->Slug($value, '_', '.'); 

       if (file_exists($destination . $file) === true) 
       { 
        $file = substr_replace($file, '_' . md5_file($_FILES[$source]['tmp_name'][$key]), strrpos($value, '.'), 0); 
       } 

       if (move_uploaded_file($_FILES[$source]['tmp_name'][$key], $destination . $file) === true) 
       { 
        if (self::Chmod($destination . $file, $chmod) === true) 
        { 
         $result[$value] = $destination . $file; 
        } 
       } 
      } 
     } 
    } 

    return $result; 
} 

에서 가져온 중요한 부분은 다음과 같습니다

1) 파일이 상대 경로를 포함하지 않는 있는지 확인하십시오.

2) ph()->Text->Slug()

, 이것은 반드시 전용 .0-9a-ZA-Z는 파일명 허용하게, 모든 다른 문자가 밑줄 (_)

3) md5_file()을 대체되고, 이는 추가된다 같은 이름을 가진 다른 파일 IFF 파일 이름이 이미

는이 explained here

관련 문제