금지단어 필터링 제발 도와주세요오 ㅠㅠ

금지단어 필터링 제발 도와주세요오 ㅠㅠ

QA

금지단어 필터링 제발 도와주세요오 ㅠㅠ

본문

일단 저는 https://sir.kr/g5_skin/25290?sfl=wr_subject%7C%7Cwr_content&stx=%EC%83%81%EB%8B%B4#c_29795

해당 스킨을 사용중입니다.

메인페이지에서 상담폼을 입력하면 다른 게시판으로 그 내용이 가게되죠.

이 입력폼은 그냥 일반 php파일을 인클루드하여 메인페이지에 불러온것이구요 write.skin.php파일에서 글을 쓰지않습니다.

 

스킨안에는 write_update.head.skin.php 와 write_update.skin.php 파일이 두개가있습니다.

이곳에 금지단어 필터링을 넣으려고 시도했습니다.

 


<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
 $keystring = uniqid();
set_session("ss_captcha_count", 0);
set_session("ss_captcha_key", $keystring);
$captcha_key = $_POST['captcha_key'] = get_session('ss_captcha_key');
?> 

 

위의 것은 write_update.head.skin.php 의 코드입니다. 솔직히 저게 지금 제기능을 하는지도 모르겠습니다. 왜있는지 모르겠습니다. 캡챠는 사용도안합니다.

 


<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
function word_filter_check($subject, $content, $config)
{
    $mod_subject = strtolower($subject);
    $mod_content = strtolower(strip_tags($content));
    $filter = explode(",", trim($config['cf_filter']));
    $count = count($filter);
    $error = '';
    for ($i=0; $i<$count; $i++) {
        $str = $filter[$i];
        // 제목 필터링 (찾으면 중지)
        $pos = strpos($mod_subject, $str);
        if ($pos !== false) {
            $error .= '제목에 금지단어(\''.$str.'\')가 포함되어있습니다.';
            break;
        }
        // 내용 필터링 (찾으면 중지)
        $pos = strpos($mod_content, $str);
        if ($pos !== false) {
            $error .= '내용에 금지단어(\''.$str.'\')가 포함되어있습니다.';
            break;
        }
    }
    if($error != '')
        die($error);
}
 
//이부분부터는 문의글 등록시 관리자에게 문자발송하는 코드입니다..
//의뢰맡겨서 한거라서 혹시몰라서 비공개..
//include_once(G5_LIB_PATH.'/icode.sms.lib.php'); 

 // 문의글 등록시 관리자에게 전송 
 // alert("성공적으로 접수되었습니다.", G5_URL); 
 // 문자보내기 끝 
alert('견적문의 가 접수되었습니다.', G5_URL);

?>

 

위의 코드는 write_update.skin.php 의 소스입니다.

저기다가 저렇게 넣어줬는데요..

전혀 작동하지않다더군요..

sir에 검색해보니 write_update.head.skin.php에 넣으라는데 거기에 넣어도 똑같이 안되구요..

 

어떻게 해야할지요 ㅠㅠ

 


<script language="javascript">
var char_min = parseInt(<?=$write_min?>); 
var char_max = parseInt(<?=$write_max?>); 
</script>
<?php
    add_stylesheet('<link rel="stylesheet" href="'.G5_THEME_CSS_URL.'/main.css?ver='.G5_CSS_VER.'">', 0);
?>
<script type="text/javascript">
function checkFrm(obj) {
if(obj.wr_6.checked == false) {
  alert('개인정보 활동동의에 체크해주세요.');
  obj.wr_6.focus();
  return false;
 }
}
</script>
<div class="form-box" >
  <form name="frm" method="post" action="/bbs/write_update.php" onsubmit="return checkFrm(this);">
        <input type="hidden" name="token" value=<?php echo get_write_token('online') ?>> 
        <input type=hidden name="bo_table" value="online">
        <input type=hidden name="wr_7" value="">
        <input type=hidden name="wr_8" value="">
        <input type=hidden name="wr_9" value="">
        <input type=hidden name="wr_10" value="">
        <input type=hidden name="wr_name" value="관리자">
        <input type=hidden name="wr_subject">
        <input type=hidden name="wr_content" value="">
        <div class="form-con">
            <ul>
                <li class="input_box box2">
                    <input type="text" name="wr_subject" placeholder="이름" required itemname="이름"/>
                </li>
                <li class="input_box box1">
                    <select name="wr_7" id="" class="select-1" required itemname="연락처">
                        <option value="010">010</option>
                        <option value="011">011</option>
                        <option value="016">016</option>
                        <option value="017">017</option>
                        <option value="018">018</option>
                        <option value="019">019</option>
                    </select>
                    <input type="text" name="wr_8" maxlength="4" required itemname="연락처"/>
                    <input type="text" name="wr_9" maxlength="4" required itemname="연락처"/>
                </li>
                <li class="text_box">
                    <textarea name="wr_content" id="" cols="30" rows="10" placeholder="상담내용" required itemname="문의내용"></textarea>
                </li>
            </ul>
            <div class="provision">
                <label for="provision-check">
                    <input id="provision-check" type="checkbox" name="wr_6" value="6" <?=$write[wr_6]?>/>
                    <span><a href="/bbs/content.php?co_id=privacy" target="_blank">개인정보취급방침</a>을 읽었으며 내용에 동의합니다.</span>
                </label>
            </div>
        </div>
        <div class="receive-btn">
            <input name="image" type="submit" value="상담신청하기" alt="상담신청하기">
        </div>        
  </form>
</div>
<script>
    jQuery('#selectBox').change(function() {
        var state = jQuery('#selectBox option:selected').val();
        if ( state == 'option2' ) {
            jQuery('.layer').show();
        } else {
            jQuery('.layer').hide();
        }
    });
</script>

<!--//-->

 

위의 코드는 상담문의폼 php파일입니다. 이 파일은 루트폴더에 있구용.

index.php파일에 <? include_once("./customer1.php"); ?> 이렇게 불러와서 사용하고있습니다..

 

제발 도와주세요 어떻게해야할지.. 진짜 상담문의들어올때마다 문자가 관리자에게 가고있는데 거의 뭐 폭탄처럼 몇분마다 한번씩 오니까.. 진짜 폭탄이라는말이 걸맞을정도로 많이와요 ㅠㅠ 금지단어 필터링으로 해서 아예 그 스팸특유의 단어들 막아놓으면 될거같아서요... 그전에 워드프레스에서도 그렇게 해서 스팸DB를 많이 줄였던 경험이있습니다.

 

도와주세요!!!!!!!!!!!!

이해가 안되신다면 성심성의껏 설명해드리겠습니다 제발제발 도와주세요 ㅠㅠ

이 질문에 댓글 쓰기 :

답변 2

www/bbs/write_update.php 를 보시면 아시겠지만

 

write_update.head.skin.php 이후

DB작업이 진행되고(수정, 삽입, 가변파일처리등)

이후 write_update.skin.php과 write_update.tail.skin.php가 진행됩니다.

 

현재 내용만으로는 단순히필터링 기능만 작동하지 않는지(글도 icode도 정상작동)

write_update.head.skin.php 자체가 읽히지 않는다는것인지(데이터 부족으로 인한 path수집 실패) 알수 없는데

 

www/bbs/write_update.php에서 디버깅을 어느정도 진행해 보시는게 좋을것으로 보입니다.

디버깅은 어떻게하나요..?ㅠ 제가 너무 몰라서요..
/bbs/write_update.php에 보니까


// 사용자 코드 실행
@include_once($board_skin_path.'/write_update.skin.php');
@include_once($board_skin_path.'/write_update.tail.skin.php');


이렇게 두개밖에없길래 @include_once($board_skin_path.'/write_update.head.skin.php'); 를 추가해줬습니다..
그리고 write_update.head.skin.php 에서
//$keystring = uniqid();
//set_session("ss_captcha_count", 0);
//set_session("ss_captcha_key", $keystring);
//$captcha_key = $_POST['captcha_key'] = get_session('ss_captcha_key');

를 주석처리하고 금지단어 필터링 코드를 넣었는데..
그래도 안되네요 ㅠㅠ

그누보드 원본상태(버전 5.3.2.9)기준 write_update.php파일 128번 줄에 @include_once($board_skin_path.'/write_update.head.skin.php');가 있어야 정상입니다.

write_update.head.skin.php의 위치에 따라 작동하지 않을 수 있습니다.

$board_skin_path의 값이 들어가있는지 확인이 필요하고 들어가있다면 그 값이 정상인지도 확인해봐야합니다.
정상적으로 write_update.head.skin.php파일을 include한다면 word_filter_check를 불러오는지 확인 후 word_filter_check가 정상작동 하는지 확인 해 봐야겠죠.

아아 보니까 @include_once($board_skin_path.'/write_update.head.skin.php'); 은 있었네요 ㅎ
그런데 word_filter_check를 불러오는지는 어디서 확인하죠?
write_update.head.skin.php 파일에도 없구 /bbs/write_update.php 에도 그런건 없네요 ㅠㅠ

word_filter_check는 본인이 추가한게 아닌가요?

write_update.skin.php에 추가되어있는 word_filter_check 함수를 write_update.head.skin.php에 옮긴뒤에 word_filter_check 함수 선언 이후 사용하시면 되지 않을까요?

아까도 말씀드렸지만

write_update.php의 처리프로세스는

1. 예외처리 또는 공격방어
2. write_update.head.skin.php을 include
3. DB처리(글입력, 글수정, 가변파일처리)
4. 메일링 처리
5. write_update.skin.php
6. write_update.tail.skin.php
7. 종료(파일 업로드 메세지출력 또는 URL이동)
입니다.
DB처리가 시작되기 전인 write_update.head.skin.php에서 필터를 확인 및 작업을 지속할지 튕겨낼지를 정하시면 됩니다.

저렇게 할 필요가 없는 작업입니다

basic스킨 write.skin.php

하단 자바스크립트에 보면 관리자 페이지에서 등록한 단어들을 필터링하는 코드가 들어있습니다

쓰기 스킨  function fwrite_submit(f) 부분을 비교하여 수정해서 해보세요 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 50
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT