การลงทะเบียน PHP: สร้างรหัสผ่านอัตโนมัติหรือให้ผู้ใช้เลือก

ในระหว่างการลงทะเบียน ฉันกำลังถกเถียงกันว่าควรตั้งรหัสผ่านผู้ใช้อย่างไร:

  • ให้ผู้ใช้เลือกมัน หากฉันทำเช่นนี้ ฉันจะต้องบังคับใช้มาตรฐานบางอย่าง (ความยาว จุดอ่อน อาจเกี่ยวข้องกับ regexes ฯลฯ) ปกติคุณทำอะไรเมื่อคุณเลือกวิธีนี้ และเพราะเหตุใด มีห้องสมุดสำหรับ PHP สำหรับสิ่งนี้หรือไม่?

  • สร้างรหัสผ่านสำหรับผู้ใช้โดยอัตโนมัติและส่งอีเมลไปยังพวกเขาไปยังอีเมลที่พวกเขาให้ไว้ พวกเขาไม่สามารถเข้าสู่ระบบโดยไม่ได้รับรหัสผ่าน ดังนั้นจึงเป็นการยืนยันอีเมลด้วย ปัญหาคือรหัสผ่านอาจยากเกินไปสำหรับผู้ใช้ที่จะจำ ถ้าฉันอนุญาตให้พวกเขาเปลี่ยนเป็นสิ่งที่ง่ายกว่า นั่นจะขัดต่อจุดประสงค์ที่ฉันเลือกมันให้พวกเขาตั้งแต่แรก ฉันยังกังวลเกี่ยวกับการส่งรหัสผ่าน (เป็นรหัสผ่านธรรมดาที่ไม่ได้แฮช) ในอีเมล

ฉันกำลังโน้มตัวไปทางที่สอง แต่ต้องการคำตอบที่มีข้อมูลมากกว่านี้ก่อนที่จะเลือก อาจมีบางสิ่งที่ฉันไม่สนใจ เช่น ความสะดวกของผู้ใช้และปัญหาทางเทคนิคอื่นๆ เช่นกัน คุณทำงานอะไร?

แก้ไข: จากคำตอบ ฉันจะเลือกตัวเลือกแรกโดยให้ผู้ใช้เลือก คำถามของฉันก็คือ ความยากของรหัสผ่าน/ความยาว/อื่นๆ ฉันควรจะเรียกร้องและฉันจะบังคับใช้ได้อย่างไร? มีไลบรารี PHP สำหรับสิ่งนั้นหรือไม่


person Chris    schedule 12.10.2009    source แหล่งที่มา
comment
การมีรหัสผ่านที่ซับซ้อนจะไม่เพิ่มความปลอดภัยของคุณ เนื่องจากผู้ใช้ของคุณจะคัดลอกและวาง หรือจะมีโน้ตไว้บนโต๊ะพร้อมรหัสผ่านของคุณ...   -  person jantimon    schedule 12.10.2009
comment
@Ghommey: แม้ว่ารหัสผ่านที่ซับซ้อนจะไม่เพิ่มความปลอดภัยจากผู้ใช้ แต่จะเพิ่มความปลอดภัยจากเครือข่าย ซึ่งหมายความว่า ตัวอย่างเช่น การโจมตีด้วยพจนานุกรมที่มุ่งเป้าไปที่ไซต์จะไม่ทำงาน แม้ว่านี่อาจเป็นประเด็นที่ค่อนข้างเป็นทฤษฎีก็ตาม   -  person Ilari Kajaste    schedule 13.10.2009


คำตอบ (5)


ฉันคิดว่ามีคำตอบเดียวสำหรับเรื่องนี้ ให้ผู้ใช้สร้างรหัสผ่านของตัวเอง! อย่างอื่นคือความเกียจคร้านของโปรแกรมเมอร์ การออกแบบการโต้ตอบที่ไม่ดี และความเป็นมิตรต่อลูกค้า (IMO)

ตอนนี้ฉันเห็นข้อยกเว้นบางประการ กล่าวคือ ถ้าเป็นระบบอินทราเน็ตที่มีความสำคัญต่ำบางประเภทที่มีผู้ใช้เพียงไม่กี่คนที่เห็นด้วยกับสิ่งนี้ หรือหากเป็นบัญชีแบบครั้งเดียวที่ผู้คนไม่จำเป็นต้องเข้าสู่ระบบในภายหลัง .

คุณต้องแฮชรหัสผ่านของคุณอยู่ดี แม้ว่าคุณจะสร้างรหัสผ่านขึ้นมาเองก็ตาม สิ่งที่คุณต้องเพิ่มคือกฎการตรวจสอบความถูกต้องบางประการในการส่งครั้งแรกของผู้ใช้ นั่นอาจทำได้ง่ายกว่าเครื่องมือสร้างรหัสผ่านที่ดีเสียอีก

ความแรงของรหัสผ่าน

ลิงก์ไปยังโพสต์เกี่ยวกับ 10 มาตรวัดความแรงของรหัสผ่าน

person markus    schedule 12.10.2009

คุณสามารถแนะนำรหัสผ่านแบบสุ่มได้เสมอหากจินตนาการของผู้ใช้ว่างเปล่า แน่นอนคุณแน่ใจว่ารหัสผ่านที่สร้างขึ้นนั้น "รัดกุม" (ตามกฎของคุณ) และคุณจะมีปุ่ม "แนะนำรหัสผ่านใหม่"

ผู้ใช้ที่ไม่ต้องการรหัสผ่านที่ซับซ้อนหรือรหัสผ่านเฉพาะสำหรับไซต์ต่างๆ มักจะเปลี่ยนเป็นรหัสผ่านที่พวกเขาเลือกเสมอหากคุณอนุญาตตั้งแต่แรก ในกรณีนี้ คุณทำให้พวกเขาใจร้อนเพราะคุณ:

  • ส่งรหัสผ่าน/รหัสเปิดใช้งานที่ถูกต้องทางอีเมล
  • ทำให้พวกเขาตรวจสอบกล่องจดหมายอีเมล (และอาจรอให้อีเมลของคุณมาถึง)
  • ทำให้พวกเขาเปลี่ยนรหัสผ่าน

คำแนะนำสุดท้าย: แทนที่จะบังคับ; ส่งเสริมและเน้นย้ำถึงความสำคัญของรหัสผ่านขนาด เครื่องวัดความแข็งแกร่งของรหัสผ่านเป็นหนึ่งในวิธีที่สนุกในการดำเนินการนี้

person chelmertz    schedule 12.10.2009
comment
ข้อดี นั่นจะเป็นโซลูชั่นที่สมบูรณ์แบบจากมุมมองของผู้ใช้ - person markus; 12.10.2009

ความแรงของรหัสผ่าน PHP หน้านี้มีโค้ดพื้นฐานบางส่วนที่เป็นโค้ดที่สะอาด ดังนั้นคุณจึงควรปรับเปลี่ยนให้เหมาะกับความต้องการของคุณได้ อ้างอิงจากโค้ดจาก: http://www.tutorialtoday.com/read_tutorial/113/

การทดสอบตัวพิมพ์เล็ก / ตัวพิมพ์ใหญ่ / ตัวเลข / ไม่มีคำ / อย่างน้อย 8 ตัวอักษร หากตรงตามเงื่อนไขทั้งหมด ความแรงจะเท่ากับ 5

$password = **HOW YOU GET THE PASS***($_POST['pass'])????; 
    $strength = 0; 
    // letters (lowercase) 
    if(preg_match("/([a-z]+)/", $password)) { 
        $strength++; 
    } 
    // letters (uppercase) 
    if(preg_match("/([A-Z]+)/", $password)) { 
        $strength++; 
    } 
    // numbers 
    if(preg_match("/([0-9]+)/", $password)) { 
        $strength++; 
    } 
    // non word characters 
    if(preg_match("/(W+)/", $password)) { 
        $strength++; 
    } 
   // longer than 8 characters
    if(strlen($password) > 8)) { 
        $strength++; 
    } 


    if ($strength >= 5)
      print "woo hoo";
    else
      print "bah";
person easement    schedule 12.10.2009

นี่คือรหัสเพื่อสร้างรหัสผ่านพร้อมค่าตัวอักษรและตัวเลข

function genRandomString() {
        $length = 8;
        $characters = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $string = "";    

        for ($p = 0; $p < $length; $p++) {
            $string .= $characters[rand(0, strlen($characters))];
        }

        return $string;
    }

คุณทำสิ่งต่อไปนี้

$mailPass =genRandomString();
person Community    schedule 01.02.2012

โดยส่วนตัวแล้วฉันพบว่ามันน่ารำคาญมากเมื่อรหัสผ่านการเข้าถึงถูกส่งทางอีเมลในรูปแบบข้อความธรรมดา ยิ่งไปกว่านั้น ผู้ใช้จะสามารถเปลี่ยนรหัสผ่านได้ไม่ว่าในกรณีใด (ฉันหวังว่า) และจะเปลี่ยนเป็นอย่างอื่นนอกเหนือจากที่คุณสร้างขึ้น ดังนั้น ทำไมไม่อนุญาตให้ผู้ใช้เลือกรหัสผ่านที่ต้องการในเวลาลงทะเบียน? แน่นอนว่า จำเป็นต้องระบุรหัสผ่านที่ไม่รัดกุม (และอาจไม่อนุญาตให้ใช้งานโดยรวมด้วยซ้ำ) แต่คุณไม่จำเป็นต้องเขียนโค้ดเป็นหัวใจสำคัญของการตรวจสอบนี้ เนื่องจากมีไลบรารี js สำเร็จรูปจำนวนมากที่สามารถทำได้ สำหรับคุณ.

person clops    schedule 12.10.2009
comment
โดยทั่วไปแล้ว ฉันต่อต้านรหัสผ่านตามแนวคิดโดยรวม พิจารณาใช้ OpenID (เช่นเดียวกับไซต์นี้) ใช้แฮชลิงก์ที่ส่งทางอีเมล - person clops; 12.10.2009
comment
openID ใช้ได้ แต่คุณต้องมีรหัสผ่านสำหรับ openID ของคุณ :) - person markus; 12.10.2009
comment
@clops: OpenID นั้นยอดเยี่ยมมาก ... เว้นแต่ว่าคุณจะทำงานร่วมกับบุคคลทั่วไปแทนที่จะเป็นผู้ใช้ StackOverflow :) - person Ilari Kajaste; 13.10.2009