Closed wookho closed 4 years ago
크롬 72부터 팝업을 차단하는 기준이 강화되었는데, Blankshield.js에서 rel=noopener
를 인식하지 못하는 구형 브라우저와의 호환성 유지를 위해 사용하는 방식이 이것과 충돌한다고 합니다.
Blankshield.js 개발자가 패치해 줄지는 모르겠지만, 일단 크롬 72 이상 버전에서는 외부 링크 클릭시 blankshield.open()
을 사용하지 않도록 변경해야 하겠습니다. 최신 크롬은 rel=noopener
를 인식하기 때문에, 이 속성만 제대로 추가해 준다면 보안상 문제는 없을 것으로 보입니다.
https://github.com/rhymix/rhymix/commit/bf5f53024e4bc564f72d6bbc20aedfd06c4d0056
@kijin 제가 확인한 바로는 모바일 돌핀 브라우저도 그렇습니다 ㅡㅡ;
@wookho 돌핀 브라우저를 비롯하여 웹킷 기반의 모바일 브라우저들은 대부분 User-Agent에 Chrome이라는 단어와 해당 버전이 포함되어 있습니다. http://whatsmyuseragent.org/ 에서 Chrome/72.0
등의 메시지가 보인다면 순정 크롬과 마찬가지로 위의 패치의 혜택을 받습니다.
@bnu 이문제는 좀 빠른 대책이 나왔으면 좋겠습니다. 그동안 축적해 온 수 많은 컨텐츠 자산 속의 링크가 모두 팝업 차단으로 보려는 분들의 의지를 약화 시키고 있습니다.
https://github.com/xpressengine/xe-core/commit/7c03651ff8952fb8d28ec6df21d839197ad118f2#diff-eebf2a0ab2b3da428f4c211e35032d33 이러한 방법으로 수정했고, blankshield와 결과적으로는 동일한 방법으로 취약점 해결을 유지하고 팝업 차단 문제를 회피했습니다.
수정한 파일은 별도의 빌드 과정을 거쳐야 사이트에 정상 반영될 수 있습니다. 참고 : 6f0f992f7
추가 보완했습니다. 971d0be97 minify c3355a7a5
blankshield를 빼도되겠군요.
blankshield에서 굳이 iframe을 동원해 가며 복잡한 트릭을 사용하는 이유가 있을 것입니다. 구버전 브라우저가 취약점에 노출되지 않도록 polyfill을 유지하는 것도 무척 중요하다고 생각합니다.
이 문제와 별도로, area, base, form 태그 사용시에도 target=_blank인 경우 opener를 남용할 수 있다고 하더군요. 현재 관리자 외에는 이미지맵이나 폼 태그를 사용할 수 없기 때문에 시급한 문제는 아닙니다만, 장기적으로는 보완이 필요하겠습니다.
@kijin 이력을 추적해보니 safari에서 window.opener를 제거해도 window.opener.location이 동작하네요. 다시 붙여놔야겠네요.
크롬에서만 동작 제외하도록 변경했습니다.
크롬과 일부 브라우저에서 발생하고 있습니다.
사용자가 보려고 클릭한 링크는 팝업 차단되지 않아야 하나 크롬의 경우 해당 사이트를 팝업 허용으로 해 놓지 않으면 차단되어 버립니다.
사용자가 클릭한 것은 허용이 되고 사용자가 클릭하지 않은 팝업만 차단이 되어야 합니다. 크롬 외 다른 브라우저는 모두 차단되지 않고 있습니다.
제가 운영하는 XE가 아닌 html 로 만든 사이트의 경우 외부로 나가는 링크 클릭 시 크롬에서 전혀 차단되지 않고 있습니다.
XE에서 컨트롤되는 링크만 해당 증상이 발견됩니다. 최근 이 문제로 사이트 내부에서 진행되는 광고에 큰 수익 손실이 발생되고 있습니다.
https://xetown.com/topics/1218391