Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Warning
title주의사항

서버 보안 부부은 아래 링크를 참고하여 작업을 처리해주세요.

[소프트웨어 보안약점 진단가이드]


1. 사전설치

2. 이미지 업로드 (동영상, 파일 업로드도 동일)

Warning
title주의사항

가이드로 제공되는 아래 코드 중 파일 업로드 부분은 샘플 코드로서 보안 관련 처리가 미흡합니다.

파일 업로드 부분은 프로젝트 내부에서 사용하시는 부분을 그대로 사용하시고 아래 코드를 참고하셔서 연동 부분을 처리해주세요. 


Code Block
languagephp
themeEmacs
linenumberstrue
<?php
try {
    //업로드 디렉토리
    $uploadDir = 'uploads/images';

    //폼 데이터 이름
    $fieldName = 'file';

    //파일 이름
    $fileName = explode('.', $_FILES[$fieldName]['name']);

    //파일 확장자
    $extension = end($fileName);

    //임시 파일 이름
    $tmpName = $_FILES[$fieldName]['tmp_name'];

    //저장될 새로운 파일이름
    $newFileName = sha1(microtime());

    //실제 파일 업로드 경로
    $fileUploadPath = "${uploadDir}/${newFileName}.${extension}";

    //파일을 저장합니다
    move_uploaded_file($tmpName, $fileUploadPath);

    //클라이언트로 응답을 보냅니다.
    header('Content-Type: application/json');
    echo json_encode(array(
        'uploadPath' => $fileUploadPath,
    ));

} catch (Exception $e) {
    echo $e->getMessage();
    http_response_code(404);
}




3. HWP,

...

Word,

...

Excel 문서 임포트

Warning
title주의사항

가이드로 제공되는 아래 코드 중 파일 업로드 부분은 샘플 코드로서 보안 관련 처리가 미흡합니다.

파일 업로드 부분은 프로젝트 내부에서 사용하시는 부분을 그대로 사용하시고 아래 코드를 참고하셔서 연동 부분을 처리해주세요. 


Code Block
languagephp
themeEmacs
linenumberstrue
<?php
try {
    // upload path
    $uploadDir = 'uploads/docs';


    // form filed name
    $fieldName = 'file';

    // file name
    $fileName = explode('.', $_FILES[$fieldName]['name']);

    //file extension
    $extension = end($fileName);

    // temp file name
    $tmpName = $_FILES[$fieldName]['tmp_name'];

    // new file name to save
    $newFileName = sha1(microtime());

    // file upload path
    $fileUploadPath = "${uploadDir}/${newFileName}.${extension}";

    // save file to disk
    move_uploaded_file($tmpName, $fileUploadPath);

    // directory name to save conversion result
    $wordDir = 'works';

    // execute conversion
    $importPath = "${wordDir}/${newFileName}";
    executeConverter($fileUploadPath, $importPath);

    // serialize document data
	// v2.3.0 부터 파일명이 document.word.pb에서 document.pb로 변경됨
    $pbFilePath = "${importPath}/document.pb";
    $serializedData = readPBData($pbFilePath);

    // send response
    header('Content-Type: application/json');
    echo json_encode(array(
        'serializedData' => $serializedData,
        'importPath' => $importPath,
    ));

} catch (Exception $e) {
    echo $e->getMessage();
    http_response_code(404);
}

function executeConverter($inputFilePath, $outputFilePath)
{
    $sedocConverterPath = 'c:/sedocConverter/sedocConverter.exe';
    $fontsDir = 'c:/sedocConverter/fonts';
    $tempDir = 'c:/sedocConverter/tmp';

    $cmd = "${sedocConverterPath} -f ${fontsDir} ${inputFilePath} ${outputFilePath} ${tempDir}";
    exec($cmd);
}


function readPBData($pbFilePath)
{
    $fb = fopen($pbFilePath, 'r');
    $data = stream_get_contents($fb, -1, 16);
    fclose($fb);

    $byteArray = unpack('C*', zlib_decode($data));
	// php 5.4.0 미만
    // $byteArray = unpack('C*', gzuncompress($data));
    $serializedData = array_values($byteArray);

    return $serializedData;
}





관련정보


Children Display
page서버연동