Extra Form
PHP PHP 7.4
CMS Rhymix 2.0

모듈의 controller 파일에서

$_SESSION['excel_sheet'] = $excel_sheet;
$this->setRedirectUrl('./modules/excel/libs/xlsxwriter.downloader.php');

이렇게 세션값을 넣어주고 페이지를 리다이렉트하면요.

(물론 controller 파일의 해당 코드가 들어간 함수에서도 권한 체크는 나름 해뒀습니다)

 

해당 파일(xlsxwriter.downloader.php)에서는 

<?php
//url 로 직접 불러오는것을 방지
if ( !strstr($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) && !strstr($_SERVER['HTTP_REFERER'], 'xlsxwriter.downloader.php') )
{
    exit;
}

include_once '../../../common/autoload.php';
Context::init();

$sheet = $_SESSION['excel_sheet'];
unset($_SESSION['excel_sheet']);
if ( !isset($sheet) || empty($sheet) )
{
    exit;
}

// .... 하략

이런 식으로 $_SESSION 값을 받아서 바로 해제시켜줬는데요.

제가 보안 쪽은 잘 모르는 선무당이다보니 혹시 문제가 있을지 염려되어 질문글 남깁니다.

  • profile
    post 로 보내면 되지 않을까요?
    세션 사용할거라면 권한 체크는 세션으로 하는게 나을것 같습니다.
    empty 함수는 내부적으로 !isset을 포함하고 있습니다. 따라서 if의 앞 !isset 은 없어도 됩니다.
  • profile profile

    POST로 보내기에는 다차원 배열로 되어 있어서요. json_encode로도 던져봤는데 양이 많아서인지 튕기더라구요.
    권한 체크는 데이터 핸들링 때문에 컨트롤러 단에서 처리했던 거였는데, 아예 폼 입력값 자체를 외부 파일에 넘겨주고 거기서 권한 체크랑 데이터 처리를 바로 하는 게 나을 수 있겠군요. 고민을 좀 해보겠습니다ㅜ
    그리고 "empty는 !isset을 포함" 명심해두겠습니다!