javascript - كيف يقوم Facebook بتعطيل أدوات المطور المتكاملة للمتصفح؟




5 Answers

أنا مهندس أمان في Facebook وهذا هو خطأي. نحن نختبر هذا لبعض المستخدمين لمعرفة ما إذا كان بإمكانه إبطاء بعض الهجمات حيث يتم خداع المستخدمين إلى لصق شفرة جافا سكريبت (الخبيثة) في وحدة تحكم المتصفح.

فقط لنكون واضحين: محاولة منع المتسللين من جانب العميل فكرة سيئة بشكل عام ؛ هذا هو لحماية ضد هجوم الهندسة الاجتماعية محددة .

إذا انتهى بك الأمر في مجموعة الاختبار وتم إزعاجك من هذا ، آسف. حاولت جعل صفحة إلغاء الاشتراك القديمة (صفحة المساعدة الآن) بسيطة بقدر الإمكان بينما لا تزال مخيفًا بما فيه الكفاية لإيقاف بعض الضحايا على الأقل.

تشبه الشفرة الفعلية ارتباط @ joeldixon66 ؛ لنا أكثر تعقيدا قليلا من دون سبب وجيه.

يلف Chrome كل رمز وحدة التحكم في

with ((console && console._commandLineAPI) || {}) {
  <code goes here>
}

... لذلك يعيد الموقع تعريف وحدة console._commandLineAPI برمي:

Object.defineProperty(console, '_commandLineAPI',
   { get : function() { throw 'Nooo!' } })

هذا ليس كافيًا (جربه!) ، لكن هذه هي الخدعة الرئيسية.

الخاتم: قرر فريق Chrome أن هزيمة وحدة التحكم من JS من جانب المستخدم كانت خطأ وإصلاح المشكلة ، مما يجعل هذه التقنية غير صالحة. بعد ذلك ، تمت إضافة حماية إضافية لحماية المستخدمين من xss الذاتي .

لذا على ما يبدو بسبب عمليات الاحتيال الأخيرة ، يتم استغلال أدوات المطور من قبل الأشخاص لنشر رسائل غير مرغوب فيها ، بل واستخدامها أيضًا في "الاختراق". لقد حظر Facebook أدوات المطور ، ولا يمكنني حتى استخدام وحدة التحكم.

كيف فعلوا ذلك؟؟ ادعت إحدى المشاركات في أنه غير ممكن ، لكن Facebook أثبت أنه خطأ.

ما عليك سوى الانتقال إلى Facebook وفتح أدوات المطورين ، وكتابة حرف واحد في وحدة التحكم ، وينبثق هذا التحذير. بغض النظر عن ما وضعت فيه ، لن يتم تنفيذه.

كيف يكون هذا ممكنا؟

حتى أنها حظرت الإكمال التلقائي في وحدة التحكم:




لم أستطع الحصول عليه لإثارة ذلك في أي صفحة. هناك نسخة أكثر قوة من ذلك ستفعل ذلك:

window.console.log = function(){
    console.error('The developer console is temp...');
    window.console.log = function() {
        return false;
    }
}

console.log('test');

لتهيئة الإخراج: ألوان في وحدة تحكم جافا سكريبت

تحرير Thinking @joeldixon66 لديه الفكرة الصحيحة: تعطيل تنفيذ جافا سكريبت من وحدة التحكم «::: KSpace :::




ينفّذ Netflix هذه الميزة أيضًا

(function() {
    try {
        var $_console$$ = console;
        Object.defineProperty(window, "console", {
            get: function() {
                if ($_console$$._commandLineAPI)
                    throw "Sorry, for security reasons, the script console is deactivated on netflix.com";
                return $_console$$
            },
            set: function($val$$) {
                $_console$$ = $val$$
            }
        })
    } catch ($ignore$$) {
    }
})();

هم فقط يتجاوز console._commandLineAPI لرمي الخطأ الأمني.




تم تغيير Chrome كثيرًا منذ أن كان بإمكان Facebook تعطيل وحدة التحكم ...

حسب مارس 2017 هذا لم يعد يعمل.

أفضل ما يمكنك القيام به هو تعطيل بعض وظائف وحدة التحكم ، على سبيل المثال:

if(!window.console) window.console = {};
var methods = ["log", "debug", "warn", "info", "dir", "dirxml", "trace", "profile"];
for(var i=0;i<methods.length;i++){
    console[methods[i]] = function(){};
}



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

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

إذا كان لديك js file one فحصًا js file one لـ <element> التغييرات على العناصر المهمة js file two js file three يتأكدان من وجود هذا الملف في كل فترة فسيكون لديك استعادة كاملة للنزاهة على الصفحة خلال الفترة.

لنأخذ مثالاً على الملفات الأربعة ونعرض لك ما أقصده.

index.html و

   <!DOCTYPE html>
   <html>
   <head id="mainhead">
   <script src="ks.js" id="ksjs"></script>
   <script src="mainfile.js" id="mainjs"></script>
   <link rel="stylesheet" href="style.css" id="style">
   <meta id="meta1" name="description" content="Proper mitigation against script kiddies via Javascript" >
   </head>
   <body>
   <h1 id="heading" name="dontdel" value="2">Delete this from console and it will refresh. If you change the name attribute in this it will also refresh. This is mitigating an attack on attribute change via console to exploit vulnerabilities. You can even try and change the value attribute from 2 to anything you like. If This script says it is 2 it should be 2 or it will refresh. </h1>
   <h3>Deleting this wont refresh the page due to it having no integrity check on it</h3>

   <p>You can also add this type of error checking on meta tags and add one script out of the head tag to check for changes in the head tag. You can add many js files to ensure an attacker cannot delete all in the second it takes to refresh. Be creative and make this your own as your website needs it. 
   </p>

   <p>This is not the end of it since we can still enter any tag to load anything from everywhere (Dependent on headers etc) but we want to prevent the important ones like an override in meta tags that load headers. The console is designed to edit html but that could add potential html that is dangerous. You should not be able to enter any meta tags into this document unless it is as specified by the ks.js file as permissable. <br>This is not only possible with meta tags but you can do this for important tags like input and script. This is not a replacement for headers!!! Add your headers aswell and protect them with this method.</p>
   </body>
   <script src="ps.js" id="psjs"></script>
   </html>

mainfile.js

   setInterval(function() {
   // check for existence of other scripts. This part will go in all other files to check for this file aswell. 
   var ksExists = document.getElementById("ksjs"); 
   if(ksExists) {
   }else{ location.reload();};

   var psExists = document.getElementById("psjs");
   if(psExists) {
   }else{ location.reload();};

   var styleExists = document.getElementById("style");
   if(styleExists) {
   }else{ location.reload();};


   }, 1 * 1000); // 1 * 1000 milsec

ps.js

   /*This script checks if mainjs exists as an element. If main js is not existent as an id in the html file reload!You can add this to all js files to ensure that your page integrity is perfect every second. If the page integrity is bad it reloads the page automatically and the process is restarted. This will blind an attacker as he has one second to disable every javascript file in your system which is impossible.

   */

   setInterval(function() {
   // check for existence of other scripts. This part will go in all other files to check for this file aswell. 
   var mainExists = document.getElementById("mainjs"); 
   if(mainExists) {
   }else{ location.reload();};

   //check that heading with id exists and name tag is dontdel.
   var headingExists = document.getElementById("heading"); 
   if(headingExists) {
   }else{ location.reload();};
   var integrityHeading = headingExists.getAttribute('name');
   if(integrityHeading == 'dontdel') {
   }else{ location.reload();};
   var integrity2Heading = headingExists.getAttribute('value');
   if(integrity2Heading == '2') {
   }else{ location.reload();};
   //check that all meta tags stay there
   var meta1Exists = document.getElementById("meta1"); 
   if(meta1Exists) {
   }else{ location.reload();};

   var headExists = document.getElementById("mainhead"); 
   if(headExists) {
   }else{ location.reload();};

   }, 1 * 1000); // 1 * 1000 milsec

ks.js

   /*This script checks if mainjs exists as an element. If main js is not existent as an id in the html file reload! You can add this to all js files to ensure that your page integrity is perfect every second. If the page integrity is bad it reloads the page automatically and the process is restarted. This will blind an attacker as he has one second to disable every javascript file in your system which is impossible.

   */

   setInterval(function() {
   // check for existence of other scripts. This part will go in all other files to check for this file aswell. 
   var mainExists = document.getElementById("mainjs"); 
   if(mainExists) {
   }else{ location.reload();};
   //Check meta tag 1 for content changes. meta1 will always be 0. This you do for each meta on the page to ensure content credibility. No one will change a meta and get away with it. Addition of a meta in spot 10, say a meta after the id="meta10" should also be covered as below.
   var x = document.getElementsByTagName("meta")[0];
   var p = x.getAttribute("name");
   var s = x.getAttribute("content");
   if (p != 'description') {
   location.reload();
   }
   if ( s != 'Proper mitigation against script kiddies via Javascript') {
   location.reload();
   }
   // This will prevent a meta tag after this meta tag @ id="meta1". This prevents new meta tags from being added to your pages. This can be used for scripts or any tag you feel is needed to do integrity check on like inputs and scripts. (Yet again. It is not a replacement for headers to be added. Add your headers aswell!)
   var lastMeta = document.getElementsByTagName("meta")[1];
   if (lastMeta) {
   location.reload();
   }
   }, 1 * 1000); // 1 * 1000 milsec

style.css

الآن هذا فقط لإظهار أنه يعمل على جميع الملفات والعلامات أيضا

   #heading {
   background-color:red;
   }

إذا وضعت كل هذه الملفات معًا وقمت ببناء المثال ، فسوف ترى وظيفة هذا المقياس. سيؤدي ذلك إلى منع بعض الحقن غير المنضبطة إذا قمت بتنفيذها بشكل صحيح على جميع العناصر الهامة في ملف الفهرس خاصة عند العمل مع PHP.

لماذا اخترت إعادة التحميل بدلاً من التغيير إلى القيمة العادية لكل سمة هي حقيقة أن بعض المهاجمين يمكن أن يكون لديهم جزء آخر من موقع الويب الذي تمت تهيئته وجاهزًا له ، وأنه يقلل من مقدار الشفرة. سيؤدي التحميل إلى إزالة جميع المهام الشاقة للمهاجم ، ومن المحتمل أنه سيذهب للعب في مكان ما أسهل.

ملاحظة أخرى: قد يتحول هذا إلى الكثير من الشفرات ، لذا حافظ على نظافته وتأكد من إضافة تعريفات إلى المكان الذي ينتمون إليه لجعل التعديلات سهلة في المستقبل. عيّن أيضًا الثواني لمبلغك المفضل حيث أن الفواصل الزمنية الثانية في الصفحات الكبيرة قد يكون لها تأثيرات جذرية على أجهزة الكمبيوتر القديمة التي ربما يستخدمها الزوار




Related

javascript facebook google-chrome-devtools