سؤال

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

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

سؤال:هل هناك طريقة يمكن لموقع ما من خلالها إخبار المتصفح بعدم عرض تذكر كلمات المرور؟لقد عملت في مجال تطوير الويب لفترة طويلة ولكن لا أعلم أنني واجهت ذلك من قبل.

هو موضع تقدير أي مساعدة.

هل كانت مفيدة؟

المحلول

لست متأكدًا مما إذا كان سيعمل في جميع المتصفحات ولكن يجب أن تحاول ضبط الإكمال التلقائي = "إيقاف" في النموذج.

<form id="loginForm" action="login.cgi" method="post" autocomplete="off">

الطريقة الأسهل والأبسط لتعطيل النموذج ومطالبات تخزين كلمة المرور ومنع تخزين بيانات النموذج مؤقتًا في سجل الجلسة هو استخدام سمة عنصر نموذج الإكمال التلقائي بالقيمة "إيقاف".

من http://developer.mozilla.org/En/How_to_Turn_Off_Form_Autocompletion

تظهر بعض الأبحاث البسيطة أن هذا يعمل في IE ولكنني لن أترك أي ضمانات؛)

@جوزيف:إذا كان اجتياز التحقق من صحة XHTML باستخدام العلامات الفعلية مطلبًا صارمًا (لا أعرف سبب ذلك)، فيمكنك نظريًا إضافة هذه السمة باستخدام جافا سكريبت بعد ذلك ولكن بعد ذلك تم تعطيل المستخدمين الذين لديهم js (ربما يكون هناك قدر مهمل من قاعدة المستخدمين الخاصة بك أو صفر إذا يتطلب موقعك js) سيظل يتم حفظ كلمات المرور الخاصة به.

مثال مع مسج:

$('#loginForm').attr('autocomplete', 'off');

نصائح أخرى

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

مع هذا الشرط، المعيار autocomplete="off" لا تعمل هذه الطريقة عبر جميع المتصفحات، لأنه ربما تم حفظ كلمة المرور منذ أول تسجيل دخول.وجد أحد الزملاء حلاً لاستبدال حقل كلمة المرور عند التركيز عليه بحقل كلمة مرور جديدة، ثم التركيز على حقل كلمة المرور الجديدة (ثم ربط نفس معالج الأحداث).نجح هذا (إلا أنه تسبب في حلقة لا نهائية في IE6).ربما كان هناك طريقة للتغلب على ذلك، لكنه كان يسبب لي الصداع النصفي.

أخيرًا، حاولت الحصول على اسم المستخدم وكلمة المرور خارج النموذج.لدهشتي، نجح هذا!لقد كان يعمل على IE6، والإصدارات الحالية من Firefox وChrome على Linux.لم أختبره مرة أخرى، ولكني أظن أنه يعمل في معظم المتصفحات إن لم يكن كلها (ولكن لن يفاجئني إذا كان هناك متصفح لا يهتم إذا لم يكن هناك نموذج).

فيما يلي بعض نماذج التعليمات البرمجية، بالإضافة إلى بعض jQuery لتشغيلها:

<input type="text" id="username" name="username"/>
<input type="password" id="password" name="password"/>

<form id="theForm" action="/your/login" method="post">
  <input type="hidden" id="hiddenUsername" name="username"/>
  <input type="hidden" id="hiddenPassword" name="password"/>
  <input type="submit" value="Login"/>
</form>

<script type="text/javascript" language="JavaScript">
  $("#theForm").submit(function() {
    $("#hiddenUsername").val($("#username").val());
    $("#hiddenPassword").val($("#password").val());
  });
  $("#username,#password").keypress(function(e) {
    if (e.which == 13) {
      $("#theForm").submit();
    }
  });
</script>

مجرد استخدام

للقراءة فقط عند التركيز = "this.removeAttribute('readonly');"

بالإضافة إلى

الإكمال التلقائي = "إيقاف"

إلى المدخلات (المدخلات) التي لا تريد أن تتذكرها بيانات النموذج (username, password, الخ) كما هو موضح أدناه:

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

تم اختباره على أحدث الإصدارات من المتصفحات الرئيسية، مثل. Google Chrome, Mozilla Firefox, Microsoft Edge, ، إلخ.ويعمل مثل السحر.أتمنى أن يساعدك هذا...

حسنًا، إنها مشاركة قديمة جدًا، لكنني سأقدم الحل الذي كان فريقي يحاول تحقيقه لفترة طويلة.لقد أضفنا للتو حقل إدخال جديد من نوع = "كلمة المرور" داخل النموذج وقمنا بتغليفه في div وجعلنا div مخفيًا.تأكد من أن هذا div موجود قبل إدخال كلمة المرور الفعلية.لقد نجح هذا بالنسبة لنا ولم يقدم أي خيار لحفظ كلمة المرور

غطس - http://plnkr.co/edit/xmBR31NQMUgUhYHBiZSg?p=preview

لغة البرمجة:

<form method="post" action="yoururl">
      <div class="hidden">
        <input type="password"/>
      </div>
      <input type="text" name="username" placeholder="username"/>
      <input type="password" name="password" placeholder="password"/>
    </form>

CSS:

.hidden {display:none;}

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

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

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

استخدام حقيقي توثيق ذو عاملين لتجنب الاعتماد الوحيد على كلمات المرور التي قد يتم تخزينها في أماكن أكثر بكثير من ذاكرة التخزين المؤقت لمتصفح المستخدم.

أنظف طريقة هي الاستخدام autocomplete="off" سمة العلامة ولكن Firefox لا تطيعها بشكل صحيح عند تبديل الحقول مع علامة التبويب.

الطريقة الوحيدة التي يمكنك من خلالها إيقاف ذلك هي إضافة حقل كلمة مرور مخفية مزيفة والذي يخدع المتصفح لملء كلمة المرور هناك.

<input type="text" id="username" name="username"/>
<input type="password" id="prevent_autofill" autocomplete="off" style="display:none" tabindex="-1" />
<input type="password" id="password" autocomplete="off" name="password"/>

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

ملحوظة:سيؤدي هذا إلى إيقاف الملء التلقائي لكلمة المرور بشكل فعال، لأن FF "سيحفظ" قيمة #prevent_autofill (وهو فارغ) وسيحاول ملء أي كلمات مرور محفوظة هناك، لأنه يستخدم دائمًا الكلمة الأولى type="password" الإدخال الذي يجده في DOM بعد إدخال "اسم المستخدم" المعني.

لقد اختبرت إضافة الإكمال التلقائي = "off" في علامة النموذج في جميع المتصفحات الرئيسية.في الواقع، معظم الناس في الولايات المتحدة يستخدمون IE8 حتى الآن.

  1. IE8، IE9، IE10، Firefox، Safari تعمل بشكل جيد.

    المتصفح لا يطلب "حفظ كلمة المرور".وأيضًا، لم تتم تعبئة اسم المستخدم وكلمة المرور المحفوظة مسبقًا.

  2. لا يدعم Chrome وIE 11 ميزة الإكمال التلقائي = "إيقاف".
  3. FF يدعم الإكمال التلقائي = "إيقاف".ولكن في بعض الأحيان يتم ملء بيانات الاعتماد المحفوظة الموجودة.

تم التحديث في 11 يونيو 2014

أخيرًا، يوجد أدناه حل عبر المتصفحات يستخدم جافا سكريبت وهو يعمل بشكل جيد في جميع المتصفحات.

تحتاج إلى إزالة علامة "النموذج" في نموذج تسجيل الدخول.بعد التحقق من جانب العميل، ضع بيانات الاعتماد هذه في نموذج مخفي وأرسلها.

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

لغة البرمجة

<form id="HiddenLoginForm" action="" method="post">
<input type="hidden" name="username" id="hidden_username" />
<input type="hidden" name="password" id="hidden_password" />
</form>

Username: <input type="text" name="username" id="username" onKeyPress="return checkAndSubmit(event);" /> 
Password: <input type="text" name="password" id="password" onKeyPress="return checkAndSubmit(event);" /> 
<input type="button" value="submit" onClick="return validateAndLogin();" onKeyPress="return checkAndSubmit(event);" /> 

جافا سكريبت

//For validation- you can modify as you like
function validateAndLogin(){
  var username = document.getElementById("username");
  var password = document.getElementById("password");

  if(username  && username.value == ''){
    alert("Please enter username!");
    return false;
  }

  if(password && password.value == ''){
    alert("Please enter password!");
    return false;
  }

  document.getElementById("hidden_username").value = username.value;
  document.getElementById("hidden_password").value = password.value;
  document.getElementById("HiddenLoginForm").submit();
}

//For enter event
function checkAndSubmit(e) {
 if (e.keyCode == 13) {
   validateAndLogin();
 }
}

حظ سعيد!!!

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

ثم سيتبع المستخدم النصيحة على الفور، ويكتب كلمة المرور على مذكرة لاصقة ويلصقها على شاشته.

ما كنت أفعله هو مزيج من الإكمال التلقائي = "إيقاف" ومسح حقول كلمة المرور باستخدام javascript/jQuery.

مثال مسج:

$(function() { 
    $('#PasswordEdit').attr("autocomplete", "off");
    setTimeout('$("#PasswordEdit").val("");', 50); 
});

باستخدام setTimeout() يمكنك الانتظار حتى يكمل المتصفح الحقل قبل مسحه، وإلا فسيقوم المتصفح دائمًا بالإكمال التلقائي بعد مسح الحقل.

إذا كان الإكمال التلقائي = "off" لا يعمل... قم بإزالة علامة النموذج واستخدم علامة div بدلاً من ذلك، ثم قم بتمرير قيم النموذج باستخدام jquery إلى الخادم.لقد نجح هذا بالنسبة لي.

نظرًا لأن الإكمال التلقائي = "off" لا يعمل مع حقول كلمة المرور، فيجب الاعتماد على جافا سكريبت.إليك حل بسيط يعتمد على الإجابات الموجودة هنا.

أضف السمة data-password-autocomplete="off" إلى حقل كلمة المرور الخاصة بك:

<input type="password" data-password-autocomplete="off">

قم بتضمين JS التالي:

$(function(){
    $('[data-password-autocomplete="off"]').each(function() {
        $(this).prop('type', 'text');
        $('<input type="password"/>').hide().insertBefore(this);
        $(this).focus(function() {
            $(this).prop('type', 'password');
        });
    });     
});

يعمل هذا الحل مع كل من Chrome وFF.

فقط لكي يدرك الناس - تعمل سمة "الإكمال التلقائي" في معظم الأوقات، ولكن يمكن للمستخدمين المتميزين تجاوزها باستخدام تطبيق مرجعي.

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

لدي عمل حولها، والتي قد تساعد.

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

ثم في نموذج تسجيل الدخول الخاص بك، استخدم:

<form autocomplete='off'  ...>
   <input type="text" name="email" ...>
   <input type="text" name="password" class="password" autocomplete='off' ...>
   <input type=submit>
</form>

ثم قم بإضافة CSS الخاص بك:

@font-face {
    font-family: 'myCustomfont';
    src: url('myCustomfont.eot');
    src: url('myCustomfont?#iefix') format('embedded-opentype'),
         url('myCustomfont.woff') format('woff'),
         url('myCustomfont.ttf') format('truetype'),
         url('myCustomfont.svg#myCustomfont') format('svg');
    font-weight: normal;
    font-style: normal;

}
.password {
  font-family:'myCustomfont';
}

متوافق تمامًا مع المتصفحات.لقد قمت بتجربة IE6+ وFF وSafari وChrome.فقط تأكد من عدم تلف خط oet الذي تقوم بتحويله.آمل أن يساعد؟

أثار ماركوس نقطة عظيمة.قررت أن أبحث عن autocomplete السمة وحصلت على ما يلي:

الجانب السلبي الوحيد لاستخدام هذه السمة هو أنه ليس قياسيًا (إنه يعمل في متصفحات IE و Mozilla) ، وسيؤدي إلى فشل التحقق من صحة XHTML.أعتقد أن هذه حالة يكون فيها من المعقول كسر التحقق من الصحة. (مصدر)

لذلك أود أن أقول إنه على الرغم من أنه لا يعمل بنسبة 100% في جميع المجالات، إلا أنه يتم التعامل معه في المتصفحات الرئيسية، لذا فهو حل رائع.

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

فيما يلي مثال (لا يمكنك تشغيله هنا، حيث لم يتم تعيين إجراء النموذج على برنامج نصي حقيقي لتسجيل الدخول):

<!doctype html>
<html>
<head>
  <title>Login & Save password test</title>
  <meta charset="utf-8">
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>

  <body>
      <!-- the following fields will show on page, but are not part of the form -->
      <input class="username" type="text" placeholder="Username" />
      <input class="password" type="password" placeholder="Password" />

      <form id="loginForm" action="login.aspx" method="post">
        <!-- thw following two fields are part of the form, but are not visible -->
        <input name="username" id="username" type="hidden" />
        <input name="password" id="password" type="hidden" />
        <!-- standard submit button -->
        <button type="submit">Login</button>
      </form>

    <script>
      // attache a event listener which will get called just before the form data is sent to server
      $('form').submit(function(ev) {
        console.log('xxx');
        // read the value from the visible INPUT and save it to invisible one
        // ... so that it gets sent to the server
        $('#username').val($('.username').val());
        $('#password').val($('.password').val());
      });
    </script>

  </body>
</html>

الحل البديل الخاص بـ js (jquery) هو تغيير نوع إدخال كلمة المرور إلى نص في إرسال النموذج.يمكن أن تصبح كلمة المرور مرئية لمدة ثانية، لذلك أقوم أيضًا بإخفاء الإدخال قبل ذلك مباشرةً. أفضل عدم استخدام هذا لنماذج تسجيل الدخول, ، ولكنه مفيد (جنبًا إلى جنب مع الإكمال التلقائي = "off") على سبيل المثال داخل الجزء الإداري من موقع الويب.

حاول وضع هذا داخل وحدة التحكم (باستخدام jquery)، قبل إرسال النموذج.

$('form').submit(function(event) {
    $(this).find('input[type=password]').css('visibility', 'hidden').attr('type', 'text');
});

تم الاختبار على Chrome 44.0.2403.157 (64 بت).

حاولت أعلاه autocomplete="off" وبعد أي شيء ناجح.إذا كنت تستخدم angular js، فإن توصيتي هي استخدام الزر والنقر فوق ng.

<button type="button" class="" ng-click="vm.login()" />

هذا لديه بالفعل إجابة مقبولة، وأضيف هذا إذا لم يتمكن شخص ما من حل المشكلة بالإجابة المقبولة، فيمكنه استخدام آليتي.

شكرا على السؤال والأجوبة.

لقد اختبرت الكثير من الحلول.اسم حقل كلمة المرور الديناميكية، وحقول كلمة المرور المتعددة (غير مرئية للحقول المزيفة)، وتغيير نوع الإدخال من "نص" إلى "كلمة المرور"، والإكمال التلقائي = "إيقاف"، والإكمال التلقائي = "كلمة المرور الجديدة"،...ولكن لم يحلها شيء باستخدام المتصفح الأخير.

للتخلص من تذكر كلمة المرور، تعاملت أخيرًا مع كلمة المرور كحقل إدخال، وقمت "بتمويه" النص المكتوب.

إنه أقل "أمانًا" من حقل كلمة المرور الأصلية نظرًا لأن تحديد النص المكتوب سيُظهره كنص واضح، ولكن لا يتم تذكر كلمة المرور.ويعتمد ذلك أيضًا على تفعيل Javascript.

سيكون لديك تقدير لمخاطر استخدام الاقتراح أدناه مقابل خيار تذكر كلمة المرور من المتصفح.

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

حالتي تتعلق بنظام تخطيط موارد المؤسسات (ERP) الذي يعمل على أجهزة كمبيوتر مشتركة، لذا سأجرب الحل أدناه.

<input style="background-color: rgb(239, 179, 196); color: black; text-shadow: none;" name="password" size="10" maxlength="30" onfocus="this.value='';this.style.color='black'; this.style.textShadow='none';" onkeypress="this.style.color='transparent'; this.style.textShadow='1px 1px 6px green';" autocomplete="off" type="text">

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

المشكلة الرئيسية في هذا هي أن الحل مرتبط بجافا سكريبت.

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

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

تخيل أن الإكمال التلقائي = "off" يعمل بشكل مثالي في جميع المتصفحات.هل سيساعد ذلك في تحقيق الأمن؟بالطبع لا.سيقوم المستخدمون بتدوين كلمات المرور الخاصة بهم في الكتب المدرسية، وعلى الملصقات المرفقة بشاشاتهم حيث يمكن لكل زائر للمكتب رؤيتها، وحفظها في ملفات نصية على سطح المكتب وما إلى ذلك.

بشكل عام، لا يتحمل مطورو تطبيقات الويب والويب المسؤولية بأي شكل من الأشكال عن أمان المستخدم النهائي.يمكن للمستخدمين النهائيين حماية أنفسهم فقط.من الناحية المثالية، يجب عليهم الاحتفاظ بجميع كلمات المرور في أذهانهم واستخدام وظيفة إعادة تعيين كلمة المرور (أو الاتصال بالمسؤول) في حالة نسيانها.وإلا سيكون هناك دائمًا خطر إمكانية رؤية كلمة المرور وسرقتها بطريقة ما.

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

  1. الوصول غير مصرح به.أبسط نموذج تسجيل الدخول يكفي في الأساس.يتم في بعض الأحيان اتخاذ إجراءات إضافية مثل أسئلة الأمان العشوائية واختبارات CAPTCHA وتشديد كلمة المرور وما إلى ذلك.
  2. استنشاق أوراق الاعتماد.يعد HTTPS أمرًا ضروريًا إذا كان الأشخاص يصلون إلى تطبيق الويب الخاص بك من نقاط اتصال Wi-Fi العامة وما إلى ذلك.اذكر أنه حتى لو كان لديهم HTTPS، فسيحتاج المستخدمون إلى تغيير كلمات المرور الخاصة بهم بانتظام.
  3. هجوم من الداخل.هناك العديد من الأمثلة على ذلك، بدءًا من سرقة كلمات المرور الخاصة بك من المتصفح أو تلك التي قمت بتدوينها في مكان ما على المكتب (لا يتطلب ذلك أي مهارات في مجال تكنولوجيا المعلومات) وانتهاءً بتزوير الجلسة واعتراض حركة مرور الشبكة المحلية (حتى المشفرة) ومواصلة الوصول إلى تطبيق الويب تمامًا كما لو كان مستخدمًا نهائيًا آخر.

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

تواجه نفس مشكلة HIPAA ووجدت حلاً سهلاً نسبيًا،

  1. قم بإنشاء حقل كلمة مرور مخفية باسم الحقل كمصفوفة.

    <input type="password" name="password[]" style="display:none" />
    
  2. استخدم نفس المصفوفة لحقل كلمة المرور الفعلية.

    <input type="password" name="password[]" />
    

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

حاولت تعريف المصفوفة، مثل "password[part2]" لكنها ما زالت في التذكر.أعتقد أنه سيتم التخلص منها إذا كانت مصفوفة غير مفهرسة لأنه ليس لديها خيار سوى إسقاطها في المكان الأول.

ثم تستخدم لغة البرمجة التي تختارها للوصول إلى المصفوفة، PHP على سبيل المثال،

echo $_POST['password'][1];

وبما أن معظم autocomplete الاقتراحات، بما في ذلك الإجابة المقبولة، لا تعمل في متصفحات الويب اليوم (على سبيل المثال.يتجاهل مديرو كلمات مرور متصفح الويب autocomplete) ، الحل الأكثر حداثة هو التبديل بينهما password و text أنواع وجعل لون الخلفية يطابق لون النص عندما يكون الحقل حقل نص عادي، والذي يستمر في إخفاء كلمة المرور بينما يكون حقل كلمة مرور حقيقي عندما يقوم المستخدم (أو برنامج مثل KeePass) بإدخال كلمة مرور.لا تطلب المتصفحات حفظ كلمات المرور المخزنة في حقول النص العادي.

تتمثل ميزة هذا الأسلوب في أنه يسمح بالتحسين التدريجي وبالتالي لا يتطلب Javascript لكي يعمل الحقل كحقل كلمة مرور عادي (يمكنك أيضًا البدء بحقل نص عادي بدلاً من ذلك وتطبيق نفس الأسلوب ولكن هذا ليس HIPAA حقًا) متوافق مع PHI/PII).كما أن هذا الأسلوب لا يعتمد على النماذج/الحقول المخفية التي قد لا يتم إرسالها بالضرورة إلى الخادم (لأنها مخفية) كما أن بعض هذه الحيل لا تعمل أيضًا في العديد من المتصفحات الحديثة.

البرنامج المساعد مسج:

https://github.com/cubiclesoft/php-flexforms-modules/blob/master/password-manager/jquery.stoppasswordmanager.js

كود المصدر ذو الصلة من الرابط أعلاه:

(function($) {
$.fn.StopPasswordManager = function() {
    return this.each(function() {
        var $this = $(this);

        $this.addClass('no-print');
        $this.attr('data-background-color', $this.css('background-color'));
        $this.css('background-color', $this.css('color'));
        $this.attr('type', 'text');
        $this.attr('autocomplete', 'off');

        $this.focus(function() {
            $this.attr('type', 'password');
            $this.css('background-color', $this.attr('data-background-color'));
        });

        $this.blur(function() {
            $this.css('background-color', $this.css('color'));
            $this.attr('type', 'text');
            $this[0].selectionStart = $this[0].selectionEnd;
        });

        $this.on('keydown', function(e) {
            if (e.keyCode == 13)
            {
                $this.css('background-color', $this.css('color'));
                $this.attr('type', 'text');
                $this[0].selectionStart = $this[0].selectionEnd;
            }
        });
    });
}
}(jQuery));

العرض التوضيحي:

https://barebonescms.com/demos/admin_pack/admin.php

انقر فوق "إضافة إدخال" في القائمة ثم قم بالتمرير إلى أسفل الصفحة للوصول إلى "الوحدة النمطية:إيقاف مدير كلمات المرور".

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

هل هناك طريقة يمكن لموقع ما من خلالها إخبار المتصفح بعدم عرض تذكر كلمات المرور؟

يخبر موقع الويب المتصفح أنها كلمة مرور باستخدام <input type="password">.لذلك إذا كنت يجب افعل ذلك من منظور موقع الويب، فسيتعين عليك تغيير ذلك.(من الواضح أنني لا أوصي بهذا).

الحل الأفضل هو مطالبة المستخدم بتهيئة متصفحه بحيث لا يتذكر كلمات المرور.

إذا كنت لا تريد الوثوق بعلامة الإكمال التلقائي، فيمكنك التأكد من قيام المستخدم بالكتابة في المربع باستخدام حدث onchange.الكود أدناه هو نموذج HTML بسيط.يبدأ عنصر النموذج المخفي كلمة المرور_تحريره بالقيمة 0.عندما يتم تغيير قيمة كلمة المرور، يقوم JavaScript الموجود في الأعلى (وظيفة pw_edited) بتغيير القيمة إلى 1.عند الضغط على الزر، فإنه يتحقق من رمز القيمة هنا قبل إرسال النموذج.وبهذه الطريقة، حتى إذا تجاهلك المتصفح وقام بإكمال الحقل تلقائيًا، فلن يتمكن المستخدم من تمرير صفحة تسجيل الدخول دون كتابة حقل كلمة المرور.تأكد أيضًا من إفراغ حقل كلمة المرور عند ضبط التركيز.بخلاف ذلك، يمكنك إضافة شخصية في النهاية، ثم الرجوع وإزالتها لخداع النظام.أوصي بإضافة الإكمال التلقائي = "إيقاف" إلى كلمة المرور بالإضافة إلى ذلك، ولكن هذا المثال يوضح كيفية عمل الرمز الاحتياطي.

<html>
  <head>
    <script>
      function pw_edited() {
        document.this_form.password_edited.value = 1;
      }
      function pw_blank() {
        document.this_form.password.value = "";
      }
      function submitf() {
        if(document.this_form.password_edited.value < 1) {
          alert("Please Enter Your Password!");
        }
        else {
         document.this_form.submit();
        }
      }
    </script>
  </head>
  <body>
    <form name="this_form" method="post" action="../../cgi-bin/yourscript.cgi?login">
      <div style="padding-left:25px;">
        <p>
          <label>User:</label>
          <input name="user_name" type="text" class="input" value="" size="30" maxlength="60">
        </p>
        <p>
          <label>Password:</label>
          <input name="password" type="password" class="input" size="20" value="" maxlength="50" onfocus="pw_blank();" onchange="pw_edited();">
        </p>
        <p>
          <span id="error_msg"></span>
        </p>
        <p>
          <input type="hidden" name="password_edited" value="0">
          <input name="submitform" type="button" class="button" value="Login" onclick="return submitf();">
        </p>
      </div>
    </form>
  </body>
</html>

الإكمال التلقائي = "off" لا يعمل على تعطيل مدير كلمات المرور في Firefox 31 وعلى الأرجح ليس في بعض الإصدارات السابقة أيضًا.

اطلع على المناقشة في mozilla حول هذه المشكلة:https://bugzilla.mozilla.org/show_bug.cgi?id=956906

أردنا استخدام حقل كلمة المرور الثاني لإدخال كلمة مرور لمرة واحدة تم إنشاؤها بواسطة رمز مميز.نحن الآن نستخدم إدخال النص بدلاً من إدخال كلمة المرور.:-(

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

<input type="text" style="display:none">
<input type="text" name="OriginalLoginTextBox">

<input type="password" style="display:none">
<input type="text" name="OriginalPasswordTextBox">

يعمل هذا بشكل جيد مع IE11 وChrome 44.0.2403.107

يعمل الإكمال التلقائي = "off" مع معظم المتصفحات الحديثة، ولكن هناك طريقة أخرى استخدمتها ونجحت مع Epiphany (متصفح يعمل بنظام WebKit لـ GNOME) وهي تخزين بادئة تم إنشاؤها عشوائيًا في حالة الجلسة (أو حقل مخفي، تصادف أن لدي متغير مناسب في حالة الجلسة بالفعل)، واستخدمه لتغيير اسم الحقول.لا يزال Epiphany يريد حفظ كلمة المرور، ولكن عند الرجوع إلى النموذج، لن يقوم بملء الحقول.

لم أواجه أي مشكلة في استخدام هذه الطريقة:

استخدم الإكمال التلقائي = "إيقاف"، وأضف حقل كلمة المرور المخفية، ثم حقل آخر غير مخفي.يحاول المتصفح إكمال الملف المخفي تلقائيًا إذا كان لا يحترم الإكمال التلقائي = "off"

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top