기본적으로 파일을 업로드하면 실제 저장되는 파일명이 암호화되어 저장됩니다.

 

이걸 특정 조건에서는 원본 이름이나, 제가 지정한 이름으로 저장하고 싶은데 방법이 있을까요?

 

 

참고로 file 모듈의 insertFile을 사용합니다...

 

$manul_insert 이게... 그대로 유지하는 건 가 했더니.. 아닌 가 보군요..

  • profile

    modules/file/file.controller.php 682줄 전후에서 파일명이 랜덤으로 변경됩니다.
    (최근 버전에서는 md5가 아니라 그냥 순수 랜덤으로 합니다.)

     

    여기를 수정하시면 되는데,

    원본 파일명에 해킹에 사용될 수 있는 특수문자나 서버 오류를 일으키는 문자가 포함되어 있을 수도 있고,
    서버에 따라서는 한글 파일명이 깨지는 경우도 있기 때문에 조심하셔야 해요.

     

    요즘 제대로 세팅된 UTF-8 서버라면 한글 파일명이 깨지는 일은 거의 없겠고... (가끔 IE가 말썽이죠 ㅠ)
    파일명에 포함된 위험한 문자를 제거하는 방법은 라이믹스의 FilenameFilter 클래스를 참고해 보세요.

  • profile profile

    아 그래서 파일명이 'need' 이면 그대로 need로 저장하게 하는 정도로 하려구요..ㅎㅎ 그외에는 모두 기존 규칙을 따르게 하구요..!

    이러면 크게 보안상 문제가 없겠죠?

     

    답변 정말 감사합니다^^!!

  • profile profile

    앗 근데 라이믹스 기준으로... 는 어디에 있을까요..ㅠ? xe는 이제...네이버..

     

    혹 시 이 부분 맞나요?

     

    // A workaround for Firefox upload bug
    if(preg_match('/^=\?UTF-8\?B\?(.+)\?=$/i', $file_info['name'], $match))
    {
    $file_info['name'] = base64_decode(strtr($match[1], ':', '/'));
    }

     

  • profile profile

    아 찾았습니다.

     

    if(preg_match('/^need/',$file_info['name'],$m))
    {
    $_filename = $m[0]. '.' . $ext;
    }
    else
    {
    $_filename = Rhymix\Framework\Security::getRandom(32, 'hex') . '.' . $ext;
    }

     

    요로코롬 변경했습니다. 잘되네요...

  • profile profile
    그대로 저장하면 보안상 문제 생기고요... FIlenameFilter 한번 거치고 escape도 해주세요.
  • profile profile

    현재 이렇게 짜여 있습니다. insert_file로 넘기기 전

     

    $fileName = $file["name"];
    preg_match('/(.+)(\.jpe?g|png|bmp|gif)$/',$file["name"],$m);
    
    if($m[1] && $m[2])
    {
    $file["name"] = 'need'.$m[2];
    }
    $uploadedFile = $oFileController->insertFile($file, $module_info->module_srl, $upload_target_srl, 0, false);
    $uploadedFileSize = list($width, $height, $type, $attrs) = @getimagesize($uploadedFile->get('uploaded_filename'));
    list($width, $height, $type, $attrs) = @getimagesize($uploadedFile->get('uploaded_filename'));
    
    //이미지 비율이 2:1인지 체크
    if(($width / $height) == 2)
    {
    debugPrint('이미지가 2:1 비율 맞음');
    }
    else
    {
    debugPrint('비율이 2:1이 아님');
    $errorMsg = '비율이 2:1이 아님';
    //이미지 삭제함
    $deleteFile = $oFileController->deleteFile($file_srl);
    debugPrint('그래서 삭제함');
    debugPrint($deleteFile);
    unset($uploadedFile);
    }

     

    insert 하기 전에 넘겨줘야 하는 건지 궁금하군요..ㅎㅎ

  • profile profile
    파일명을 변경하는 것은 insertFile 내부이니까 그 안을 고치는게 가장 확실하고요...
    $file['name']을 조작할 때 위험한 문자만 미리 필터링해줘도 되긴 해요.
  • profile profile
    감사합니다 ^^!