ก่อนอื่นดังที่หลายคนพูดไว้แล้วการรักษาข้อมูลรับรองแยกต่างหากจากสคริปต์เป็นสิ่งจำเป็น (นอกเหนือจากการรักษาความปลอดภัยที่เพิ่มขึ้นก็หมายความว่าคุณสามารถใช้สคริปต์เดียวกันซ้ำสำหรับระบบหลายระบบที่มีหนังสือรับรองที่แตกต่างกัน)
ประการที่สองคุณควรพิจารณาไม่เพียง แต่รักษาความปลอดภัยของข้อมูลประจำตัว แต่ยังส่งผลกระทบหาก / เมื่อข้อมูลประจำตัวเหล่านั้นถูกบุกรุก คุณไม่ควรมีรหัสผ่านเพียงรหัสเดียวสำหรับการเข้าถึงฐานข้อมูลทั้งหมดคุณควรมีข้อมูลรับรองที่แตกต่างกันพร้อมระดับการเข้าถึงที่แตกต่างกัน ตัวอย่างเช่นคุณสามารถมีผู้ใช้ DB หนึ่งรายที่มีความสามารถในการค้นหาในฐานข้อมูล - ผู้ใช้นั้นควรมีสิทธิ์เข้าถึงแบบอ่านอย่างเดียว ผู้ใช้รายอื่นอาจได้รับอนุญาตให้แทรกบันทึกใหม่ แต่ไม่สามารถลบบันทึกได้ อันที่สามอาจได้รับอนุญาตให้ลบบันทึก
นอกเหนือจากการ จำกัด สิทธิ์สำหรับแต่ละบัญชีคุณควรมีข้อ จำกัด ว่าแต่ละบัญชีสามารถใช้งานได้จากที่ใด ตัวอย่างเช่นบัญชีที่ใช้โดยเว็บเซิร์ฟเวอร์ของคุณไม่ควรได้รับอนุญาตให้เชื่อมต่อจากที่อยู่ IP อื่นใดนอกเหนือจากที่อยู่เว็บเซิร์ฟเวอร์ บัญชีที่มีสิทธิ์แบบเต็มไปยังฐานข้อมูลควรถูก จำกัด อย่างมากในแง่ของที่มันสามารถเชื่อมต่อจากและไม่ควรใช้นอกเหนือจากการโต้ตอบ พิจารณาการใช้ขั้นตอนการจัดเก็บในฐานข้อมูลเพื่อ จำกัด สิ่งที่สามารถทำได้ในแต่ละบัญชี
ข้อ จำกัด เหล่านี้จำเป็นต้องมีการใช้งานในฝั่ง DB- เซิร์ฟเวอร์ของระบบเพื่อให้แม้ว่าฝั่งไคลเอ็นต์จะถูกบุกรุกข้อ จำกัด ไม่สามารถเปลี่ยนแปลงได้ (และแน่นอนว่าเซิร์ฟเวอร์ DB จำเป็นต้องได้รับการปกป้องด้วยไฟร์วอลล์ ฯลฯ นอกเหนือจากการกำหนดค่า DB ... )
ในกรณีของบัญชี DB ที่อนุญาตให้เข้าถึงแบบอ่านอย่างเดียวอย่าง จำกัด และจากที่อยู่ IP เฉพาะคุณอาจไม่ต้องการข้อมูลประจำตัวเพิ่มเติมนอกเหนือจากนั้นขึ้นอยู่กับความไวของข้อมูลและความปลอดภัยของโฮสต์ของสคริปต์ กำลังถูกเรียกใช้จาก ตัวอย่างหนึ่งอาจเป็นแบบฟอร์มการค้นหาบนเว็บไซต์ของคุณซึ่งสามารถเรียกใช้กับผู้ใช้ที่ได้รับอนุญาตให้ใช้ขั้นตอนการจัดเก็บที่ดึงเฉพาะข้อมูลที่จะนำเสนอบนหน้าเว็บเท่านั้น ในกรณีนี้การเพิ่มรหัสผ่านไม่ได้มอบความปลอดภัยพิเศษใด ๆ เนื่องจากข้อมูลนั้นได้รับการเปิดเผยสู่สาธารณะแล้วและผู้ใช้ไม่สามารถเข้าถึงข้อมูลอื่น ๆ ที่จะมีความอ่อนไหวมากขึ้น
ตรวจสอบให้แน่ใจด้วยว่าการเชื่อมต่อกับฐานข้อมูลนั้นทำโดยใช้ TLS หรือใครก็ตามที่กำลังฟังบนเครือข่ายสามารถรับข้อมูลรับรองของคุณได้
สามพิจารณาประเภทของข้อมูลรับรองที่จะใช้ รหัสผ่านเป็นเพียงรูปแบบเดียวและไม่ใช่รหัสที่ปลอดภัยที่สุด คุณสามารถใช้คู่คีย์สาธารณะ / ส่วนตัวหรือ AD / PAM หรือรูปแบบอื่น ๆ ที่คล้ายกันแทน
ประการที่สี่พิจารณาเงื่อนไขที่สคริปต์จะทำงาน:
หากมีการทำงานแบบโต้ตอบคุณควรป้อนรหัสผ่านหรือรหัสผ่านไปยังรหัสส่วนตัวหรือรหัสส่วนตัวหรือเข้าสู่ระบบด้วยตั๋ว Kerberos ที่ถูกต้องเมื่อคุณเรียกใช้ - ในคำอื่น ๆ สคริปต์ควรได้รับ ข้อมูลรับรองโดยตรงจากคุณในเวลาที่คุณเรียกใช้แทนที่จะอ่านจากไฟล์บางไฟล์
หากเรียกใช้จากเว็บเซิร์ฟเวอร์ให้พิจารณาตั้งค่าข้อมูลรับรองในเวลาที่คุณเริ่มเว็บเซิร์ฟเวอร์ ตัวอย่างที่ดีที่นี่คือใบรับรอง SSL - มีใบรับรองสาธารณะและรหัสส่วนตัวและรหัสส่วนตัวมีรหัสผ่าน คุณสามารถเก็บรหัสส่วนตัวบนเว็บเซิร์ฟเวอร์ แต่คุณยังต้องป้อนรหัสผ่านเมื่อคุณเริ่ม Apache คุณสามารถมีข้อมูลประจำตัวของฮาร์ดแวร์บางประเภทเช่นการ์ดจริงหรือ HSM ที่สามารถลบหรือล็อคได้เมื่อเซิร์ฟเวอร์เริ่มทำงาน (แน่นอนข้อเสียของวิธีนี้คือเซิร์ฟเวอร์ไม่สามารถรีสตาร์ทด้วยตัวเองถ้ามีอะไรเกิดขึ้นฉันอยากจะเสี่ยงกับการที่ระบบของฉันถูกบุกรุก แต่ระยะทางของคุณอาจแตกต่างกัน ... )
หากสคริปต์ถูกเรียกใช้จาก cron นี่เป็นส่วนที่ยาก คุณไม่ต้องการให้ข้อมูลประจำตัวอยู่ในที่ใดก็ตามบนระบบของคุณที่ใครบางคนสามารถเข้าถึงได้ แต่คุณต้องการให้พวกเขาโกหกเพื่อให้สคริปต์ของคุณสามารถเข้าถึงได้ใช่ไหม ไม่ถูกต้องนัก พิจารณาสิ่งที่สคริปต์ทำ จำเป็นต้องใช้สิทธิ์ใดในฐานข้อมูล สามารถ จำกัด ได้หรือไม่เพื่อไม่ให้บุคคลนั้นเชื่อมต่อกับสิทธิ์เหล่านั้น? คุณสามารถเรียกใช้สคริปต์โดยตรงบนเซิร์ฟเวอร์ฐานข้อมูลที่ไม่มีใครเข้าถึงได้แทนที่จะเป็นเซิร์ฟเวอร์ที่มีผู้ใช้รายอื่นหรือไม่ หากด้วยเหตุผลบางอย่างที่ฉันนึกไม่ออกคุณต้องมีสคริปต์ที่ทำงานบนเซิร์ฟเวอร์ที่ไม่ปลอดภัยและต้องทำ สามารถทำสิ่งที่เป็นอันตราย / ทำลายล้างได้ ... ตอนนี้เป็นเวลาที่ดีในการคิดสถาปัตยกรรมของคุณใหม่
ประการที่ห้าหากคุณให้ความสำคัญกับความปลอดภัยของฐานข้อมูลของคุณคุณไม่ควรใช้สคริปต์เหล่านี้บนเซิร์ฟเวอร์ที่บุคคลอื่นสามารถเข้าถึง หากมีคนลงชื่อเข้าใช้ในระบบของคุณพวกเขาจะมีโอกาสได้รับข้อมูลรับรองของคุณ ตัวอย่างเช่นในกรณีของเว็บเซิร์ฟเวอร์ที่มีใบรับรอง SSL อย่างน้อยก็มีความเป็นไปได้ทางทฤษฎีของคนที่สามารถรับรูทและเข้าถึงพื้นที่หน่วยความจำของกระบวนการ httpd และแยกข้อมูลรับรองได้ มีการหาช่องโหว่อย่างน้อยหนึ่งครั้งในช่วงไม่นานนี้ซึ่งสามารถทำได้ผ่าน SSL ไม่ต้องการให้ผู้โจมตีลงชื่อเข้าใช้
ลองพิจารณาใช้ SELinux หรือ apparmor หรืออะไรก็ตามที่มีอยู่ในระบบของคุณเพื่อ จำกัด ผู้ใช้ที่สามารถทำได้ พวกเขาจะทำให้คุณไม่อนุญาตให้ผู้ใช้พยายามเชื่อมต่อกับฐานข้อมูลแม้ว่าพวกเขาจะจัดการเข้าถึงข้อมูลประจำตัว
หากสิ่งเหล่านี้ฟังดูเหมือนเกินความสามารถของคุณและคุณไม่มีเวลาพอที่จะทำ - จากนั้นในความเห็นของฉัน (หยิ่งยะโสและชนชั้นนำ) คุณไม่ควรเก็บสิ่งที่สำคัญหรือละเอียดอ่อนไว้ในฐานข้อมูลของคุณ และหากคุณไม่ได้จัดเก็บข้อมูลที่สำคัญหรือละเอียดอ่อนดังนั้นที่คุณจัดเก็บข้อมูลรับรองของคุณก็ไม่สำคัญเช่นกันทำไมจึงต้องใช้รหัสผ่านเลย
สุดท้ายถ้าคุณอย่างไม่สามารถหลีกเลี่ยงการเก็บชนิดของข้อมูลประจำตัวที่บางท่านอาจจะมีข้อมูลประจำตัวอ่านอย่างเดียวและเป็นเจ้าของโดยรากและรากจะให้ความเป็นเจ้าของบนพื้นฐานชั่วคราวเหลือเกินเมื่อมีการร้องขอให้ทำเช่นนั้นโดยสคริปต์ (เพราะสคริปต์ของคุณควรจะไม่ได้เป็น ทำงานเป็นรูทเว้นแต่มีความจำเป็นอย่างยิ่งและการเชื่อมต่อกับฐานข้อมูลไม่จำเป็นต้องใช้) แต่มันก็ไม่ใช่ความคิดที่ดี