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서버연동