• 목록
  • 아래로
  • 위로
  • 6
  • 260578
  • 조회 수 715

정규표현식 사이트(regex101)에서 테스트 해본 결과로는 문제 없이 작동하고

PHP Sandbox(http://sandbox.onlinephpfunctions.com/) 에서 내용을 입력하고 테스트 해봐도 문제 없이 잘 되는데

처리 코드에서 오류가 있는 것인지, 이 글에서는 4개만 처리되고 나머지는 처리되지 않고 있습니다.

 

제 나름대로 살펴보고 있으나, 여섯시간동안 살펴봤지만 해결책을 찾지 못했거니와 시험 기간인 터라 시간이 부족하여 더 이상 붙잡고 있을 수가 없습니다.

알고 계신것이 있다면 부디 무엇이 문제인지 알려주세요. 외면하지 마시고 힌트라도 주시길 간곡히 부탁드립니다.

 

== 개요 ==
동아시아에 위치한 국가. 수도는 서울이고 언어는 한국어와 한국 수어. 자유민주주의 체제의 국가이고 인구수는 약 5천만명.
강한 군사력과 안정적인 경제를 갖춘 국가로 선진국이자 강대국이다. 믹타(MIKTA)와 G20에 가입해 있는 국가이다.

== 행정구역 ==
 광역자치단체는 1특별시 6광역시 1특별자치시 8도 1특별자치도로 이뤄져 있다. [[서울특별시]], [[부산광역시]], [[인천광역시]], [[대구광역시]], [[대전광역시]], [[광주광역시]], [[울산광역시]], [[세종특별자치시]], [[경기도]], [[경상남도]], [[경상북도]], [[전라남도]], [[전라북도]], [[충청남도]], [[충청북도]], [[강원도]]이다. 싱세 사항은 각 문서를 참고하자.

 

 

해당 코드
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
            if(preg_match_all('/\[\[([^\|\[]+)(\|*)([^\|\[]*?)\]\]/mu'$doc$link)) {
                $i = 0;
                foreach ($link as $incArr) {
                    $linkA $link[0][$i];
                    $linkT $link[1][$i];
                    $linkS $link[3][$i];
                    if(strpos($linkT'#')){
                        $link_arr explode('#'$linkT);
                        $linkT $link_arr[0];
                        $isAnchor = TRUE;
                    }
 
                    $sql "SELECT `content` FROM `_article` WHERE `title` = '$linkT'";
                    $result = mysqli_query($conn$sql);
                    if(mysqli_num_rows($result) < 1){
                        $linkC 'class="link-red" ';
                    }else{
                        unset($linkC);
                    }
 
                    if($isAnchor){
                        $linkT .= '#'.$link_arr[1];
                    }
 
                    if($linkS == ''){
                        $doc str_ireplace($linkA'<a '.$linkC.'href="/w/'.$linkT.'">'.$linkT.'</a>'$doc);
                    }else{
                        $doc str_ireplace($linkA'<a '.$linkC.'href="/w/'.$linkT.'">'.$linkS.'</a>'$doc);
                    }
                    $i++;
                    if ($i > 2000) {
                        die('하이퍼링크가 너무 많습니다!');
                    }
                }
            }

 

글 속에서 대괄호 두개("[[", "]]")로 둘러싸인 부분을 링크로 바꿔주기 위해 작성하였습니다.

작성자
260578 58 Lv. (62%) 274930/278480EXP

반가워요!

댓글 6

title: 황금 서버 (30일)humit
profile image
+1

Sandbox에서 어떻게 테스트를 하신지 모르겠지만 4개만 바뀌는 것이 정상입니다.

아래 링크는 질문자분의 소스코드에서 sql 부분만 제거한 내용입니다.

해당 실행 결과를 보시면 4개가 나오는 것이 맞습니다.

 

https://ideone.com/o7b93u

Ideone is something more than a pastebin; it´s an online compiler and debugging tool which allows to ...

 

이유는 저 정규식에서 매칭으로 찾는 그룹이 총 3개이므로 $link의 크기가 4이기 때문에 for문이 4번 돌아서 발생하는 문제입니다.

 

아래 링크는 해당 현상을 해결한 코드입니다.

 

https://ideone.com/QgPm39

 

comment menu
2020.05.28. 17:45

신고

"humit님의 댓글"

이 댓글을 신고 하시겠습니까?

260578 작성자 → humit
profile image
감사합니다!
comment menu
2020.05.28. 18:39

신고

"260578님의 댓글"

이 댓글을 신고 하시겠습니까?

title: 황금 서버 (30일)humit
profile image
추가로 코드를 저렇게 작성하게 되면 XSS 공격에 취약하기 때문에 해당 부분도 고려해보시기 바랍니다.
comment menu
2020.05.29. 23:49

신고

"humit님의 댓글"

이 댓글을 신고 하시겠습니까?

260578 작성자 → humit
profile image
윗줄에서 HTMLPurifier를 사용하는데, 더 해야하나요?
comment menu
2020.05.29. 23:53

신고

"260578님의 댓글"

이 댓글을 신고 하시겠습니까?

title: 황금 서버 (30일)humit → 260578
profile image
아마 HTMLPurifier를 사용하는 것이 $doc 부분에서 사용하시는 거 같은데 거기서만 하는 걸로는 부족합니다.

예를 들어 $doc = '[[link" onmouseover="alert(String.fromCharCode(0x58,0x53,0x53))]]' 인 경우를 생각해보면 해당 $doc 부분에는 html 코드가 전혀 존재하지 않으므로 HTMLPurifier가 필터링하지 않습니다.

하지만 해당 내용을 링크로 변환하는 과정에서 취약점이 발생합니다.
comment menu
2020.05.30. 00:12

신고

"humit님의 댓글"

이 댓글을 신고 하시겠습니까?

260578 작성자 → humit
profile image
아, 그렇군요
comment menu
2020.05.30. 22:30

신고

"260578님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 6 마스터 23.01.14.02:23 42671
공지 [필독] 질문하는 방법 17 마스터 18.02.23.03:09 5656
210 스마트폰 케이스 추천 부탁드립니다! 14 이니스프리 20.05.08.20:56 350
209 와! 버그 2 image {Cog} 20.05.09.07:27 494
208 메일 서버 구축과 관련해 질문 있습니다! 13 갱생협스 20.05.10.14:24 678
207 원룸 을 월세로 알아보는대.. 8 핫슈 20.05.11.19:20 510
206 유튜브 다운로더에 대해 여쭤봅니다. 31 Nginx 20.05.12.22:05 747
205 국내 뉴스 API 중에 검색기간 설정이 가능한 것이 있을까요?? 6 이니스프리 20.05.14.00:19 624
204 안드로이드 에뮬레이터 질문 드립니다. 1 Nginx 20.05.14.18:24 439
203 TP-LINK 무선 안테나를 잃어버렸는데 대체제가 있을까요?? 10 이니스프리 20.05.15.23:02 448
202 클라우드 플레어 연결 관련 도와주세요 6 image Ruwaku 20.05.18.09:26 594
201 (해결) 4 260578 20.05.18.20:51 315
200 듀얼 vs 와이드 모니터 질문 드려요~! 17 이니스프리 20.05.21.23:15 1034
199 노트9 케이스 추천을 다시 부탁드립니다 ㅠㅠ 11 이니스프리 20.05.22.21:24 302
198 공유기 구매하려고 하는데 사양이 고민됩니다. 10 image Apache 20.05.24.21:55 427
197 셀레니움으로 토르브라우저 조종하고 싶습니다 8 title: 대한민국 국기gimmepoint 20.05.25.22:58 1269
196 AWS Lightsail 관련해서 질문이 있습니다... 24 MYIG 20.05.26.00:18 678
195 [자바스크립트] 브라우저의 활성화 여부를 서버 측에서 확인할 수 있는가요?? 9 이니스프리 20.05.26.17:16 720
PHP) Sandbox에서 실행한 결과와 실제 서버에서 구동되는게 다릅니다. 6 260578 20.05.28.09:11 715
193 파이썬으로 엑셀 데이터와 이미지를 읽어 아래한글로 만드는 매크로 프로그램을 만들고 싶어요. 5 말카 20.05.28.09:56 2456
192 글쓰기 포인트 차감을 우회하여 도배하는 스팸에 대해 질문드려요~! 22 이니스프리 20.05.31.00:25 666
191 CSS 이미지 창크기에 맞추는 방법 질문! 2 마당쇠15 20.05.31.10:47 671