ทำไมมันไม่ดีที่จะมีรหัสผ่านผู้ใช้ mysql อ่อนแอ


23

ฉันได้รับการโต้เถียงกับการปรับแต่งของ "คุณไม่ต้องการรหัสผ่านผู้ใช้ mysql ที่แข็งแกร่งเพราะเพื่อที่จะใช้มันพวกเขาจะสามารถเข้าถึงเซิร์ฟเวอร์ของคุณได้แล้ว" เรากำลังพูดถึงรหัสผ่าน 4 หลักซึ่งเป็นคำในพจนานุกรมภาษาอังกฤษมาตรฐานในเว็บไซต์ธุรกิจออนไลน์

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


7
ดูเหมือนว่าหนึ่งในการroot:rootเข้าสู่ระบบเหล่านี้

3
รหัสผ่านสี่หลัก? ชอบ1337ไหม
Gumbo

คำตอบ:


39

ใครก็ตามที่ทำให้เรื่องนี้ดูเหมือนจะพูดว่า "เมื่อมีใครบางคนเข้ามาในประตูคุณอาจทำให้พวกเขาเข้าถึงได้อย่างสมบูรณ์" ด้วยเหตุผลดังกล่าวไฟร์วอลล์จึงปฏิเสธความต้องการรหัสผ่านทั้งหมดในเครือข่ายภายในของคุณ

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


13
'Defense in Depth' เป็นคำขวัญประจำวัน
Scott Pack

3
เพียงแค่ทราบว่าเมื่อพวกเขาสามารถเข้าถึงระบบไฟล์ของคุณพวกเขาจะสามารถเข้าถึงไฟล์ PHP หรือไฟล์กำหนดค่าของคุณที่จัดเก็บรหัสผ่านของคุณไว้ได้เว้นแต่คุณจะตั้งค่าความปลอดภัยเพิ่มเติมสำหรับสิ่งนี้ .
Lotus Notes

2
@Lotus สมมติว่าเซิร์ฟเวอร์ PHP และ MySQL เป็นเครื่องเดียวกัน
meagar

2
@Lotus Notes คุณไม่ควรใช้ผู้ใช้รูทในแอพพลิเคชั่น แอปพลิเคชั่นที่ได้รับการออกแบบมาเป็นอย่างดีจะอนุญาตการเข้าถึงที่จำเป็นเท่านั้น ส่วนใหญ่เวลานี้รวมถึงการเข้าถึงข้อมูล แต่ไม่เสมอไปของข้อมูลทั้งหมดและในบางกรณีอาจเป็นแบบอ่านอย่างเดียว
bradlis7

1
@Lotus หมายเหตุ: โฮสต์ที่ใช้ร่วมกันจำนวนมากใช้ suPHP ซึ่งเป็นผลให้ chmod-ing 660 ของไฟล์ PHP ที่ละเอียดอ่อน
webbiedave

14

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


ฉันรอให้ใครซักคนมาพร้อมกับกุญแจ / การเปรียบเทียบประตู: |
meagar

แต่กุญแจที่แตกต่างกันสำหรับประตูทุกบานในบ้านของคุณอาจลงน้ำ คุณวาดเส้นที่ไหน
Dan

4
@ ด่าน: แต่ในสถานที่ปลอดภัยคุณคาดว่าจะมีกุญแจที่แตกต่างกันสำหรับทุกประตูใช่มั้ย ในบ้านสำหรับครอบครัวเดี่ยว - คุณคาดหวังว่าการล็อกทั้งหมดจะใช้รหัสเดียวกัน แต่ในบ้านที่ใช้ร่วมกัน (เช่นเดียวกับเพื่อนร่วมห้อง) มันจะขึ้นอยู่กับปรัชญาของครัวเรือน: ไม่ว่าจะเป็นประตูที่ปลดล็อค (อาจเป็นประตูที่ใช้รหัสเดียวกันทั้งหมด) หรือกุญแจที่แตกต่างกันต่อเพื่อนร่วมห้อง
wallyk

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

6

มันขึ้นอยู่กับการตั้งค่าเซิร์ฟเวอร์ MySQL ของคุณเป็นอย่างมาก หากยอมรับเฉพาะคำขอนอกบ้าน (127.0.0.1) ip นั่นจะทำให้มันปลอดภัยขึ้นในระดับปานกลาง

รับสถานการณ์ที่คุณอนุญาต IP ระยะไกลมันกลายเป็นดีลที่ใหญ่กว่ามาก

นอกจากนั้นมันเป็นเรื่องดีเสมอที่จะมีความปลอดภัยสูงในกรณีที่มีการบุกรุก - ดีกว่าที่พวกเขาจะเดินออกไปให้น้อยที่สุดเท่าที่จะทำได้


6

มีล็อคในกล่องเงินสดย่อยในการบัญชีหรือไม่? ถ้าเป็นเช่นนั้นทำไม อาคารไม่ได้มีความปลอดภัยทางกายภาพหรือไม่


5

คุณไม่ต้องการรหัสผ่านผู้ใช้ mysql ที่แข็งแกร่งเพราะเพื่อที่จะใช้มันพวกเขาต้องการเข้าถึงเซิร์ฟเวอร์ของคุณแล้ว

สิ่งนี้ไม่เป็นความจริงเนื่องจาก mysql สามารถใช้ในสภาพแวดล้อมข้ามไคลเอนต์ - เซิร์ฟเวอร์ของสภาพแวดล้อมและโดยค่าเริ่มต้นสิ่งเดียวที่คุณต้องมีคือ user / pass เพื่อเข้าถึงฐานข้อมูล (offcourse ที่เปิดพอร์ต 3306 และเซิร์ฟเวอร์สาธารณะปรากฏ )


5

แน่นอนมันอาจเป็นวิธีอื่น: หากพวกเขาสามารถเข้าถึง mysql พวกเขาสามารถเข้าถึงระบบปฏิบัติการเซิร์ฟเวอร์ได้

  1. MySQL LOAD_FILE และ SELECT ... INTO OUTFILE แบบสอบถามช่วยให้ผู้ใช้ mysql สามารถอ่านและเขียนไฟล์บนระบบไฟล์พื้นฐาน ไฟล์ใด ๆ ที่ผู้ใช้ mysql สามารถเข้าถึงได้เช่นกัน (MySQL ของคุณทำงานเป็นรูทหรือไม่) หากอยู่ภายใต้ linux / UNIX เพียงแค่เลือก SELECT LOAD_FILE ('/ etc / passwd') และดูพวกเขายิ้ม หาก mysqld ทำงานเป็นรูทคุณสามารถลอง SELECT LOAD_FILE ('/ etc / shadow') และดูการดูแลระบบของคุณ
  2. หลายครั้งภายใต้ linux ผู้ใช้ mysql "root" มีรหัสผ่านเดียวกันกับผู้ใช้ "mysql" ของเซิร์ฟเวอร์ (หนึ่งที่ทำงาน mysqld) ถ้ารหัสผ่านนี้เป็นเรื่องเล็กน้อย (หรือหาได้โดยเครื่องมืออัตโนมัติเช่นเมดูซ่า / ไฮดรา) คุณก็สามารถ SSH / telnet ไปยังเซิร์ฟเวอร์ฐานข้อมูลได้โดยตรง

4

หากใครบางคนเข้าถึงรูทไปยังเซิร์ฟเวอร์ของคุณพวกเขาก็ไม่จำเป็นต้องใช้รหัสผ่าน MySQL แต่หากพวกเขาสามารถเรียกใช้แอปบนเซิร์ฟเวอร์ของคุณในฐานะผู้ใช้ที่ไม่ใช่รูทและไม่ใช่เว็บได้รหัสผ่าน MySQL ที่แข็งแกร่งยังคงสามารถบันทึกข้อมูลของคุณได้ แต่ใช่แฮ็คส่วนใหญ่มาจากเว็บซึ่งหมายความว่าแฮ็กเกอร์จะเข้าถึงบัญชีเว็บของคุณและสามารถดึงรหัสผ่าน DB จากไฟล์ PHP ได้

ทั้งหมดนี้สมมติว่าเซิร์ฟเวอร์ MySQL ของคุณไม่ยอมรับการเชื่อมต่อจากที่ใดก็ได้ยกเว้น localhost ถ้าเป็นเช่นนั้นคุณจะต้องมี PW ที่แข็งแกร่ง


4

สิ่งที่ดูเหมือนถูกมองข้ามที่นี่คือคุณเชื่อใจผู้ใช้ของคุณในเครือข่ายที่เชื่อถือได้หรือไม่?

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

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

รหัสผ่านที่คาดเดายากทำง่ายมากและมีเครื่องมือการจัดการรหัสผ่านมากมายที่จะทำให้การรักษารหัสผ่านนั้นปลอดภัยง่ายดังนั้นจึงไม่มีข้อแก้ตัวใด ๆ ที่จะไม่ทำ


สิ่งนี้คือคุณไม่ควรอนุญาตการเชื่อมต่อระยะไกลใน MySQL หรือถ้าคุณต้องการให้ระบุlocalhost/ 127.0.0.1เป็นโฮสต์ ด้วยวิธีนี้ไม่มีใครสามารถเข้าถึงฐานข้อมูลภายนอก (แม้จะอยู่ในเครือข่ายเดียวกัน)
Chazy Chaz

2

เอ๊ะ หากเซิร์ฟเวอร์ของคุณถูกล็อคด้วย IP และผู้ใช้ของคุณถูก จำกัด ไว้ที่ SELECT บนชุดของตารางที่คุณไม่สนใจข้อมูลมันไม่ใช่เรื่องใหญ่โตนัก

ในทางกลับกันฉันตั้งรหัสผ่าน MySQL ของฉันโดยการตีบนแป้นพิมพ์เป็นเวลาหนึ่งนาทีและคัดลอกการวางคำพูดเหลวไหลที่เกิดขึ้นลงในไฟล์ที่มีการป้องกันซึ่งฉันอ้างอิงในรหัสของฉันเมื่อใดก็ตามที่ฉันต้องการเข้าสู่ระบบ

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


2

ข้อมูลบัญชี / การเข้าถึง mySQLs จะถูกเก็บไว้ในไฟล์แยกต่างหากจากฐานข้อมูลจริง ดังนั้นคุณสามารถลากและวางไฟล์ที่แตกต่างกันเข้าไปแทนที่ ด้วย mySQL หากพวกเขามีการเขียนการเข้าถึงส่วนที่เกี่ยวข้องของระบบไฟล์ของคุณเกมจะจบลง


2

เนื่องจากความต้องการเปลี่ยนแปลง ...

ดังนั้นเซิร์ฟเวอร์ในปัจจุบันที่ จำกัด การยอมรับการเชื่อมต่อ MySQL กับเครื่องท้องถิ่นเท่านั้นอาจจะเปิดในวันพรุ่งนี้เพื่อให้เครื่องมือภายนอกสามารถใช้ในการจัดการฐานข้อมูล บุคคลที่ทำการตั้งค่านี้อาจไม่ทราบว่ามีการใช้รหัสผ่านที่อ่อนแออย่างยิ่ง

หากผู้ใช้ของคุณไม่สะดวกโดยต้องจำรหัสผ่านที่ดีแข็งแรง (เช่น: ยาวและสุ่ม) ให้พิจารณาว่ามันแข็งแกร่งมากแล้วเก็บไว้ใน.my.cnf- สะดวกยิ่งกว่าการใช้รหัสผ่านที่อ่อนแอซึ่งพวกเขาต้องพิมพ์ แน่นอนว่ายังมีผลกระทบด้านความปลอดภัยด้วยเช่นกัน แต่คุณจะต้องเก็บรหัสผ่านของคุณไว้ที่อื่นเช่นแอปพลิเคชันที่เข้าถึงได้ดังนั้นคุณจึงได้รักษารหัสผ่านไว้แล้ว

แต่อ่านสิ่งที่ @meagar พูดด้วย


1

หลักฐานที่ว่าพวกเขาจะมีสิทธิ์เข้าถึงนั้นไม่เป็นความจริง อย่างไรก็ตามหากพวกเขามีการเข้าถึงและพวกเขามีบัญชีที่ไม่มีสิทธิพิเศษพวกเขายังสามารถแฮ็ครหัสผ่าน mysql ได้อย่างง่ายดาย

นอกจากนี้หากเซิร์ฟเวอร์เป็นเซิร์ฟเวอร์ที่ใช้งานจริงกว่าที่คุณโฆษณาด้วยตัวคุณเองบนอินเทอร์เน็ต นั่นหมายความว่าในบางครั้งใครบางคนจะลองโจมตีเดรัจฉานบังคับบนเซิร์ฟเวอร์นั้นรวมถึง mysql ทั้งพอร์ตและบัญชีผู้ใช้

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

รหัสผ่าน 4 ตัวสามารถแฮ็คได้ภายในไม่กี่นาทีบนคอมพิวเตอร์ราคาถูก

ฉันอาจจะทำซ้ำสิ่งที่คนอื่นพูด แต่ยิ่งคุณมีกระสุนสำหรับผู้จัดการของคุณมากเท่าไหร่ก็ยิ่งดีเท่านั้น


1

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

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

ผู้ดูแลระบบที่ดีทำให้สถานการณ์เลวร้ายที่สุดเป็นอันดับแรกจนถึงจุดที่หวาดระแวง


1

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


หากเซิร์ฟเวอร์ MySQL ถูกโจมตีผู้ใช้และรหัสผ่านจะไร้ประโยชน์ ไฟล์ฐานข้อมูลไม่ได้เข้ารหัส ผู้ใช้ MySQL สำหรับแอพควรมี localhost / 127.0.0.1 เป็นโฮสต์เพื่อให้ไม่สามารถใช้จากระยะไกลหรือปิดการเชื่อมต่อระยะไกล
Chazy Chaz

1

มันง่ายมากที่จะปลอมตัวเป็นคนอื่นใน mysql ได้รับรหัสผู้ใช้ที่ไม่มีรหัสผ่าน (การรักษาความปลอดภัยที่อ่อนแอที่สุด) mysql -u useridเพียงแค่การใช้งาน หากมีรหัสผ่านมันจะยากกว่านี้เล็กน้อย แต่รหัสผ่านที่อ่อนจะทำให้ง่ายขึ้น mysql -u rootหากรากมีรหัสผ่านไม่ฉันสามารถเข้าถึงราก ฉันสามารถทำอะไรก็ได้ในฐานข้อมูลที่รูทสามารถทำได้

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

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


0

ถ้าคุณไม่ได้โฮสต์ฐานข้อมูล MySQL ด้วยตัวคุณเอง แต่เป็นบริการโฮสติ้งและมีใครบางคนสามารถเข้าถึงที่อยู่ IP ของเซิร์ฟเวอร์ของคุณชื่อผู้ใช้และรหัสผ่านเป็นแนวป้องกันขั้นสุดท้ายของคุณ เป็นเรื่องดีเสมอที่จะมีชื่อผู้ใช้ / รหัสผ่านที่ปลอดภัย


Meh! หากใครบางคนสามารถเข้าถึงเซิร์ฟเวอร์จากนั้นพวกเขาสามารถอ่านผู้ใช้ / รหัสผ่านจากไฟล์ PHP ... โปรดอัปเดตหรือลบคำตอบนี้
Chazy Chaz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.