{"id":28321,"date":"2020-03-06T15:01:27","date_gmt":"2020-03-06T20:01:27","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=28321"},"modified":"2022-07-14T15:05:18","modified_gmt":"2022-07-14T19:05:18","slug":"the-decimation-of-safari-extensions","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2020\/03\/06\/the-decimation-of-safari-extensions\/","title":{"rendered":"The Decimation of Safari Extensions"},"content":{"rendered":"<p><a href=\"https:\/\/lapcatsoftware.com\/articles\/decimation.html\">Jeff Johnson<\/a>:<\/p>\n<blockquote cite=\"https:\/\/lapcatsoftware.com\/articles\/decimation.html\">\n<p>As a result of the change in format from <code>safariextz<\/code> to <code>app<\/code>, Safari extensions have been decimated. There are significantly fewer Safari extensions available. The developer program membership cost factor is obvious, so I won&rsquo;t spend any more time discussing that. I believe that the biggest barrier now to creating Safari extensions is not money but developer expertise. To create an extension for Firefox, Chrome, or any browser based on Chromium &mdash; Microsoft Edge, Brave, Opera, Vivaldi &mdash; you just need to know JavaScript, CSS, and HTML. In other words, almost any web developer in the world can create an extension for almost any web browser in the world. All these worlds are yours&#8230; except Safari! Attempt no landing there. Safari is unique, unprecedented in its extension requirements. Safari extension developers still have to know web development, but they also have to know native Mac development.<\/p>\n<p>[&#8230;]<\/p>\n<p>If you&rsquo;re wondering why your favorite old Safari extension hasn&rsquo;t been ported to a new Safari app extension, the reason isn&rsquo;t necessarily just lack of native Mac development expertise by the developer. Even though an <code>app<\/code> extension still uses JavaScript and CSS like a <code>safariextz<\/code>, the new API is not the same as the old API. Developers can&rsquo;t simply take the old JavaScript and stick it inside a Mac app bundle, that&rsquo;s not how it works. The new SafariServices API is simply not as powerful as the old Safari JavaScript API. There are things an extension could do in the past that it can no longer do.<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/krebsonsecurity.com\/2020\/03\/the-case-for-limiting-your-browser-extensions\/\">Brian Krebs<\/a> (<a href=\"https:\/\/news.ycombinator.com\/item?id=22487651\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/krebsonsecurity.com\/2020\/03\/the-case-for-limiting-your-browser-extensions\/\">\n<p>The incident is a reminder that browser extensions &mdash; however useful or fun they may seem when you install them &mdash; typically have a great deal of power and can effectively read and\/or write all data in your browsing sessions. And as we&rsquo;ll see, it&rsquo;s not uncommon for extension makers to sell or lease their user base to shady advertising firms, or in some cases abandon them to outright cybercriminals.<\/p>\n<\/blockquote>\n\n<p>As far as I know, the new Safari extensions model doesn&rsquo;t fix this problem. I don&rsquo;t want to run any extensions that have access to both the full webpage contents and the ability to send my information to a server. The extension runs in its own process, and thus I get a Little Snitch alert if it tries to make a network connection. But the extension could also modify the page content to make network connections on its behalf, and then this would not be caught by Little Snitch. So it still seems like the only way to be sure an extension is safe is to read its JavaScript source.<\/p>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2020\/01\/14\/the-security-of-safari-extensions\/\">The Security of Safari Extensions<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2019\/09\/26\/safari-13-and-extensions\/\">Safari 13 and Extensions<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Jeff Johnson: As a result of the change in format from safariextz to app, Safari extensions have been decimated. There are significantly fewer Safari extensions available. The developer program membership cost factor is obvious, so I won&rsquo;t spend any more time discussing that. I believe that the biggest barrier now to creating Safari extensions is [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2020-03-06T20:01:30Z","apple_news_api_id":"76d0340c-a3e7-41a4-82e7-1034553f6802","apple_news_api_modified_at":"2022-07-14T19:05:22Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAAAA==","apple_news_api_share_url":"https:\/\/apple.news\/AdtA0DKPnQaSC5xA0VT9oAg","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[2],"tags":[905,139,30,1666,355,103,2246],"class_list":["post-28321","post","type-post","status-publish","format-standard","hentry","category-technology","tag-extensions","tag-littlesnitch","tag-mac","tag-macos-10-15","tag-privacy","tag-safari","tag-safari-extensions"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/28321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=28321"}],"version-history":[{"count":1,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/28321\/revisions"}],"predecessor-version":[{"id":28322,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/28321\/revisions\/28322"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=28321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=28321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=28321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}