มันเป็นวิธีปฏิบัติที่ดีตั้งค่าสตริงการเชื่อมต่อในการตั้งค่าเว็บ?


14

เมื่อเร็ว ๆ นี้ฉันได้พูดคุยกับเพื่อนร่วมงานบางคนในที่ทำงานของฉันเพราะพวกเขาบอกว่าควรมีการเข้ารหัสการเชื่อมต่อสตริงที่ดีกว่า และฉันบอกว่าทำไมไม่ใช้การเชื่อมต่อสตริงที่กำหนดไว้ใน web.config เข้ารหัส? มันเหมือนกันและดีกว่าเพราะเอนทิตี้ของเฟรมเวิร์กตัวอย่างเช่นค้นหาชื่อของการเชื่อมต่อในเว็บ config ของแอพพลิเคชั่นตอนนี้ฉันอยากรู้จากจุดรักษาความปลอดภัยว่าอะไรดีกว่า


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

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

คำตอบ:


18

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

เพียงเพราะมีบางสิ่งบางอย่างนั่งอยู่ใน DLL อย่าทำให้มันปลอดภัยอีกต่อไป เครื่องมือแก้ไขข้อความสามารถเปิดไฟล์ไบนารีได้เช่นกันเครื่องมือเช่น Reflector สามารถให้อินเทอร์เฟซที่ดีกว่าในการนำทาง. Net DLL DLL จะไม่ให้การเข้ารหัส "พิเศษ" ใด ๆ


การทดสอบเป็นเลขฐานสองคือตัวเลขถ้าใครสามารถอ่าน 1 และ 0 ของคุณความปลอดภัยทางกายภาพและซอฟต์แวร์ของคุณล้มเหลว
Ramhound

12

มันไม่สำคัญว่าที่เข้ารหัสข้อมูลจะถูกเก็บไว้มันเป็นเรื่องสำคัญว่ามันเข้ารหัส

ส่วนที่เข้ารหัสใน web.config จะถูกเข้ารหัสด้วยData Protection APIซึ่งเป็นเรื่องยากมากที่จะถอดรหัสโดยไม่กระทบต่อทั้งเครื่อง คุณยังสามารถใช้ที่เก็บคีย์ RSA ซึ่งคล้ายกันได้ (ยากที่จะนำสิ่งเหล่านี้ออกจากเครื่อง)

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

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

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

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


2

แนวทางปฏิบัติที่ดีที่สุดสำหรับ ASP.NET คือการกำหนดค่า / การตั้งค่าทั้งหมดในไฟล์ web.config หรือไฟล์ app.config (สำหรับโครงการประเภทอื่น ๆ )

เกี่ยวกับการเข้ารหัสและเหตุผลที่ใช้ในสตริงการเชื่อมต่อของคุณต้องเป็นกรณีพิเศษมาก เนื่องจากกรณีส่วนใหญ่มากถึง 99% คุณไม่จำเป็นต้องเข้ารหัสสตริงการเชื่อมต่อของคุณ แอปพลิเคชันระดับองค์กรของ Microsoft มีสตริงการเชื่อมต่อที่เปิดเผยในไฟล์ web.config / app.config ฉันคิดว่าคุณกำลังสับสนเรื่องความปลอดภัย

อีกอย่างหนึ่งการเข้ารหัสสตริงการเชื่อมต่อของคุณอย่างหนักก็คือการฝึกฝนที่ไม่ดี ตัวอย่างเช่นอย่าใส่สตริงการเชื่อมต่อใด ๆ (aka connectionstring) ใน DLL หรือ. aspx / .ascx / .cshtml หรือการใช้โค้ด


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