BOARD

팁·활용

그누보드 게시판 첨부파일 다른 페이지에서 다운로드 허용하기

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 0회 작성일 26-11-02 16:17

본문

그누보드 게시판 첨부파일 다른 페이지에서 다운로드 허용하기

그누보드에서 게시판 뷰 페이지가 아닌 메인이나 다른 외부 페이지에서도 첨부파일을 다운로드할 수 있도록 download.php 파일과 링크 경로를 수정하는 방법을 안내합니다.

그누보드 download.php 파일의 세션 체크 로직 수정 방법

그누보드5 환경에서 기본적으로 게시판 첨부파일은 해당 글의 뷰 페이지를 통해서만 다운로드할 수 있도록 세션 검증이 적용되어 있습니다. 뷰 페이지가 아닌 외부 페이지나 메인 화면 등 다른 곳에서도 첨부파일을 다운로드할 수 있게 하려면 /bbs/download.php 파일의 상단부 코드를 수정하여 특정 구분자(referer_page_index)가 전달된 경우에 예외를 허용하도록 분기 처리를 추가해야 합니다.

1. download.php 파일 수정 방법

그누보드5 설치 경로 내 /bbs/download.php 파일 상단부에서 기존 세션 검증 코드를 찾아 아래와 같이 변경합니다.

기존 코드:

if (!get_session('ss_view_'.$bo_table.'_'.$wr_id)) 
 alert('잘못된 접근입니다.');

변경 코드:

if($referer_page_index == 'index') {
 // 메인 페이지 등 다른 페이지에서는 예외로 다운로드를 허용합니다.
} else {
 if (!get_session('ss_view_'.$bo_table.'_'.$wr_id)) 
 alert('잘못된 접근입니다.');
}

2. 다운로드 링크 작성 시 조건

수정된 로직을 적용한 후 다른 페이지에서 첨부파일 다운로드 링크를 구성할 때는 URL에 referer_page_index=index 파라미터를 반드시 함께 전달해야 정상적으로 다운로드가 수행됩니다.

다른 페이지에서 특정 게시글의 첨부파일 다운로드 링크 작성 방법

그누보드5 환경에서 게시판 뷰 페이지가 아닌 메인 페이지나 다른 서브 페이지에서 특정 게시글의 첨부파일을 다운로드받게 하려면, 다운로드 링크 URL에 referer_page_index=index 구분자 파라미터를 포함하여 작성해야 합니다.

1. 기본 다운로드 링크 형식

특정 게시글의 첨부파일을 직접 지정하여 다운로드 버튼이나 링크를 구성할 때는 아래와 같은 형식으로 작성합니다.

<a href="<?php echo G5_BBS_URL;?>/download.php?bo_table=게시판이름&wr_id=게시글번호&no=0&referer_page_index=index">다운로드</a>
  • bo_table: 대상 게시판의 이름
  • wr_id: 첨부파일이 등록된 게시글 번호
  • no: 파일 순번 (첫 번째 파일은 0)
  • refererpageindex: 뷰 페이지 세션 검증을 우회하기 위한 구분자로 index 지정

2. 최신글 및 이전글 추출 연동 예시

최신글이나 이전글의 정보를 동적으로 조회하여 첨부파일 다운로드 링크에 연결하려면 다음과 같이 PHP 코드를 구성할 수 있습니다.

<?php
$download_board = "게시판이름"; 
$download_sql = " select * from {$g5['write_prefix']}{$download_board} where wr_is_comment='0' order by wr_id desc limit 1 "; 
$download_row = sql_fetch($download_sql); 

$download_sql2 = " select * from {$g5['write_prefix']}{$download_board} where wr_is_comment='0' order by wr_id desc limit 1,1 "; 
$download_row2 = sql_fetch($download_sql2);
?>

<a href="<?php echo G5_BBS_URL;?>/download.php?bo_table=<?php echo $download_board;?>&wr_id=<?php echo $download_row['wr_id'];?>&no=<?php echo $download_row2['bf_no'];?>&referer_page_index=index">다운로드</a>

3. 필수 선행 조건

위와 같은 링크를 통해 다른 페이지에서 파일을 정상적으로 다운로드하려면, 그누보드5의 /bbs/download.php 파일 상단부에서 referer_page_index 파라미터가 index일 때 기존의 세션 검증(get_session)을 통과하도록 예외 처리 코드가 사전에 수정되어 있어야 합니다.

최신글 및 이전글 첨부파일 추출과 다운로드 링크 연결 방법

그누보드5 환경에서 메인 페이지 등 뷰페이지가 아닌 다른 페이지에서 최신글이나 이전글의 첨부파일 정보를 동적으로 추출하여 다운로드 버튼에 연결하려면, sql_fetch 함수와 write_prefix를 활용하여 데이터베이스에서 게시글 정보를 조회한 뒤 다운로드 URL에 referer_page_index=index 구분자를 포함하여 구성하면 됩니다.

1. 다운로드 대상 글의 첨부파일 정보 추출 PHP 코드

다운로드 버튼을 표시할 페이지에 아래와 같이 최신글과 이전글의 데이터를 가져오는 코드를 작성합니다.

<?php
$download_board = "게시판이름"; // 대상 게시판 아이디

// 최신글 추출
$download_sql = " select * from {$g5['write_prefix']}{$download_board} where wr_is_comment='0' order by wr_id desc limit 1 ";
$download_row = sql_fetch($download_sql);

// 최신글의 첨부파일 지정을 위한 두 번째 행(또는 bf_no 지정을 위한 기준) 추출
$download_sql2 = " select * from {$g5['write_prefix']}{$download_board} where wr_is_comment='0' order by wr_id desc limit 1,1 ";
$download_row2 = sql_fetch($download_sql2);

// 이전 게시글 추출
$download_pre_sql = " select * from {$g5['write_prefix']}{$download_board} where wr_is_comment='0' order by wr_num asc limit 1,1 ";
$download_pre_row = sql_fetch($download_pre_sql);
?>

2. 추출한 정보로 다운로드 링크 및 이전글 보기 링크 구성하기

추출한 $download_row, $download_pre_row, $download_row2['bf_no'] 등의 값을 활용하여 링크를 출력합니다.

<div style="float:left;">
 <a href="<?php echo G5_BBS_URL;?>/board.php?bo_table=<?php echo $download_board;?>&wr_id=<?php echo $download_pre_row['wr_id'];?>">이전글보기</a>
</div>
<div style="float:left;">
 <a href="<?php echo G5_BBS_URL;?>/download.php?bo_table=<?php echo $download_board;?>&wr_id=<?php echo $download_row['wr_id'];?>&no=<?php echo $download_row2['bf_no'];?>&referer_page_index=index">다운로드</a>
</div>
<div style="clear:both;"></div>

3. 필수 선행 조건 (download.php 파일 수정)

다른 페이지에서 다운로드를 허용하려면 그누보드5의 /bbs/download.php 파일 상단부 세션 체크 로직을 수정해야 합니다. 이 작업이 선행되지 않으면 메인 페이지 등에서 다운로드 시 '잘못된 접근입니다.' 경고가 발생합니다.

/bbs/download.php 상단의 아래 코드를:

if (!get_session('ss_view_'.$bo_table.'_'.$wr_id)) alert('잘못된 접근입니다.');

다음과 같이 분기문으로 변경합니다.

if($referer_page_index=='index') { 
 // 메인 페이지 등 다른 페이지에서는 예외로 가능하도록 한다.
} else { 
 if (!get_session('ss_view_'.$bo_table.'_'.$wr_id)) alert('잘못된 접근입니다.'); 
}

4. 주의사항

제시된 download.php 수정 방식은 기존의 세션 검증 로직을 우회하므로, 게시판 뷰 페이지를 거치지 않고도 누구나 파일 경로를 추측하여 다운로드할 수 있는 보안 취약점이 발생할 수 있습니다. 운영 환경에 적용할 때는 특정 권한 사용자만 접근하도록 로직을 보완하거나 토큰 검증 등을 함께 검토하는 것이 안전합니다.

다운로드 제한 우회 시 보안 취약점과 주의사항

그누보드5의 download.php 파일 상단에서 세션 검증 로직(get_session('ss_view_'.$bo_table.'_'.$wr_id))을 수정하여 뷰 페이지가 아닌 다른 페이지에서도 첨부파일을 다운로드할 수 있도록 우회하는 방식을 적용할 때, 다음과 같은 보안 리스크가 발생할 수 있습니다.

  • 임의 파일 접근 및 추측 다운로드 위험: 기존 세션 검증 로직을 우회하면, 게시판 뷰 페이지를 거치지 않고도 외부에서 직접 파일 경로를 추측하거나 요청하여 다운로드 링크에 접근할 수 있게 됩니다.
  • 권한 제어 부재: 특정 권한이나 인증 상태를 엄격하게 확인하는 추가 검증 절차 없이 파라미터(referer_page_index)만으로 예외를 허용할 경우, 보호되어야 할 첨부파일이 무단으로 유출될 우려가 있습니다.

운영 환경 적용 시 권장 조치

  • 단순 파라미터(referer_page_index) 확인 방식에만 의존하지 않고, 요청을 수행하는 사용자의 권한 레벨을 함께 체크하거나 유효한 일회성 토큰 검증 로직을 보완하는 방식을 검토해야 합니다.

그누보드 외부 페이지 첨부파일 다운로드 설정 순서

내 상황우선할 판단다음 행동
메인 페이지나 서브 화면에서 첨부파일을 다운로드 링크로 제공해야 함download.php 파일의 기본 세션 체크 로직 수정 필요성 검토/bbs/download.php 상단부에 referer_page_index 예외 처리 분기문 추가
외부 페이지 또는 최신글 목록에 다운로드 버튼을 배치해야 함다운로드 URL에 referer_page_index=index 파라미터 및 게시판 정보 포함 여부 확인download.php?bo_table=게시판이름&wr_id=글번호&no=파일번호&referer_page_index=index 형태로 링크 구성
세션 우회 적용 후 보안 취약점이 우려되는 운영 환경무단 파일 접근 방지를 위한 권한 검증 또는 추가 보안 조치 검토사용자 권한 레벨 체크 및 일회성 토큰 검증 로직 보완 검토

실전 FAQ

Q. download.php 파일을 수정했는데도 여전히 '잘못된 접근입니다.' 경고가 뜹니다.

  • 예외·대안: 다운로드 링크 URL에 referer_page_index=index 파라미터가 정확히 포함되어 있는지 확인하세요. 파라미터명이 다르거나 누락되면 download.php의 분기문이 정상적으로 동작하지 않아 기존 세션 검증에 걸리게 됩니다.

Q. 세션 검증을 우회할 때 발생할 수 있는 보안 문제와 대책은 무엇인가요?

  • 막히는 지점: 뷰 페이지를 거치지 않고 파라미터만으로 다운로드를 허용하면, 외부에서 파일 경로를 추측하여 무단으로 파일을 다운로드할 수 있는 취약점이 생깁니다.
  • 대안: 단순 파라미터 비교 방식 외에 현재 로그인한 사용자의 권한을 함께 확인하거나, 요청 시 유효한 토큰을 검증하는 로직을 추가하는 것을 권장합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.