xpressengine / xe-core

XpressEngine 1.x
https://xe1.xpressengine.com
Other
89 stars 62 forks source link

XE에서 컨트롤되는 링크 클릭시 크롬에서 차단됩니다. #2397

Closed wookho closed 4 years ago

wookho commented 5 years ago

크롬과 일부 브라우저에서 발생하고 있습니다.

사용자가 보려고 클릭한 링크는 팝업 차단되지 않아야 하나 크롬의 경우 해당 사이트를 팝업 허용으로 해 놓지 않으면 차단되어 버립니다.

사용자가 클릭한 것은 허용이 되고 사용자가 클릭하지 않은 팝업만 차단이 되어야 합니다. 크롬 외 다른 브라우저는 모두 차단되지 않고 있습니다.

제가 운영하는 XE가 아닌 html 로 만든 사이트의 경우 외부로 나가는 링크 클릭 시 크롬에서 전혀 차단되지 않고 있습니다.

XE에서 컨트롤되는 링크만 해당 증상이 발견됩니다. 최근 이 문제로 사이트 내부에서 진행되는 광고에 큰 수익 손실이 발생되고 있습니다.

https://xetown.com/topics/1218391

kijin commented 5 years ago

크롬 72부터 팝업을 차단하는 기준이 강화되었는데, Blankshield.js에서 rel=noopener를 인식하지 못하는 구형 브라우저와의 호환성 유지를 위해 사용하는 방식이 이것과 충돌한다고 합니다.

Blankshield.js 개발자가 패치해 줄지는 모르겠지만, 일단 크롬 72 이상 버전에서는 외부 링크 클릭시 blankshield.open()을 사용하지 않도록 변경해야 하겠습니다. 최신 크롬은 rel=noopener를 인식하기 때문에, 이 속성만 제대로 추가해 준다면 보안상 문제는 없을 것으로 보입니다.

https://github.com/rhymix/rhymix/commit/bf5f53024e4bc564f72d6bbc20aedfd06c4d0056

wookho commented 5 years ago

@kijin 제가 확인한 바로는 모바일 돌핀 브라우저도 그렇습니다 ㅡㅡ;

kijin commented 5 years ago

@wookho 돌핀 브라우저를 비롯하여 웹킷 기반의 모바일 브라우저들은 대부분 User-Agent에 Chrome이라는 단어와 해당 버전이 포함되어 있습니다. http://whatsmyuseragent.org/ 에서 Chrome/72.0 등의 메시지가 보인다면 순정 크롬과 마찬가지로 위의 패치의 혜택을 받습니다.

wookho commented 5 years ago

@bnu 이문제는 좀 빠른 대책이 나왔으면 좋겠습니다. 그동안 축적해 온 수 많은 컨텐츠 자산 속의 링크가 모두 팝업 차단으로 보려는 분들의 의지를 약화 시키고 있습니다.

ghost commented 5 years ago

https://github.com/xpressengine/xe-core/commit/7c03651ff8952fb8d28ec6df21d839197ad118f2#diff-eebf2a0ab2b3da428f4c211e35032d33 이러한 방법으로 수정했고, blankshield와 결과적으로는 동일한 방법으로 취약점 해결을 유지하고 팝업 차단 문제를 회피했습니다.

수정한 파일은 별도의 빌드 과정을 거쳐야 사이트에 정상 반영될 수 있습니다. 참고 : 6f0f992f7

ghost commented 5 years ago

추가 보완했습니다. 971d0be97 minify c3355a7a5

ghost commented 5 years ago

blankshield를 빼도되겠군요.

kijin commented 5 years ago

blankshield에서 굳이 iframe을 동원해 가며 복잡한 트릭을 사용하는 이유가 있을 것입니다. 구버전 브라우저가 취약점에 노출되지 않도록 polyfill을 유지하는 것도 무척 중요하다고 생각합니다.

이 문제와 별도로, area, base, form 태그 사용시에도 target=_blank인 경우 opener를 남용할 수 있다고 하더군요. 현재 관리자 외에는 이미지맵이나 폼 태그를 사용할 수 없기 때문에 시급한 문제는 아닙니다만, 장기적으로는 보완이 필요하겠습니다.

ghost commented 5 years ago

@kijin 이력을 추적해보니 safari에서 window.opener를 제거해도 window.opener.location이 동작하네요. 다시 붙여놔야겠네요.

ghost commented 4 years ago

크롬에서만 동작 제외하도록 변경했습니다.