เมื่อคุณเขียนโปรแกรมคุณคิดอย่างจริงจังเกี่ยวกับรหัสของคุณที่อาจถูกนำไปใช้ประโยชน์ในรูปแบบที่ไม่ได้ตั้งใจให้ทำในขั้นต้นและเข้าถึงข้อมูลที่ได้รับการป้องกันเรียกใช้คำสั่งหรืออย่างอื่นที่คุณไม่ต้องการให้ผู้ใช้ทำ
เมื่อคุณเขียนโปรแกรมคุณคิดอย่างจริงจังเกี่ยวกับรหัสของคุณที่อาจถูกนำไปใช้ประโยชน์ในรูปแบบที่ไม่ได้ตั้งใจให้ทำในขั้นต้นและเข้าถึงข้อมูลที่ได้รับการป้องกันเรียกใช้คำสั่งหรืออย่างอื่นที่คุณไม่ต้องการให้ผู้ใช้ทำ
คำตอบ:
kindof คำเตือน: ฉันเป็นคนที่รักษาความปลอดภัย;)
ดังนั้นวิธีที่ฉันทำงานก็คือฉันมีรูปแบบการคุกคามซึ่งอธิบายถึงประเภทของการโจมตีโดยผู้โจมตีประเภทใด ที่ช่วยในการทำงานตามข้อกำหนดด้านความปลอดภัย เมื่อฉันเข้ารหัสจริงฉันทำตามปกติ "การเข้ารหัสที่ปลอดภัย" เช่นระวังว่าเคอร์เซอร์ตัวแปรอยู่ในขอบเขตที่ไม่ถูกต้องอินพุตที่ปนเปื้อนจะถูกทำให้สะอาดและมีการจัดการเงื่อนไขข้อผิดพลาด จากนั้นฉันกลับไปที่แบบจำลองการคุกคามของฉันเพื่อดูว่าโมดูลใดน่าจะเป็นเป้าหมายของผู้โจมตีมากที่สุด ผู้ที่ได้รับการตรวจสอบพิเศษ
ฉันใช้แนวปฏิบัติมาตรฐานอุตสาหกรรมเช่นใช้พารามิเตอร์ SQL ฉันใช้แพลตฟอร์ม "ปลอดภัย" เช่น. NET Framework และใช้ประโยชน์จากคุณลักษณะด้านความปลอดภัยเช่นโทเค็นต่อต้านการปลอมแปลงใน ASP.NET MVC ฉันไม่ได้เขียนอัลกอริธึมการเข้ารหัสของตัวเอง แต่ฉันเข้าใจในสิ่งที่การเข้ารหัสเหล่านั้นมอบให้เพื่อประโยชน์ด้านความปลอดภัยและเมื่อใดที่ฉันต้องใช้มันเพื่อรับสิทธิประโยชน์ด้านความปลอดภัยเหล่านั้น
กล่าวโดยย่อคือฉันใช้แนวทางปฏิบัติที่ดีที่สุด แต่ฉันไม่ได้พัฒนาเครื่องมือความปลอดภัยของตัวเอง ฉันไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัยในเรื่องนั้น ฉันพึ่งพาผู้เชี่ยวชาญด้านความปลอดภัยอื่น ๆ ซึ่งคาดว่าจะคิดอย่างลึกซึ้งเกี่ยวกับปัญหาเหล่านี้และมีความเข้าใจที่ชัดเจนเกี่ยวกับความเสี่ยงและผลประโยชน์
แนวทางพื้นฐานของฉันในการรักษาความปลอดภัยนอกเหนือจากการใช้เครื่องมือรักษาความปลอดภัยคือการกำจัดอินพุตที่เป็นไปได้ทั้งหมดให้กับระบบยกเว้นสิ่งที่ฉันคาดหวัง หากฉันมีฟิลด์หมายเลขประกันสังคมตัวอักษรเดียวที่ควรแสดงจริง ๆ คือตัวเลขและขีดกลางในรูปแบบเฉพาะ
ฉันตรวจสอบการป้อนข้อมูลของผู้ใช้ทั้งลูกค้าและเซิร์ฟเวอร์
อย่างแน่นอน
ความปลอดภัยคือทุกสิ่ง และด้วยซอฟต์แวร์ตัวเลขที่เพิ่มเป็นสองเท่า
เมื่อวันก่อนผู้ใช้สามารถค้นหาและใช้ประโยชน์จากข้อบกพร่องในหนึ่งในโปรแกรมเก่าของฉัน ความเสียหายนั้นไม่สามารถแก้ไขได้ ดูด้านล่าง:
มันเคยเป็นรอบ
ไม่เพราะฉันไม่ทำงานในโดเมนปัญหาที่ความปลอดภัยมีความเกี่ยวข้อง (การแสดงข้อมูลจำนวนมาก SW) ผมทำมีพวงของการอ้างในรหัสของฉัน (การตรวจสอบดัชนีการตรวจสอบความสอดคล้องอื่น ๆ ) ไม่ได้เพราะกังวลด้านความปลอดภัย แต่เพราะผมเช่นรหัสผิดที่จะเกิดความผิดพลาดในช่วงต้นและความผิดพลาดอย่างเห็นได้ชัด
อย่างแน่นอน ฉันคิดเกี่ยวกับช่องโหว่การฉีดและวิธีการที่ตรรกะทางธุรกิจของฉันจะทำงานในสภาพแวดล้อมเดสก์ท็อปกับสภาพแวดล้อมของเว็บและการรักษาความปลอดภัยในสภาพแวดล้อมทั้งสองประเภท
ฉันไม่มีผู้เชี่ยวชาญด้านความปลอดภัย แต่เมื่อฉันเขียนโค้ดเว็บแอปพลิเคชันฉันมักจะถือว่าข้อมูลที่ผู้ใช้ป้อนเข้ามานั้นอาจมีความแปลกประหลาดทุกประเภท นอกจากนี้ฉันระมัดระวังในการโทรกลับ Ajax ไปยังเซิร์ฟเวอร์เพื่อตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้ (ถ้าควรใช้สำหรับเหตุการณ์นั้น) และพวกเขามีสิทธิ์ในการทำสิ่งที่พวกเขากำลังพยายามทำ
codebase มีชุดของตัวกรองสำหรับอินพุต ฉันไม่เคยตรวจสอบ PHP $_GET
หรือ$_POST
อาร์เรย์โดยตรง แต่ฉันสอบถามพวกเขาผ่านฟังก์ชั่นRequest::get('parameter', 'filter')
ที่มีตัวกรองเช่นint
, text
และอื่น ๆ ไม่กี่ (และRequest::post()
สำหรับอินพุต POST แน่นอน)
ใช่. เมื่อฉันทำงานในเกมที่มีผู้เล่นหลายคนทุกคนหวาดระแวงกับการหาประโยชน์และวิธีการโกง การโกงสามารถทำลายเกมโดยสิ้นเชิงไม่ต้องพูดถึงรูปแบบธุรกิจใด ๆ ที่เชื่อมโยงกับการขายเนื้อหาในเกม ดังนั้นประเด็นด้านความปลอดภัยและมาตรการต่อต้านการแทรกแซงจึงสูงมากในวาระการประชุม ผมชอบมันมาก. ฉันได้ทำงานในโครงการอื่น ๆ ก่อนที่คุณจะรู้สึกผิดที่ต้องทำงานกับโค้ดนานขึ้นเพื่อให้มั่นใจว่าปลอดภัย
ใช่. ความปลอดภัยเป็นสิ่งสำคัญและไม่ควรจะเป็นภายหลัง การเพิ่มความปลอดภัยหลังจากความจริงโดยทั่วไปแล้วจะยากกว่าการออกแบบลงในแอปพลิเคชั่นในตอนแรกและถ้าคุณเพิ่มในภายหลังคุณอาจพลาดบางสิ่ง (หรือไม่ต้องเพิ่มเลย
ทำความเข้าใจหลักการทั่วไปของการรักษาความปลอดภัย (ความถูกต้องการรับรองความถูกต้องสิทธิ์อำนาจ) จากนั้นอ่านหนังสือสองสามเล่มเกี่ยวกับวิธีที่ผู้คนล้มล้างเสาหลักความปลอดภัยเหล่านี้เป็นพันปีและคุณจะอยู่ที่นั่นครึ่งทาง
จากนั้นอ่านหนังสือดีๆสักเล่มเกี่ยวกับกลยุทธ์การออกแบบและการทดสอบและคุณจะได้เรียนรู้วิธีการออกแบบความสามารถในการทดสอบในสถาปัตยกรรมของคุณ
ตอนนี้เรามาถึงจุดที่ฉันคิดถึงความปลอดภัย ฉันคิดว่าฉันจะตรวจสอบความถูกต้องของแหล่งข้อมูลได้อย่างไรไม่ว่าข้อมูลนั้นจะถูกดัดแปลงใครเป็นแหล่งข้อมูลจะแน่ใจได้อย่างไรว่าฉันเป็นใคร มันมีการเปลี่ยนแปลงอย่างไรและอย่างไร ...
สิ่งนี้มีผลต่อการออกแบบ ไฟล์กำหนดค่าอาจมีการเข้ารหัสส่วนของคีย์หรือฟิลด์บางอย่างอาจเป็นข้อความธรรมดาที่มีฟิลด์ลายเซ็นที่เกี่ยวข้อง สิ่งต่าง ๆ มีความซับซ้อนมากขึ้นเมื่อใช้บริการที่ต้องเผชิญกับอินเทอร์เน็ตเพราะคุณควรคาดหวังว่าจะมีความเป็นปรปักษ์ในระดับที่สูงขึ้น
จากการทดสอบคุณจะทดสอบทั้งหมดนี้อย่างไร รายการข้อมูลสูงสุดของคุณคืออะไรจะเกิดอะไรขึ้นถ้าคุณผลักดันซอฟต์แวร์เกินขีด จำกัด เหล่านั้นจะจัดการกับมันอย่างไร มันไว้ใจอะไร คุณจะปลอมความเชื่อถือนั้นได้อย่างไร
ใช่.
ฉันเคยจัดการกับแฮ็กเกอร์มากพอในอดีตที่จะรู้ว่าพวกเขากำลังพยายามที่จะประนีประนอมไซต์ใหญ่ ๆ อยู่ตลอดเวลาและมีบอทมากพอที่จะทำให้ไซต์เล็ก ๆ ไม่ปลอดภัย
ฉันพยายามคิดว่าเป็นแฮ็กเกอร์ตลอดเวลาจนถึงจุดที่บางครั้งฉันกังวลเพื่อนร่วมงานของฉันด้วยความคิดเห็นทั่วไปเกี่ยวกับวิธีที่ระบบที่เราให้การอนุญาตทุก ๆ วัน
มันควรเป็นสิ่งที่นักพัฒนาสร้างขึ้นในกระบวนการตั้งแต่พื้นฐานจนถึงระดับมากขึ้นหรือน้อยลงขึ้นอยู่กับแอปพลิเคชั่น ฯลฯ แต่น่าเสียดายที่ devs ไม่ต้องการอ้างถึงเรื่องความปลอดภัยผู้ซื้อมักจะคิดไม่ถึง ( ฉันรู้ว่านี่เป็นบิต -22 เพราะถ้าผู้ซื้อต้องการราคาที่ถูกที่สุดมันอาจจะไม่รวมถึงการรักษาความปลอดภัย)
ในฐานะนักพัฒนาคุณสามารถได้รับประโยชน์แน่นอนถ้าคุณมีความเชี่ยวชาญในด้านนี้ - ฉันกำลังคิดถึงธนาคารและบริการทางการเงินโดยเฉพาะ ปัจจุบันพวกเขาอาจใช้งบประมาณ 70 - 100k ในการฝึกอบรมสำหรับบัณฑิตใหม่ที่จะนำมาซึ่งความเร็วในกระบวนการความปลอดภัยและข้อมูลเฉพาะอื่น ๆ ให้กับองค์กร หากคุณสามารถบันทึกได้ถึง 30k นั่นก็เป็นประวัติการณ์ที่ดี!
ในสหราชอาณาจักรสถาบันผู้เชี่ยวชาญด้านความปลอดภัยของข้อมูลและในสก็อตแลนด์ศูนย์ความเป็นเลิศด้านความปลอดภัยและอาชญากรรมไซเบอร์กำลังทำงานอย่างใกล้ชิดกับมหาวิทยาลัยเพื่อช่วยในการตรวจสอบเนื้อหาของหลักสูตรให้การบรรยายเป็นแขก นักพัฒนาซอฟต์แวร์ที่อยู่ในแผนกการฉ้อโกงในการบังคับใช้กฎหมาย) องค์กรสนับสนุนส่วนใหญ่กำลังทำสิ่งนี้โดยไม่เสียค่าใช้จ่ายเนื่องจากมีศักยภาพที่จะช่วยพวกเขาประหยัดเงินเป็นจำนวนมาก
(ปฏิเสธความรับผิดชอบ - ฉันเป็นคนที่รักษาความปลอดภัยให้กับองค์กรระดับโลกหลายแห่ง)