คุณคิดอย่างจริงจังเกี่ยวกับความปลอดภัยเมื่อเขียนโปรแกรมหรือไม่?


9

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


เมื่อการเข้ารหัสอะไร ฉันทำสิ่งต่าง ๆ มากมาย
David Thornley

9
ใช่บ่อยครั้ง มักจะอยู่ในวลีที่คล้ายกับ "dammit ฉันไม่มีเวลาฉันหวังว่าจะไม่มีใครรู้"
liori

คำตอบ:


10

kindof คำเตือน: ฉันเป็นคนที่รักษาความปลอดภัย;)

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


4

ฉันใช้แนวปฏิบัติมาตรฐานอุตสาหกรรมเช่นใช้พารามิเตอร์ SQL ฉันใช้แพลตฟอร์ม "ปลอดภัย" เช่น. NET Framework และใช้ประโยชน์จากคุณลักษณะด้านความปลอดภัยเช่นโทเค็นต่อต้านการปลอมแปลงใน ASP.NET MVC ฉันไม่ได้เขียนอัลกอริธึมการเข้ารหัสของตัวเอง แต่ฉันเข้าใจในสิ่งที่การเข้ารหัสเหล่านั้นมอบให้เพื่อประโยชน์ด้านความปลอดภัยและเมื่อใดที่ฉันต้องใช้มันเพื่อรับสิทธิประโยชน์ด้านความปลอดภัยเหล่านั้น

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

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

ฉันตรวจสอบการป้อนข้อมูลของผู้ใช้ทั้งลูกค้าและเซิร์ฟเวอร์


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

@Polemmy: เมื่อใดที่ไม่เหมาะสมที่จะกำหนดพารามิเตอร์คำสั่ง SQL เมื่อใดจึงไม่เหมาะสมที่จะใช้โทเค็นต่อต้านการปลอมแปลง? หากข้อมูลมีความอ่อนไหวไม่เหมาะสมที่จะใช้การเข้ารหัสเมื่อใด
Robert Harvey

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

@Polemmy: ถ้านั่นคือสิ่งที่คุณหมายถึงโดยคิดเกี่ยวกับความปลอดภัยแล้วฉันเห็นด้วยคุณต้องรู้สิ่งเหล่านี้เพื่อใช้เครื่องมือเหล่านี้อย่างถูกต้อง
Robert Harvey

3

อย่างแน่นอน

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

ข้อความแสดงแทน

มันเคยเป็นรอบ


7
สิ่งนี้ต้องการคำอธิบายเพิ่มเติม :)
Toby Allen


2

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


1

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


1

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

codebase มีชุดของตัวกรองสำหรับอินพุต ฉันไม่เคยตรวจสอบ PHP $_GETหรือ$_POSTอาร์เรย์โดยตรง แต่ฉันสอบถามพวกเขาผ่านฟังก์ชั่นRequest::get('parameter', 'filter')ที่มีตัวกรองเช่นint, textและอื่น ๆ ไม่กี่ (และRequest::post()สำหรับอินพุต POST แน่นอน)


1

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


0

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


0

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

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

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

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

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


0

ใช่.

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

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


0

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

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

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

(ปฏิเสธความรับผิดชอบ - ฉันเป็นคนที่รักษาความปลอดภัยให้กับองค์กรระดับโลกหลายแห่ง)

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