Thursday, April 4, 2013

The Evolution of Chrome Extensions Detection

Today's blog post is by guest blogger Giovanni Cattani.

The Old Technique


Detecting which Chrome extensions are installed has always been a trivial matter of finding a specific extension ID and trying to load the manifest.json file, which is always located in the same spot:

chrome-extension://abcdefghijklmnopqrstuvwxyz012345/manifest.json

However, in the latest Chrome versions, attempting to load the manifest usually fails and the JavaScript console returns the following error:

Denying load of chrome-extension://abcdefghijklmnopqrstuvwxyz012345/manifest.json. Resources must be listed in the web_accessible_resources manifest key in order to be loaded by pages outside the extension.

Load Error





What happened to the good old detection code that used to work seamlessly? And what is the web_accessible_resources manifest key?

Manifest Version 2

In Chrome 18, manifest version 1 was deprecated. Google is slowly decreasing its support, finally making it unavailable to developers in September 2013. In the new version, Google introduced several changes to the manifest file and one of them is breaking most of the existing detection code.

The web_accessible_resources array was introduced to allow developers to choose exactly which resources can be reached by external sources. If a local resource isn't included in the array, then a remote web page won't be able to load it. The array looks like the following example:

"web_accessible_resources": [ "logo.png", "menu.html", "style.css" ]

In order to determine the manifest version, the manifest.json file must be checked properly. The "manifest_version" parameter is self-explanatory and determines if the JSON has been updated to the latest version. If the manifest is already in the latest version ("manifest_version": 2), then the file includes the web_accessible_resources array.

Detecting Extensions

First of all, check the web_accessible_resources array and determine the resources that can be loaded. If the array is not empty, choose a resource of your choice, knowing that its location is chrome-extension://[EXTENSION ID]/[RESOURCE PATH].

Exactly like the old implementation, the simpler way to reliably detect whether an extension is installed or not with JavaScript is by creating a script element in the page and setting its source as one of the local extensions' resources. The following piece of code allows users to determine if a specific extension is installed by executing an arbitrary action when the local resource is loaded.

var testScript = document.createElement("script");           
testScript.setAttribute("onload", "alert('Extension Installed!')");
testScript.setAttribute("src", "chrome-extension://[EXTENSION ID]/[RESOURCE PATH]");
document.body.appendChild(testScript);


The previous code should work for every type of file, whether it's a text file (eg. json, html, script) or a picture.

Conclusion

The new implementation of the Chrome extension manifest provides developers with an easy way to whitelist resources loaded from external sources. Any code developed in order to detect installed add-ons won't be affected, as long as extensions keep allowing at least one local resource in the web_accessible_resources array.

-----

Giovanni Cattani works as a security specialist and likes to mess around with applications of all kinds. He occasionally contributes to BeEF and writes about stuff he likes at gcattani.co.vu

16 comments:

  1. Chrome performance with or without extensions has been really good and working with my documents as well as reading on the chromebook has been easy. Personally, I use a chrome extension for GroupDocs Viewer to view my files and read old PDF e-books. It has proved to be a handy extension for me and I get nice rendered files to view. You can also read an article for developing such extensions and I guess it will be a valued resource for developers as well as users.

    ReplyDelete
    Replies
    1. dongtam
      game mu
      http://nhatroso.net/
      http://nhatroso.com/
      nhạc sàn
      tư vấn luật
      dịch vụ thành lập công ty trọn gói
      công ty luật
      tổng đài tư vấn pháp luật
      thành lập công ty
      http://we-cooking.com/
      chém gió
      trung tâm ngoại ngữbốn cái quyển trục, ta trước tiên đem phòng ngự của bọn hắn xé nát, mọi người theo như nhu cầu như thế nào?

      Nghe vậy tất cả mọi người là khẽ gật đầu, biểu thị đồng ý Tiêu Viêm cách nhìn.

      Chợt, pound mỏng đấu khí theo Tiêu Viêm trong cơ thể phát ra mà ra. Nháy mắt sau đó, một cỗ quang mang màu vàng bao trùm tại bọn hắn trên nắm tay, đây chính là Tiêu Viêm thường xuyên dùng một chiêu thức, cũng là Tiêu Viêm lĩnh ngộ chiêu thức —— Viêm Đế quyền!

      Quyền khởi quyền rơi, chính giữa mang theo lôi đình vạn quân chi lực, hơn nữa tốc độ có thể nói là tương đương mau lẹ, cùng không khí sinh ra ông minh âm bạo thanh âm, nhưng là cái kia bốn cái quang đoàn, lại không có trong tưởng tượng vỡ tan thanh âm, chỉ là cái kia dấu quyền đi qua,

      Delete
  2. "testScript.setAttribute("src", "chrome-extension://[EXTENSION ID]/[RESOURCE PATH]");"

    Here what to specify in [RESOURCE PATH]

    ReplyDelete
    Replies
    1. path to any file that is available in web_accessible_resources list.
      if "web_accessible_resources": [ "logo.png", "menu.html", "style.css" ]
      e.g., chrome-extension://[EXTENSION ID]/logo.png

      Delete
  3. can we have a function returning true or false based on whether extension is installed or not. it would help if you provide code snippet for this.

    ReplyDelete
  4. Here's what I came up with for a solution. Note the Chrome App I was after didn't have web_accessible_resources exposed.

    if (typeof chrome !== "undefined") {
    var ce = "chrome-extension://pnhechapfaindjhompbnflcldabbghjo/html/nassh.html";
    $.get(ce, function( data ) {
    alert('Found');
    })
    .fail(function() {
    alert('Not found');
    });
    }

    ReplyDelete
    Replies
    1. This will always return not found unless the var ce IS a web_accessible_resources I tried it with all resources.

      Delete

  5. Thanks for posting this useful content, Good to know about new things here, Let me share this, . Hadoop training in pune

    ReplyDelete
  6. This tool lets Web developers evaluate the performance of a site and determine if an image needs to be cropped or an audio file needs to be compressed to make the page load faster.
    extract emails

    ReplyDelete
  7. Thanks for post. That would be great if you also visited this page.

    ReplyDelete

  8. شركة المستقبل لخدمات شراء الاثاث المستعمل بالمملكة العربية السعودية
    هل تزدحم شقتك بالعديد من قطع الأثاث القديمة والتي أصبحت لا حاجة لك بها؟ هل ترغب في التخلص من جميع المنقولات القديمة لكنك لا تريد خسارة المبالغ التي تم دفعها وقت الشراء؟ إذا كنت ستجيب على السؤالين السابقين بنعم فسنقدم لك في هذا المقال الحل الفوري والسريع لكل المشكلات التي تواجهك بسبب أثاثك القديم والذي يكمن في التعامل مع شركة شراء اثاث مستعمل والتي تعد من أقوى الشركات التي تعمل في ذلك المجال على الإطلاق فبمجرد عمل مكالمة هاتفية واحدة لها ستجد فريق عمل متكامل لديك في المنزل لعمل كل الخطوات اللازمة التي ستخلصك من تلك المعاناة إلى الأبد وبدون تكبد أي خسائر مادية.
    شراء الاثاث المستعمل بالدمام
    شراء الاثاث المستعمل بالخبر
    شراء الاثاث المستعمل بالجبيل
    إذا كنت تود شراء أثاث جديد وترغب في التخلص من ذلك القديم الذي لديك في المنزل فلا تدع الفرصة تفوتك فكلما كانت قطع الأثاث القديمة التي تقتنيها في المنزل في حالة جيدة كان السعر الذي ستحصل عليه أفضل بكثير مقابل البيع وهذا ما سيمنحك الفرصة لشراء جميع أنواع الأثاث الجديد لذلك ننصحك بضرورة التواصل مع شركة شراء اثاث مستعمل خاصة إذا كنت ترغب في الحصول على السعر الذي يرضيك ويناسب الأثاث الذي ترغب في التخلص منه وبيعه حيث أن شركتنا المتميزة لديها الكثير من الامكانيات مثل:
    • أقوى فريق عمل متخصص في حمل العفش ونقله حيث تم تدريبهم على أعلى مستوى للحفاظ على سلامة كل قطعة أثاث.
    • ستحصل على أسعار مناسبة جدا ولن تخسر معنا أبداً وهذا من أكثر ما يميز شركتنا عن أي شركة أخرى.
    • سيارات مجهزة على أعلى مستوى لنقل العفش بدون إحداث أي أضرار أو تلفيات به.
    • سيتم تغليف جميع الأثاث الذي يرغب العميل في بيعه بأغطية شفافة قبل حمله ونقله إلى الشاحنات للحفاظ على سلامته.
    • مع شركتنا المتميزة لن تكون بحاجة إلى الانتظار لفترة طويلة حتى يتم الرد على اتصالك الهاتفي وذلك لأن الشركة لديها أفضل طاقم لخدمة جميع عملائنا الكرام في أي وقت.
    • أسعارنا لا مثيل لها حيث أننا لدينا خبراء على قدر كبير من المعرفة بكيفية تقدير كل قطعة أثاث تقتنيها.

    ReplyDelete
  9. ارقام الاثاث المستعمل بالدمام
    محلات الاثاث المستعمل بالخبر
    حقين الاثاث المستعمل بالجبيل
    لا شك أن بيع أي قطعة أثاث مستعملة تسبب الكثير من الخسائر المادية لأي شخص حتى لو كانت في حالة جيدة ويمكن استخدامها مرة أخرى من قبل أشخاص أخرين لكن مع شركة شراء اثاث مستعمل فسيختلف الأمر كثيرا حيث دائما تكون على قدر كبير من الوعي بأنرعاية مصالح العميل لا بد أن تكون من أولويات الشركة.
    لذلك فدائما ما نسعى دائما إلى تقدير أي جهاز كهربائي أو أي قطع خشبية وغيرها بالشكل المطلوب حتى لا يتم الإضرار بمصالح العميل المادية لذلك لا تتردد بالتواصل مع شركة اثاث مستعمل وستجد ما يسرك.
    قد يرغب البعض في التعامل مع جهة معينة وذلك لأنه يثق بها لما لها من سمعة طيبة لكن بعد المسافات قد يجعلهم يضطرون إلى التعامل مع أقرب جهة من مسكنهم حتى وإن كانت على قدر كبير من الرداءة وعدم المسئولية.
    وقد انتبهت شركة شراء اثاث مستعمل لذلك الأمر وقامت بعمل فروع في كافة أنحاء المملكة العربية السعودية لتقديم كل الخدمات المتميزة لعملائنا الكرام هذا بالإضافة إلى أن كل فرع يحتوي على مكان لتصليح العفش بكل أنواعه وأشكاله حتى وإن كان في حالة سيئة للغاية فمعنا لا تحمل أي هم.
    إذا كنت لا تمتلك مبالغ كبيرة لشراء أثاث جديد تحتاجه في المنزل فيمكنك الأن من خلال شركتنا المتميزة شراء أي قطعة أثاث تخطر ببالك وهذا لأننا نحرص على توفير كل المستلزمات المنزلية من الألف إلى الياء فلا عليك سوى زيارة أقرب فرع إليك واختيار ما يحلو لك من أثاث وكل هذا بأسعار مناسبة جدا.

    شراء الاثاث المستعمل بالمدينة المنورة
    محلات الاثاث المستعمل بالمدينة المنورة
    ارقام الاثاث المستعمل بالمدينة المنورة
    • إزالة الأتربة من عليه أولاً بأول.
    • الاهتمام بشفط الأتربة المتراكمة على الستائر والسجاد والموكيت.
    • إذا كنت لا تستخدمين أي قطعة أثاث عليك بتنظيفها ومن ثم تغطيتها جيدا لحمايتها من الأتربة والشوائب.

    ReplyDelete
  10. hello i want to check is my extesion is installed with in chrome browser but it is not working can any one help me?

    ReplyDelete
  11. Acquiring money from the bank can be troublesome for most entrepreneurs, yet especially retail organizations, eateries, store franchisees or regular organizations.
    Cash Advances corona

    ReplyDelete
  12. We Provide Our Customers With Latest and up-to-date Dumps Questions & Answers with 100% Exam Passing Guarantee. We Promise Exceptional Success in First Attempt. Real 9A0-411 exam braindumps

    ReplyDelete