Tip & Tech

활용팁

홈 > 회원포럼 > 활용팁
활용팁

게시판에서 DB내 본인이 원하는 자료 호출하는 방법

7 천사소년네틱 2 275 0 3

제가 썻던 방법이 에러났는데 다른 코드로 하니까 성공했네요.

다른 분에게 도움이 될 것 같아서 공유합니다.


1. 에러나는 방법


            <?php

               

              // 2 day


              $query = "SELECT * FROM g5_write_$boardtable WHERE wr_num='$wr_num' && wr_reply='B'  ";

              $result = mysql_query($query);

              if (!$result) {

                die('Invalid query: ' . mysql_error());

              } 


              while ($row = @mysql_fetch_assoc($result)){


            ?>


            <div class='daytrip'>

                <?php 

                    if($member['mb_level']>=10){ echo '<a href="'.G5_BBS_URL.'/write.php?w=u&bo_table='.$boardtable.'&wr_id='.$row['wr_id'].'&type=addtour">';}

                    echo ' 2 Day &nbsp;&nbsp;  <b style="color:#00ACC6"> '.$row['wr_5'].'</b></a>';

                ?> 

            </div>

            <br>

                <div style="padding-left: 20px;"><?php echo $row['wr_content']; ?></div>

            <br><br> 


            <?php } ?>




2. 잘 되는 방법


        <?php


          $topic = $_GET['wr_id']; 

          $sql = "SELECT * FROM g5_write_$boardtable WHERE wr_id=$topic";

          $result = sql_query($sql);

          for ($i=0; $row=sql_fetch_array($result); $i++){   

        ?>


            <div class='daytrip'>

                <?php 

                    if($member['mb_level']>=10){ echo '<a href="'.G5_BBS_URL.'/write.php?w=u&bo_table='.$boardtable.'&wr_id='.$row['wr_id'].'&type=addtour">';}

                    echo ' 1 Day &nbsp;&nbsp;  <b style="color:#00ACC6"> '.$row['wr_5'].'</b></a>';

                ?> 

            </div>

            <br>

                <div style="padding-left: 20px;"><?php echo $row['wr_content']; ?></div>

            <br><br> 


        <?php

        }

        if ($i == 0)

            echo '<tr><td colspan="'.$colspan.'" class="empty_table">자료가 없습니다.</td></tr>';

        ?>

2 Comments
M 한별아빠 09.27 15:50  
1. 내릴려다가 알고 계신게 맞을꺼 같아 몇가지 코멘트를 달아야 할 듯 하네요. 그냥 사용하면 문제가 생기기 때문에...ㅠㅠ

2. 그전에 왜? 그누에서 사용하는 전역변수($g5 등)나 공용함수 및 변수는 사용하지 않는지? 그러니 보안 포함해서 가장 기본적인 문제가 발생하는 것이고, 실제 사용할 수 없는 코드가 되는 것입니다.

3. 먼저 아래 코드는 잘못되었습니다. 그냥 해킹해 달라는 코드예요. 그누 포함 실제 사용하는 프로그램들의 어디를 봐도 저렇게 코딩된 곳 없습니다. 있다면 강의 사이트에서 기본 이해를 위해서 설명하는 코드 정도...

$topic = $_GET['wr_id'];
$sql = "SELECT * FROM g5_write_$boardtable WHERE wr_id=$topic";

그누의 common.php 파일 234라인 이하를 체크해 보세요. 게시판 아이디나 wr_id 포함 각종 기본 파라메타에 대해서 어떻게 처리해 두었는지... 또 /lib/common.lib.php 파일에서 clean_xss_tags() 함수나 get_search_string() 함수가 왜 있는지도...ㅠㅠ

4. 그러니 이야기 드리는 것입니다. 이미 그누 자체에서 가공처리된 변수를 그대로 사용하시라고... 기본 변수에 대해서는 임의로 작업하지 마시고...

$sql = " select * from $write_table where wr_id = '$wr_id' "; //보안 및 DB관련 처리다된 구문..

그리고 위 기본구문은 common.php 파일 406라인에 나와 있습니다.

5. 결론은 그누 루트의 common.php 파일 처음부터 다시 체크해 보세요. 그렇지 않고 적으신 방법대로 사용하면 100% 해킹되고 사용자 환경에 따라서 일일이 쿼리구문 변경해 줘야 하니...ㅠㅠ

p.s : 참고로 위에 잘되는 방법이라고 적은 것은 앞서 이야기한 common.php 파일 406라인 아래 한 줄이면 끝이고 동일 결과입니다.ㅠㅠ

$row = sql_fetch(" select * from $write_table where wr_id = '$wr_id' ");

하나더 이야기하면 common.php 파일에 의해 이미 결과는 $write 배열변수에 다 담겨있고요. 즉, 돌릴이유가 전혀 없는 쿼리구문이라는 것입니다. 결국 출력되는 곳에 $row['wr_id'] 가 아니라 $write['wr_id'] 하면 끝이라는 것이죠. 쿼리구문 돌릴 필요도 없이...ㅠㅠ
좋은 답변 감사합니다.
최소 일주일은 공부해 봐야 겠네요.
이렇게 좋은 답변은 정말 처음 받아봅니다.
제목
최근 글
최근 댓글
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand