첨부파일의 확장자 필터링과 서버정보 과다 노출 정보
첨부파일의 확장자 필터링과 서버정보 과다 노출관련링크
본문
근 하루를 검색으로 보냈는데 제 능력으로 적용할수 있는 답변을 찾을 수가 없네요
제 질문과 동일한 질문이 예전에도 올라온 적은 있군요
그런데 제 능력으로는 도저히 적용 불가능이랍니다
여러 고수님들 도와주시면 정말로 감사하겠습니다
그리고 기본적으로 확장자를 제어해주는 기능이 기본기능에 포함되면 더 좋을 것 같습니다
기본환경설정에서 이미지 업로드나 플래시 업로드 등 확장자를 설정하는 부분이 있긴 하지만 그 외의 파일들도 (예로 php, jsp, asp등등) 업로드는 가능하더군요
그리고 또 한가지는 에러가 난 페이지가 있을때 그 페이지에서 서버의 정보가 필요이상으로 많이 보여진다고 하네요
아마도 에러가 났을 경우에 에러페이지를 임의로 하나 만들어 연결을 시키면 되지 않을까 하는 막연한 생각을 갖고 있는데 어느 파일에 어떻게 연결을 시켜야 하는지 전혀 깜깜이네요
예를 들어 웹호스팅 업체에서 서비스 기간 만료라던지 그 외 에러가 났을때 뜨는 페이지처럼 그런식으로 연결을 하고 에러 코드는 보이지 않도록 할 수 있을런지요?
그래도 어쩌다 정말 에러가 생겼을때는 그 에러코드가 보여야 어느 파일에 문제가 생겼는지 알수 있을텐데 만일 코드가 전혀 보이지 않는다면 그것도 걱정이네요
그래도 어쩌다 정말 에러가 생겼을때는 그 에러코드가 보여야 어느 파일에 문제가 생겼는지 알수 있을텐데 만일 코드가 전혀 보이지 않는다면 그것도 걱정이네요
이상 걱정은 많고 머리는 안 따라주는 그누보드 사용자 였습니다
여러분의 도움 절실히 기다리겠습니다
(포인트 걸기가 있는데 어느정도 포인트를 걸어야 되는지 몰라서 제가 가진 포인트 반을 걸어봅니다..._)
댓글 전체
엠클럽님 덕분에 좋은 소스 잘 사용하고 있습니다.
감사합니다..마담님~@ 요즘 잘 안보이십니다.^....^ 앗...퇴근시간이당...후다닥~~@@
파일업로드시 확장자의 문제는 (예로 php, jsp, asp등등) 은 -x 를 붙여서 저장이됩니다.
예제: abc.php 를 업로드하면 저장은 암호_abc.php-x
// 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함
$filename = preg_replace("/\.(php|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i", "$0-x", $filename);
예제: abc.php 를 업로드하면 저장은 암호_abc.php-x
// 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함
$filename = preg_replace("/\.(php|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i", "$0-x", $filename);
확인해보니 정말 헐랭이님 말씀대로 암호가 붙어서 저장이 되네요
사실 이렇다고 한다면 업로드가 된다 하더라도 서버안에서 실행이 될 가능성은 없을거라고 봐도 되겠군요
게시물 보기 페이지에서도 업로드된 파일의 이름이 보이지 않고 그냥 파일 다운로드 라고 보여지도록 수정을 했는데 학교의 선생님들께서 그냥 넘어가 주실런지 모르겠네요^^;;
그런데 애초에 업로드 자체가 안 되도록 하는 방법은 정녕 없을까요?......
사실 이렇다고 한다면 업로드가 된다 하더라도 서버안에서 실행이 될 가능성은 없을거라고 봐도 되겠군요
게시물 보기 페이지에서도 업로드된 파일의 이름이 보이지 않고 그냥 파일 다운로드 라고 보여지도록 수정을 했는데 학교의 선생님들께서 그냥 넘어가 주실런지 모르겠네요^^;;
그런데 애초에 업로드 자체가 안 되도록 하는 방법은 정녕 없을까요?......
2번은 별문제 없을것 같은데요
SQL 구문 오류 안나게 오류있는 부분을 수정하세요
SQL 구문 오류 안나게 오류있는 부분을 수정하세요
불친절한서기님//
아 제가 링크한 파일은 현재 오류가 난 페이지는 아닙니다
임의로 오류가 나도록 유도했을때(주소를 보여지는 페이지가 http://www.kyongin.es.kr/pop_schedule.php?bo_table=06sche&year=2006&month=10&day=9' 인데 끝에 '가 들어가서 그런겁니다) 보여지는 오류페이지에 필요이상으로 db테이블 정보라든가 sql문 시스템절대경로등이 노출이 되어서 해커들의 공격루트로 활용될 위험이 있다고 그러네요
현재 링크된 홈페이지는 학교홈페이지인데 교육청에서 이번에 모의해킹을 해본결과 취약점으로 지적된 사항들입니다
아무래도 학교에선 신경이 쓰일수밖에 없죠
여러분들께서 보안에 관련하여 여러가지 말씀들을 나눈것을 저도 읽어보았는데 어디까지가 완벽한 보안이라고 말할수는 없는 부분이라 어느정도선까지는 그래도 보안이 되어야 할 사항인것 같아 도움을 요청해봅니다
아 제가 링크한 파일은 현재 오류가 난 페이지는 아닙니다
임의로 오류가 나도록 유도했을때(주소를 보여지는 페이지가 http://www.kyongin.es.kr/pop_schedule.php?bo_table=06sche&year=2006&month=10&day=9' 인데 끝에 '가 들어가서 그런겁니다) 보여지는 오류페이지에 필요이상으로 db테이블 정보라든가 sql문 시스템절대경로등이 노출이 되어서 해커들의 공격루트로 활용될 위험이 있다고 그러네요
현재 링크된 홈페이지는 학교홈페이지인데 교육청에서 이번에 모의해킹을 해본결과 취약점으로 지적된 사항들입니다
아무래도 학교에선 신경이 쓰일수밖에 없죠
여러분들께서 보안에 관련하여 여러가지 말씀들을 나눈것을 저도 읽어보았는데 어디까지가 완벽한 보안이라고 말할수는 없는 부분이라 어느정도선까지는 그래도 보안이 되어야 할 사항인것 같아 도움을 요청해봅니다
SQL 인젝션에 관해 말씀 하신것 같은데 그누보드는 SQL 인젝션에 대비된 코드가 있는걸로 압니다.
방금 찾아보니
common.php에
//
// phpBB2 참고
// php.ini 의 magic_quotes_gpc 값이 FALSE 인 경우 addslashes() 적용
// SQL Injection 등으로 부터 보호
//
if( !get_magic_quotes_gpc() )
{
if( is_array($_GET) )
{
while( list($k, $v) = each($_GET) )
{
if( is_array($_GET[$k]) )
{
while( list($k2, $v2) = each($_GET[$k]) )
{
$_GET[$k][$k2] = addslashes($v2);
}
@reset($_GET[$k]);
}
else
{
$_GET[$k] = addslashes($v);
}
}
@reset($_GET);
}
if( is_array($_POST) )
{
while( list($k, $v) = each($_POST) )
{
if( is_array($_POST[$k]) )
{
while( list($k2, $v2) = each($_POST[$k]) )
{
$_POST[$k][$k2] = addslashes($v2);
}
@reset($_POST[$k]);
}
else
{
$_POST[$k] = addslashes($v);
}
}
@reset($_POST);
}
if( is_array($_COOKIE) )
{
while( list($k, $v) = each($_COOKIE) )
{
if( is_array($_COOKIE[$k]) )
{
while( list($k2, $v2) = each($_COOKIE[$k]) )
{
$_COOKIE[$k][$k2] = addslashes($v2);
}
@reset($_COOKIE[$k]);
}
else
{
$_COOKIE[$k] = addslashes($v);
}
}
@reset($_COOKIE);
}
}
코드가 있습니다.
http://www.kyongin.es.kr/pop_schedule.php?bo_table=06sche&year=2006&month=10&day=9'
위 링크의 소스는 그누보드가 아닙니다.
위 링크 프로그램 소스 상단에
if ( get_magic_quotes_gpc() != 1 ) {
$_GET = array_map('addslashes', $_GET);
$_POST = array_map('addslashes', $_POST);
}
을 추가해 보세요
그리고 확장자에 따른 업로드 금지는
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=35223&sca=&sfl=wr_subject%7C%7Cwr_content&stx=%C8%AE%C0%E5%C0%DA+%C1%A6%C7%D1&sop=and
링크를 참고해서 bbs/write_update.php 파일을 수정하세요.
phpschool만 잘 검색해봐도 답이 있는 질문들입니다. 어디서 검색해 보셨는지?..;;;
방금 찾아보니
common.php에
//
// phpBB2 참고
// php.ini 의 magic_quotes_gpc 값이 FALSE 인 경우 addslashes() 적용
// SQL Injection 등으로 부터 보호
//
if( !get_magic_quotes_gpc() )
{
if( is_array($_GET) )
{
while( list($k, $v) = each($_GET) )
{
if( is_array($_GET[$k]) )
{
while( list($k2, $v2) = each($_GET[$k]) )
{
$_GET[$k][$k2] = addslashes($v2);
}
@reset($_GET[$k]);
}
else
{
$_GET[$k] = addslashes($v);
}
}
@reset($_GET);
}
if( is_array($_POST) )
{
while( list($k, $v) = each($_POST) )
{
if( is_array($_POST[$k]) )
{
while( list($k2, $v2) = each($_POST[$k]) )
{
$_POST[$k][$k2] = addslashes($v2);
}
@reset($_POST[$k]);
}
else
{
$_POST[$k] = addslashes($v);
}
}
@reset($_POST);
}
if( is_array($_COOKIE) )
{
while( list($k, $v) = each($_COOKIE) )
{
if( is_array($_COOKIE[$k]) )
{
while( list($k2, $v2) = each($_COOKIE[$k]) )
{
$_COOKIE[$k][$k2] = addslashes($v2);
}
@reset($_COOKIE[$k]);
}
else
{
$_COOKIE[$k] = addslashes($v);
}
}
@reset($_COOKIE);
}
}
코드가 있습니다.
http://www.kyongin.es.kr/pop_schedule.php?bo_table=06sche&year=2006&month=10&day=9'
위 링크의 소스는 그누보드가 아닙니다.
위 링크 프로그램 소스 상단에
if ( get_magic_quotes_gpc() != 1 ) {
$_GET = array_map('addslashes', $_GET);
$_POST = array_map('addslashes', $_POST);
}
을 추가해 보세요
그리고 확장자에 따른 업로드 금지는
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=35223&sca=&sfl=wr_subject%7C%7Cwr_content&stx=%C8%AE%C0%E5%C0%DA+%C1%A6%C7%D1&sop=and
링크를 참고해서 bbs/write_update.php 파일을 수정하세요.
phpschool만 잘 검색해봐도 답이 있는 질문들입니다. 어디서 검색해 보셨는지?..;;;
아래 글을 참고하시기 바랍니다.
http://sir.co.kr/bbs/board.php?bo_table=cm_oktea&wr_id=515
http://sir.co.kr/bbs/board.php?bo_table=cm_oktea&wr_id=515