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


109

ฉันได้รับการว่าจ้างจากใครบางคนที่จะทำงานเล็ก ๆ บนเว็บไซต์ มันเป็นเว็บไซต์สำหรับ บริษัท ขนาดใหญ่ มันมีข้อมูลที่ละเอียดอ่อนมากดังนั้นการรักษาความปลอดภัยจึงมีความสำคัญมาก เมื่อวิเคราะห์รหัสฉันพบว่ามันเต็มไปด้วยช่องโหว่ด้านความปลอดภัย - อ่านไฟล์ PHP จำนวนมากที่ส่งผู้ใช้รับ / โพสต์เข้าสู่คำขอ mysql และคำสั่งของระบบโดยตรง

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

คุณจะทำอะไรในสถานการณ์นี้

ปรับปรุง:

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

อัปเดต 2:

ฉันบอกว่านั่นไม่ใช่กรณีเสมอไปและแนะนำให้เขาติดตามลิงก์คำถาม Stack Overflow นี้เพื่อจัดการกับมันอย่างถูกต้อง: จะป้องกัน SQL injection ใน PHP ได้อย่างไร? เขาบอกว่าเขาจะศึกษาและขอบคุณฉันที่บอกเขามาก่อน ฉันคิดว่าส่วนของฉันเสร็จแล้วขอบคุณพวกคุณ


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

18
ผู้โจมตีสามารถใช้ช่องโหว่เพื่อรับข้อมูลเกี่ยวกับโครงสร้างของฐานข้อมูล ไม่มีช่องโหว่ฉีด SQL ควรที่เคยได้รับการวัดผล
Dave Rager

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

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

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

คำตอบ:


114

ก่อนอื่นที่นี่ลำดับความสำคัญคือการปิดช่องโหว่ด้านความปลอดภัย

หากคุณทำงานโดยตรงกับวิศวกรที่เขียนสิ่งนี้ให้บันทึกทุกอย่างและมอบให้วิศวกรคนนั้น

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

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


1
คำตอบที่ยอดเยี่ยมโดยรวม หัวข้อเป็นเรื่องส่วนตัวดังนั้นฉันจะทำเครื่องหมายว่าเป็นชุมชนที่ได้รับการยอมรับมากที่สุด
MaiaVictor

1
หากคุณกำลังทำงานกับวิศวกร แต่ได้รับค่าตอบแทนจากการจัดการคุณไม่ควรรายงานไปยังฝ่ายบริหารหรือไม่ เกิดอะไรขึ้นถ้าวิศวกรขอบคุณคุณ แต่เมื่อคุณออกไปทำลายรายงาน
Konerak

บอกทั้งสองอย่างหรือบอกวิศวกรก่อนและตรวจสอบว่ามีการสร้างข้อบกพร่องและติดตามในระบบที่ใช้ หากไม่ได้สร้างข้อบกพร่องให้บอกการจัดการ
Eric Hydrick

2
ฉันชอบคำตอบนี้ดีกว่า: programmers.stackexchange.com/a/189206/28351เพราะสำหรับผู้ว่าจ้างลำดับความสำคัญต่างกัน ขั้นแรกให้รายงานช่องโหว่ความปลอดภัยจากนั้นแก้ไขข้อผิดพลาดเล็ก ๆ
nalply

80

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

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


26
+1 ความไม่รู้สามารถแก้ไขได้ การไร้ความสามารถเป็นอาชีพสำหรับบางคน!
Mitch Wheat

20

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

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


17

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

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


13

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

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

เห็นได้ชัดว่าหลีกเลี่ยงคำเช่น "อึเลวแย่พรุน" เมื่ออ้างถึงรหัส / ข้อบกพร่องและคำที่คล้ายกันสำหรับนักพัฒนาที่เขียนเว็บไซต์


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

7

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

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


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

0

ครั้งแรกและครั้งเดียว; ฝ่ายบริหารไม่ต้องการรับฟังปัญหา ฉันถูกไล่ออกจากสำนักงานบริหารงานบุคคล (การรักษาความปลอดภัยสำหรับทำเนียบขาว) เพราะฉันชี้ให้เห็นว่าระบบของพวกเขาไม่ปลอดภัยอย่างไร นั่นเป็นอีกสักครู่ แต่ทัศนคติการจัดการก็ไม่เปลี่ยนแปลง

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

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


3
"ฝ่ายบริหารไม่ต้องการได้ยินปัญหา" - เพิ่มเหตุผล / การอ้างอิงเพื่อสนับสนุนการยืนยันของคุณ (ซึ่งฟังดูสมเหตุสมผลสำหรับฉัน แต่สิ่งนี้ไม่สำคัญจริงๆ) และฉันจะยกเลิก downvote
gnat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.