คุณจะปิดการใช้งานautocomplete
ในเบราว์เซอร์หลักสำหรับinput
(หรือform field
) ที่เฉพาะเจาะจงได้อย่างไร?
คุณจะปิดการใช้งานautocomplete
ในเบราว์เซอร์หลักสำหรับinput
(หรือform field
) ที่เฉพาะเจาะจงได้อย่างไร?
คำตอบ:
Firefox 30 จะละเว้นautocomplete="off"
รหัสผ่านโดยเลือกให้ผู้ใช้แทนว่าควรเก็บรหัสผ่านไว้ในไคลเอนต์หรือไม่ หมายเหตุความเห็นต่อไปนี้ตั้งแต่วันที่ 5 พฤษภาคม 2014:
- เครื่องมือจัดการรหัสผ่านจะแจ้งให้เสมอหากต้องการบันทึกรหัสผ่าน รหัสผ่านจะไม่ถูกบันทึกโดยไม่ได้รับอนุญาตจากผู้ใช้
- เราเป็นเบราว์เซอร์ที่สามที่ใช้การเปลี่ยนแปลงนี้หลังจาก IE และ Chrome
ตามเอกสารประกอบของMozilla Developer Networkแอตทริบิวต์autocomplete
form form ของBoolean จะป้องกันข้อมูลฟอร์มไม่ให้ถูกแคชในเบราว์เซอร์รุ่นเก่า
<input type="text" name="foo" autocomplete="off" />
นอกจาก autocomplete=off
คุณยังสามารถให้ชื่อเขตข้อมูลฟอร์มของคุณถูกสุ่มด้วยรหัสที่สร้างหน้าได้โดยอาจเพิ่มสตริงเฉพาะเซสชันบางรายการไปยังส่วนท้ายของชื่อ
เมื่อมีการส่งแบบฟอร์มคุณสามารถดึงส่วนนั้นออกก่อนประมวลผลทางฝั่งเซิร์ฟเวอร์ สิ่งนี้จะป้องกันเว็บเบราว์เซอร์จากการค้นหาบริบทสำหรับฟิลด์ของคุณและอาจช่วยป้องกันการโจมตี XSRF เนื่องจากผู้โจมตีจะไม่สามารถเดาชื่อฟิลด์สำหรับการส่งแบบฟอร์ม
$_SESSION['codefield_name'] = md5(uniqid('auth', true));
เบราว์เซอร์หลักและตัวจัดการรหัสผ่านส่วนใหญ่ (อย่างถูกต้อง IMHO) จะไม่สนใจในขณะนี้ autocomplete=off
ตอนนี้ไม่สนใจ
ทำไม? เพิ่มธนาคารหลายแห่งและเว็บไซต์ "ความปลอดภัยสูง" อื่น ๆautocomplete=off
ในหน้าเข้าสู่ระบบ "เพื่อความปลอดภัย" แต่นี่เป็นการลดความปลอดภัยเนื่องจากทำให้ผู้คนเปลี่ยนรหัสผ่านบนเว็บไซต์ที่มีความปลอดภัยสูงเหล่านี้เพื่อให้จดจำได้ง่าย ถูกทำลาย
นานมาแล้วผู้จัดการรหัสผ่านส่วนใหญ่เริ่มเพิกเฉย autocomplete=off
และตอนนี้เบราว์เซอร์เริ่มทำเช่นเดียวกันสำหรับชื่อผู้ใช้ / รหัสผ่านเท่านั้น
น่าเสียดายที่ข้อผิดพลาดในการใช้งานการเติมข้อความอัตโนมัติใส่ชื่อผู้ใช้และ / หรือข้อมูลรหัสผ่านลงในช่องแบบฟอร์มที่ไม่เหมาะสมทำให้เกิดข้อผิดพลาดในการตรวจสอบแบบฟอร์มหรือแย่กว่านั้นโดยบังเอิญใส่ชื่อผู้ใช้ลงในช่อง
นักพัฒนาเว็บต้องทำอะไร
น่าเสียดายที่Chrome 34 จะพยายามป้อนข้อมูลอัตโนมัติด้วยผู้ใช้ / ผ่านทุกครั้งที่เห็นฟิลด์รหัสผ่าน นี่เป็นข้อผิดพลาดที่ไม่ดีที่หวังว่าพวกเขาจะเปลี่ยนพฤติกรรมของ Safari อย่างไรก็ตามการเพิ่มสิ่งนี้ไปที่ด้านบนของแบบฟอร์มของคุณดูเหมือนว่าจะปิดใช้งานการป้อนรหัสผ่านอัตโนมัติ:
<input type="text" style="display:none">
<input type="password" style="display:none">
ฉันยังไม่ได้ตรวจสอบ IE หรือ Firefox อย่างละเอียด แต่ยินดีที่จะอัปเดตคำตอบหากผู้อื่นมีข้อมูลในความคิดเห็น
type='password'
ฟิลด์ในหน้าเดียวทำให้การเติมข้อความอัตโนมัติ "บันทึกรหัสผ่าน" ของเบราว์เซอร์ซึ่งทำให้หมดความรู้สึกทั้งหมดเนื่องจากแบบฟอร์มการลงทะเบียนมักจะถามรหัสผ่านสองครั้งเมื่อแบบฟอร์มเข้าสู่ระบบถามเพียงครั้งเดียว
บางครั้งแม้แต่การเติมข้อความอัตโนมัติ = ปิดจะไม่ป้องกันไม่ให้กรอกข้อมูลรับรองลงในฟิลด์ที่ไม่ถูกต้อง แต่ไม่ใช่ฟิลด์ชื่อผู้ใช้หรือชื่อเล่น
วิธีแก้ปัญหานี้นอกเหนือจากโพสต์ของ apinstein เกี่ยวกับพฤติกรรมของเบราว์เซอร์
แก้ไขการป้อนอัตโนมัติของเบราว์เซอร์ในแบบอ่านอย่างเดียวและตั้งค่าการเขียนบนโฟกัส (คลิกและแท็บ)
<input type="password" readonly
onfocus="this.removeAttribute('readonly');"/>
อัปเดต: Mobile Safari ตั้งค่าเคอร์เซอร์ในฟิลด์ แต่ไม่แสดงแป้นพิมพ์เสมือนจริง ใหม่แก้ไขการทำงานเหมือน แต่ก่อนจัดการแป้นพิมพ์เสมือนจริง:
<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
this.removeAttribute('readonly');
// fix for mobile safari to show virtual keyboard
this.blur(); this.focus(); }" />
การสาธิตสด https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
เนื่องจากเบราว์เซอร์เติมข้อมูลประจำตัวในฟิลด์ข้อความผิดอัตโนมัติ!
ฉันสังเกตเห็นพฤติกรรมแปลก ๆ นี้ใน Chrome และ Safari เมื่อมีช่องรหัสผ่านในรูปแบบเดียวกัน ฉันเดาว่าเบราว์เซอร์จะมองหาฟิลด์รหัสผ่านเพื่อใส่ข้อมูลรับรองที่คุณบันทึกไว้ จากนั้นมันจะเติมข้อมูลโดยอัตโนมัติ (เพียงเดาเนื่องจากการสังเกต) ฟิลด์ป้อนข้อความที่ใกล้ที่สุดซึ่งปรากฏก่อนฟิลด์รหัสผ่านใน DOM เนื่องจากเบราว์เซอร์เป็นอินสแตนซ์สุดท้ายและคุณไม่สามารถควบคุมได้
การแก้ไขแบบอ่านอย่างเดียวด้านบนนี้เหมาะกับฉัน
readonly
มีการลบออกการเลือกฟิลด์ที่ตามมาจะส่งผลให้การเติมข้อความอัตโนมัติกลับมา
<form name="form1" id="form1" method="post"
autocomplete="off" action="http://www.example.com/form.cgi">
สิ่งนี้จะทำงานใน Internet Explorer และ Mozilla FireFox ข้อเสียคือมันไม่ได้เป็นมาตรฐาน XHTML
input type="password"
ไมโครซอฟท์ไม่เคารพนี้ หวังว่าจะไม่มีเบราว์เซอร์อื่น ๆ เลือกที่จะลบฟังก์ชั่นนี้
autocomplete="off"
บนform
เป็นสิ่งเดียวที่ทำงานสำหรับ Chrome
ทางออกสำหรับ Chrome คือการเพิ่มautocomplete="new-password"
รหัสผ่านประเภทการป้อนข้อมูล โปรดตรวจสอบตัวอย่างด้านล่าง
ตัวอย่าง:
<form name="myForm"" method="post">
<input name="user" type="text" />
<input name="pass" type="password" autocomplete="new-password" />
<input type="submit">
</form>
Chrome จะเติมข้อมูลให้โดยอัตโนมัติหากพบกล่องรหัสผ่านประเภทเพียงพอที่จะระบุสำหรับกล่องautocomplete = "new-password"
นั้น
มันใช้งานได้ดีสำหรับฉัน
หมายเหตุ: ตรวจสอบให้แน่ใจF12
ว่าการเปลี่ยนแปลงของคุณมีผลบังคับใช้หลายครั้งที่เบราว์เซอร์บันทึกหน้าเว็บไว้ในแคชสิ่งนี้ทำให้ฉันประทับใจว่ามันใช้งานไม่ได้ แต่เบราว์เซอร์ไม่ได้นำการเปลี่ยนแปลงมาใช้จริง
อย่างที่คนอื่นพูดคำตอบก็คือ autocomplete="off"
อย่างไรก็ตามฉันคิดว่ามันมีค่าพอที่จะระบุว่าทำไมมันจึงเป็นความคิดที่ดีที่จะใช้สิ่งนี้ในบางกรณีเป็นคำตอบสำหรับเรื่องนี้และทำซ้ำคำถามที่ได้แนะนำว่าอย่าปิดเครื่อง
การหยุดเบราว์เซอร์ที่จัดเก็บหมายเลขบัตรเครดิตไม่ควรปล่อยให้กับผู้ใช้ ผู้ใช้จำนวนมากเกินไปจะไม่ตระหนักว่าเป็นปัญหา
เป็นสิ่งสำคัญอย่างยิ่งที่จะต้องปิดในฟิลด์สำหรับรหัสความปลอดภัยของบัตรเครดิต ตามที่หน้านี้ระบุ:
"อย่าเก็บรหัสความปลอดภัย ... ค่าของมันขึ้นอยู่กับข้อสันนิษฐานว่าวิธีเดียวที่จะให้มันคือการอ่านจากบัตรเครดิตทางกายภาพพิสูจน์ได้ว่าบุคคลที่ให้มันถือบัตรจริง ๆ "
ปัญหาคือถ้าเป็นคอมพิวเตอร์สาธารณะ (ไซเบอร์คาเฟ่ห้องสมุด ฯลฯ ) ผู้ใช้รายอื่นจะขโมยรายละเอียดบัตรของคุณและแม้แต่ในเครื่องของคุณเองเว็บไซต์ที่เป็นอันตรายอาจขโมยข้อมูลที่เติมข้อความอัตโนมัติได้
ฉันได้แก้ไขการต่อสู้ที่ไม่สิ้นสุดกับ Google Chrome ด้วยการใช้อักขระแบบสุ่ม เมื่อคุณแสดงผลการเติมข้อความอัตโนมัติด้วยสตริงสุ่มเสมอมันจะไม่จดจำสิ่งใดเลย
<input name="name" type="text" autocomplete="rutjfkde">
หวังว่ามันจะช่วยให้คนอื่น
autocompleteoff
คลาสในฟิลด์อินพุตที่คุณต้องการ
ฉันต้องขอให้แตกต่างกับคำตอบที่พูดเพื่อหลีกเลี่ยงการปิดใช้งานการทำให้สมบูรณ์อัตโนมัติ
สิ่งแรกที่ต้องพิจารณาคือการเติมข้อมูลอัตโนมัติไม่ถูกปิดใช้งานอย่างชัดเจนในฟิลด์แบบฟอร์มเข้าสู่ระบบคือ PCI-DSS ล้มเหลว นอกจากนี้หากเครื่องท้องถิ่นของผู้ใช้ถูกบุกรุกข้อมูลการเติมข้อความอัตโนมัติใด ๆ สามารถรับได้โดยผู้โจมตีเนื่องจากการจัดเก็บไว้ในที่ชัดเจน
แน่นอนมีข้อโต้แย้งสำหรับการใช้งาน แต่มีความสมดุลที่ดีมากเมื่อมันมาถึงเขตข้อมูลแบบฟอร์มที่ควรจะปิดใช้งานการเติมข้อความอัตโนมัติและที่ไม่ควร
สามตัวเลือก: ครั้งแรก:
<input type='text' autocomplete='off' />
ประการที่สอง:
<form action='' autocomplete='off'>
ที่สาม (รหัสจาวาสคริปต์):
$('input').attr('autocomplete', 'off');
บนที่เกี่ยวข้องหรือที่จริงแล้วในบันทึกตรงข้ามอย่างสมบูรณ์ -
"หากคุณเป็นผู้ใช้ของแบบฟอร์มข้างต้นและต้องการเปิดใช้งานฟังก์ชั่นเติมข้อความอัตโนมัติอีกครั้งให้ใช้ bookmarklet 'จำรหัสผ่าน' จากหน้า bookmarklet นี้มันจะลบ
autocomplete="off"
คุณสมบัติทั้งหมดจากทุกรูปแบบในหน้าต่อไปสู้สู้ต่อไป! "
จริง ๆ แล้วเราใช้sasbของสำหรับเว็บไซต์เดียว มันเป็นเว็บแอพพลิเคชั่นซอฟต์แวร์ทางการแพทย์เพื่อเปิดสำนักงาน อย่างไรก็ตามลูกค้าของเราหลายคนเป็นศัลยแพทย์ที่ใช้เวิร์คสเตชั่นที่แตกต่างกันมากมายรวมถึงอาคารผู้โดยสารกึ่งสาธารณะ ดังนั้นพวกเขาต้องการตรวจสอบให้แน่ใจว่าแพทย์ที่ไม่เข้าใจความหมายของรหัสผ่านที่บันทึกอัตโนมัติหรือไม่ให้ความสนใจไม่สามารถเข้าถึงข้อมูลการเข้าสู่ระบบของพวกเขาได้โดยไม่ตั้งใจ แน่นอนว่าก่อนหน้านี้ความคิดในการท่องเว็บแบบส่วนตัวที่เริ่มให้ความสำคัญใน IE8, FF3.1 เป็นต้นดังนั้นแพทย์จำนวนมากจึงถูกบังคับให้ใช้เบราว์เซอร์ของโรงเรียนเก่าในโรงพยาบาลด้วยเทคโนโลยีที่ไม่เปลี่ยนแปลง
ดังนั้นเราจึงมีหน้าเข้าสู่ระบบสร้างชื่อฟิลด์สุ่มที่จะใช้งานได้เฉพาะสำหรับโพสต์นั้น ใช่มันสะดวกน้อยกว่า แต่มันกระทบผู้ใช้มากกว่าหัวเกี่ยวกับการไม่จัดเก็บข้อมูลการล็อกอินบนเครื่องสาธารณะ
ไม่มีวิธีแก้ปัญหาใดที่เหมาะกับฉันในการสนทนานี้
ในที่สุดฉันก็พบโซลูชัน HTMLที่ไม่ต้องใช้Javascriptทำงานในเบราว์เซอร์สมัยใหม่ (ยกเว้น IE ต้องมีอย่างน้อย 1 catch ใช่ไหม?) และไม่ต้องการให้คุณปิดใช้งานการเติมข้อความอัตโนมัติสำหรับทั้งฟอร์ม
เพียงปิดการเติมข้อความอัตโนมัติในform
แล้วเปิดใช้สำหรับสิ่งที่input
คุณต้องการให้ทำงานภายในแบบฟอร์ม ตัวอย่างเช่น:
<form autocomplete="off">
<!-- these inputs will not allow autocomplete and chrome
won't highlight them yellow! -->
<input name="username" />
<input name="password" type="password" />
<!-- this field will allow autocomplete to work even
though we've disabled it on the form -->
<input name="another_field" autocomplete="on" />
</form>
autocomplete="off"
ชุดเพียง มีเหตุผลที่ดีมากสำหรับการทำเช่นนี้: คุณต้องการให้ฟังก์ชันการเติมข้อความอัตโนมัติของคุณเอง!
ฉันได้ลองวิธีแก้ปัญหาที่ไม่มีที่สิ้นสุดแล้วฉันพบสิ่งนี้:
แทนที่จะautocomplete="off"
ใช้เพียงแค่autocomplete="false"
เรียบง่ายเช่นนั้นและใช้งานได้อย่างมีเสน่ห์ใน Google Chrome เช่นกัน!
มันใช้งานได้สำหรับฉัน
<input name="pass" type="password" autocomplete="new-password" />
นอกจากนี้เรายังสามารถใช้กลยุทธ์นี้ในการควบคุมอื่น ๆ เช่นข้อความเลือก ฯลฯ
ฉันคิดว่าautocomplete=off
รองรับ HTML 5
ถามตัวเองว่าทำไมคุณถึงต้องการทำสิ่งนี้ - มันอาจจะสมเหตุสมผลในบางสถานการณ์ แต่อย่าทำเพื่อผลประโยชน์เท่านั้น
สะดวกสำหรับผู้ใช้น้อยกว่าและไม่ใช่แม้แต่ปัญหาด้านความปลอดภัยใน OS X (พูดถึงโดย Soren ด้านล่าง) หากคุณกำลังกังวลเกี่ยวกับคนที่มีรหัสผ่านของตนที่ถูกขโมยจากระยะไกล - autcomplete=off
คนตัดไม้การกดแป้นพิมพ์ยังคงสามารถทำมันได้แม้ว่าการใช้งานแอปของคุณ
ในฐานะผู้ใช้ที่เลือกให้เบราว์เซอร์จดจำข้อมูลของฉัน (ส่วนใหญ่) ฉันจะพบว่ามันน่ารำคาญหากเว็บไซต์ของคุณจำไม่ได้ว่าเป็นของฉัน
นอกจาก
autocomplete="off"
ใช้
readonly onfocus="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');" >
หวังว่านี่จะช่วยได้
$(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
onfocusout="this.setAttribute('readonly', 'readonly');"
ทางออกที่ดีที่สุด:
ป้องกันชื่อผู้ใช้เติมข้อความอัตโนมัติ (หรืออีเมล) และรหัสผ่าน:
<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">
ป้องกันการเติมข้อความอัตโนมัติในฟิลด์:
<input type="text" name="field" autocomplete="nope">
คำอธิบาย:
autocomplete
ยังคงทำงานใน<input>
, autocomplete="off"
ไม่ทำงาน แต่คุณสามารถเปลี่ยนเป็นสตริงสุ่มเช่นoff
nope
ทำงานใน:
Chrome: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 และ 64
Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 และ 57
autocomplete
แอตทริบิวต์แล้วและยังคงแสดงรายการก่อนหน้านี้เป็นคำแนะนำการเติมข้อความอัตโนมัติภายใต้อินพุต
autocomplete
จะตั้งค่าไว้ที่ใดฉันยังคงได้รับข้อเสนอแนะแบบเลื่อนลงตามค่าที่ป้อนก่อนหน้านี้ ไม่เป็นไรบนเดสก์ท็อป แต่ไม่ใช่สำหรับ Chrome Android
สายไปที่เกมเล็กน้อย ... แต่ฉันเพิ่งพบปัญหานี้และพยายามล้มเหลวหลายครั้ง แต่สิ่งนี้เหมาะสำหรับฉันที่พบในMDN
ในบางกรณีเบราว์เซอร์จะยังคงแนะนำค่าการเติมข้อความอัตโนมัติแม้ว่าแอตทริบิวต์การเติมข้อความอัตโนมัติจะถูกตั้งค่าเป็นปิด พฤติกรรมที่ไม่คาดคิดนี้สามารถทำให้ผู้พัฒนาสับสนได้ เคล็ดลับในการบังคับให้การไม่สำเร็จคือการกำหนดสตริงแบบสุ่มให้กับแอตทริบิวต์ดังนี้:
autocomplete="nope"
กำลังเพิ่ม
autocomplete="off"
ไปที่แท็กฟอร์มจะปิดใช้งานการเติมข้อความอัตโนมัติของเบราว์เซอร์ (สิ่งที่เคยพิมพ์ลงในฟิลด์นั้น) จากทั้งหมด input
ฟิลด์ภายในฟอร์มนั้น
ทดสอบเมื่อ:
การเพิ่มautocomplete="off"
ไม่ใช่การตัด
type="search"
เปลี่ยนประเภทการป้อนข้อมูลแอตทริบิวต์
Google ไม่ใช้การป้อนอัตโนมัติกับอินพุตด้วยการค้นหาประเภทหนึ่ง
ใช้ชื่อและรหัสที่ไม่เป็นมาตรฐานสำหรับฟิลด์ดังนั้นแทนที่จะเป็น "name" มี "name_" เบราว์เซอร์จะไม่เห็นว่าเป็นฟิลด์ชื่อ ส่วนที่ดีที่สุดเกี่ยวกับเรื่องนี้คือคุณสามารถทำสิ่งนี้กับบางฟิลด์ แต่ไม่ใช่ทั้งหมดและมันจะเติมข้อมูลให้บางส่วนโดยอัตโนมัติ แต่ไม่ใช่ทั้งหมด
เพื่อหลีกเลี่ยง XHTML ที่ไม่ถูกต้องคุณสามารถตั้งค่าคุณลักษณะนี้โดยใช้ javascript ตัวอย่างการใช้ jQuery:
<input type="text" class="noAutoComplete" ... />
$(function() {
$('.noAutoComplete').attr('autocomplete', 'off');
});
ปัญหาคือผู้ใช้ที่ไม่มี javascript จะได้รับฟังก์ชันการเติมข้อความอัตโนมัติ
ลองสิ่งเหล่านี้ด้วยหากautocomplete="off"
ไม่ได้ผล:
autocorrect="off" autocapitalize="off" autocomplete="off"
ฉันไม่อยากเชื่อเลยว่านี่จะยังคงเป็นปัญหาอยู่นานหลังจากมีการรายงานแล้ว การแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉันเนื่องจากดูเหมือนว่าซาฟารีจะรู้ว่าองค์ประกอบไม่แสดงหรือปิดหน้าจออย่างไรก็ตามสิ่งต่อไปนี้ใช้งานได้สำหรับฉัน:
<div style="height:0px; overflow:hidden; ">
Username <input type="text" name="fake_safari_username" >
Password <input type="password" name="fake_safari_password">
</div>
หวังว่ามีประโยชน์สำหรับใครบางคน!
ดังนั้นนี่คือ:
function turnOnPasswordStyle() {
$('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">
นี่เป็นปัญหาด้านความปลอดภัยที่เบราว์เซอร์ไม่สนใจในขณะนี้ เบราว์เซอร์ระบุและจัดเก็บเนื้อหาโดยใช้ชื่ออินพุตแม้ว่าผู้พัฒนาจะพิจารณาว่าข้อมูลนั้นมีความละเอียดอ่อนและไม่ควรจัดเก็บ การป้อนชื่อที่แตกต่างกันระหว่าง 2 คำขอจะช่วยแก้ปัญหาได้ (แต่จะยังคงบันทึกไว้ในแคชของเบราว์เซอร์และจะเพิ่มแคชของเบราว์เซอร์ด้วย) ขอให้ผู้ใช้เปิดใช้งานหรือปิดการใช้งานตัวเลือกในการตั้งค่าเบราว์เซอร์ไม่ใช่ทางออกที่ดี ปัญหาสามารถแก้ไขได้ในแบ็กเอนด์
นี่คือการแก้ไขของฉัน วิธีการที่ฉันได้นำไปใช้ในกรอบงานของฉัน องค์ประกอบการเติมข้อความอัตโนมัติทั้งหมดถูกสร้างขึ้นด้วยอินพุตที่ซ่อนอยู่เช่นนี้
<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
<input type="text" name="<? echo $r; ?>" />
<input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
<input type="submit" name="submit" value="submit" />
</form>
เซิร์ฟเวอร์ประมวลผลตัวแปรโพสต์เช่นนี้:
foreach ($_POST as $key => $val)
{
if(preg_match('#^__autocomplete_fix_#', $key) === 1){
$n = substr($key, 19);
if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
}
}
ค่าสามารถเข้าถึงได้ตามปกติ
var_dump($_POST['username']);
และเบราว์เซอร์จะไม่สามารถแนะนำข้อมูลจากคำขอก่อนหน้านี้หรือจากผู้ใช้ก่อนหน้านี้
ทุกอย่างใช้งานได้อย่างมีเสน่ห์ถึงแม้ว่าเบราว์เซอร์จะอัปเดตก็ตามต้องการละเว้นการเติมข้อความอัตโนมัติหรือไม่ นั่นเป็นวิธีที่ดีที่สุดในการแก้ไขปัญหาสำหรับฉัน
ไม่มีการแฮ็กที่กล่าวถึงที่นี่ทำงานได้สำหรับฉันใน Chrome มีการอภิปรายปัญหาที่นี่: https://code.google.com/p/chromium/issues/detail?id=468153#c41
การเพิ่มสิ่งนี้ภายใน<form>
ผลงาน (อย่างน้อยตอนนี้):
<div style="display: none;">
<input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>
maxlength="0"
จะป้องกันไม่ให้ firefox กรอกข้อมูลอัตโนมัติ
คุณอาจใช้ในการป้อนข้อมูล
ตัวอย่างเช่น;
<input type=text name="test" autocomplete="off" />