최근 맞춤법 검사기 관련 이슈로 인해 이 문제가 명확히 해결되기 전까지는 플러그인을 올리는 것은 합당치 않을 거 같아 잠정적으로 내립니다. 사실 플러그인은 그 사이트에서 긁어오는 것에 불과하기에 문제가 있을 거같지는 않지만 아무래도 이슈는 피해야 할 거 같습니다.
댓글 22개
로그인을 띄엄띄엄해서 이제 글을 보았습니다.
먼저 이미지를 업로드 한 후 편집 수정을 하면 이미지를 직접 저장할 수 없으므로 base64처리가 됩니다. 그렇게 된 이미지는 <img title="2a6427477daddb573446b40f228692ae_1463962061_0569.jpg" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...."> 이런 식으로 저장됩니다. title이 원래의 이미지 파일 이름을 말하고 src의 내용이 수정된 이미지를 base64화 한 거죠. 수정된 이미지는 에디터에서 문제없이 그누보드를 통해 제대로 저장이 됩니다. 문제는 제대로 저장된 글이 그누보드 글 보기에서 제대로 보이지 않게 된다는거죠.
이 문제를 해결하려면 두 가지 부분을 해결해야 합니다. 먼저는 본문에 작성한 글은 글 보기 페이지로 갈 때 common.lib.php 안에 있는 conv_content()에 의해 수정됩니다. 이 함수를 살펴보면 내부적으로 html_purifier() 함수를 통해 HTMLPurifier를 사용하는데 이 클래스가 base64화된 이미지를 지원하지 않습니다. 따라서 HTMLPurifier를 수정해야 합니다. 그런데 이건 바람직하지 않을겁니다. 가장 좋은 방법은 <img title="..." src="data:image/base64;...">이런 식으로 된 이미지를 다른 것으로 치환 한 후 HTMLPurifier를 거친 후 다시 원래의 것으로 치환하는 방법을 사용하는 것이 더 효율적일 겁니다. 하지만 다음의 문제도 고려해보아야 합니다. 그 이미지가 안전한 이미지인지는 확인할 길이 없다는 겁니다. 내가 올린 것이 아니라 다른 사람이 악의적으로 이미지를 올릴 수도 있기 때문이죠. 하지만 레벨 설정으로 글 올릴 수 있는 사람을 설정한다면 어느 정도 방어는 할 수 있을 수 있습니다. 레벨에 따라 이미지 업로드 기능 혹은 이미지 수정 기능을 넣거나 빼면 될테니까요. 또 title에 기록된 이미지가 실제 있는 이미지인지도 확인이 필요합니다.
두 번째 문제는 수정된 이미지는 base64화 된다고 했죠? 이렇게 base64 처리가 되면 매우 긴 스트링이 됩니다. 이 길이는 매우 길어서 문제가 될 수 있어요.
일반적으로 그누보드에서 wr_content의 mysql 설정은 text로 되는데 이 길이가 65535입니다. 이걸로는 base64화된 이미지가 들어가지 못할 수도 있게 됩니다. 따라서 text로 된 것을 최소 mediumtext로 바꾸어 주셔야 합니다. mediumtext의 경우 16777215까지 글 길이가 저장됩니다. 이 정도면 어느 정도 충분할 겁니다. 혹 이미지 수정을 많이 하고 많은 이미지를 입력해야 한다면 longtext도 고려해보아야 합니다. 그런데 대부분은 mediumtext이면 충분합니다. 그리고 base64화된 이미지가 많을 수록 화면에 로딩되는 속도는 느려지므로 한 글에 base64화된 이미지는 많이 넣는 것은 좋지 않습니다.
도움이 되셨나요?
먼저 이미지를 업로드 한 후 편집 수정을 하면 이미지를 직접 저장할 수 없으므로 base64처리가 됩니다. 그렇게 된 이미지는 <img title="2a6427477daddb573446b40f228692ae_1463962061_0569.jpg" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...."> 이런 식으로 저장됩니다. title이 원래의 이미지 파일 이름을 말하고 src의 내용이 수정된 이미지를 base64화 한 거죠. 수정된 이미지는 에디터에서 문제없이 그누보드를 통해 제대로 저장이 됩니다. 문제는 제대로 저장된 글이 그누보드 글 보기에서 제대로 보이지 않게 된다는거죠.
이 문제를 해결하려면 두 가지 부분을 해결해야 합니다. 먼저는 본문에 작성한 글은 글 보기 페이지로 갈 때 common.lib.php 안에 있는 conv_content()에 의해 수정됩니다. 이 함수를 살펴보면 내부적으로 html_purifier() 함수를 통해 HTMLPurifier를 사용하는데 이 클래스가 base64화된 이미지를 지원하지 않습니다. 따라서 HTMLPurifier를 수정해야 합니다. 그런데 이건 바람직하지 않을겁니다. 가장 좋은 방법은 <img title="..." src="data:image/base64;...">이런 식으로 된 이미지를 다른 것으로 치환 한 후 HTMLPurifier를 거친 후 다시 원래의 것으로 치환하는 방법을 사용하는 것이 더 효율적일 겁니다. 하지만 다음의 문제도 고려해보아야 합니다. 그 이미지가 안전한 이미지인지는 확인할 길이 없다는 겁니다. 내가 올린 것이 아니라 다른 사람이 악의적으로 이미지를 올릴 수도 있기 때문이죠. 하지만 레벨 설정으로 글 올릴 수 있는 사람을 설정한다면 어느 정도 방어는 할 수 있을 수 있습니다. 레벨에 따라 이미지 업로드 기능 혹은 이미지 수정 기능을 넣거나 빼면 될테니까요. 또 title에 기록된 이미지가 실제 있는 이미지인지도 확인이 필요합니다.
두 번째 문제는 수정된 이미지는 base64화 된다고 했죠? 이렇게 base64 처리가 되면 매우 긴 스트링이 됩니다. 이 길이는 매우 길어서 문제가 될 수 있어요.
일반적으로 그누보드에서 wr_content의 mysql 설정은 text로 되는데 이 길이가 65535입니다. 이걸로는 base64화된 이미지가 들어가지 못할 수도 있게 됩니다. 따라서 text로 된 것을 최소 mediumtext로 바꾸어 주셔야 합니다. mediumtext의 경우 16777215까지 글 길이가 저장됩니다. 이 정도면 어느 정도 충분할 겁니다. 혹 이미지 수정을 많이 하고 많은 이미지를 입력해야 한다면 longtext도 고려해보아야 합니다. 그런데 대부분은 mediumtext이면 충분합니다. 그리고 base64화된 이미지가 많을 수록 화면에 로딩되는 속도는 느려지므로 한 글에 base64화된 이미지는 많이 넣는 것은 좋지 않습니다.
도움이 되셨나요?
게시글 목록
| 번호 | 제목 |
|---|---|
| 1090 | |
| 1071 | |
| 1070 | |
| 1056 | |
| 1048 | |
| 1037 | |
| 1036 | |
| 1030 | |
| 1013 | |
| 1012 | |
| 985 | |
| 984 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기