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

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

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

ประเทศที่ดีที่สุดสำหรับผู้หญิง

1. คุณขาดความใกล้ชิดหรือไม่? ไปแคนาดา. ปรากฎว่าผู้หญิงแคนาดามีเพศสัมพันธ์บ่อยกว่าผู้ใช้แอปทั่วไปถึง 45%

2. แต่ต้องระวัง: แคนาดาเป็นสถานที่ที่ดีเยี่ยมในการตั้งครรภ์ ผู้หญิงชาวแคนาดาสามารถตั้งครรภ์ได้ง่ายกว่าคนอื่นๆ ถึง 21%

3. ผู้หญิงออสเตรเลียมีเพศสัมพันธ์บ่อยครั้ง ซึ่งมากกว่าผู้ใช้แอปโดยเฉลี่ยถึง 37%

4. ไม่ต้องบอกว่าผู้หญิงในออสเตรเลียก็มีโอกาสตั้งครรภ์ได้เช่นกัน พวกเขาสูงกว่าผู้ใช้รายอื่นถึง 14%

5. สหรัฐอเมริกาเป็นสถานที่ที่ดีในการมีความสุข ผู้หญิงอเมริกันมีแนวโน้มที่จะมีเพศสัมพันธ์มากกว่าผู้หญิงคนอื่นๆ ถึง 16%

6. สถานที่ที่แย่ที่สุดที่จะมีความสุข? ละตินอเมริกา ในกรณีนี้ ผู้หญิงมีเพศสัมพันธ์น้อยกว่าผู้ใช้แอปทั่วไปถึง 4%

ความอยากทางเพศ

1. ความอยากทางเพศของผู้หญิงสอดคล้องกับรอบเดือนของเธอ วันแรกของรอบเดือนคือวันแรกของการมีประจำเดือน ซึ่งกินเวลาประมาณห้าวัน ดังนั้นผู้หญิงจึงสนใจเรื่องเพศน้อยที่สุดหนึ่งถึงห้าวันต่อเดือน

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

3. ผู้หญิงส่วนใหญ่เริ่มมีเพศสัมพันธ์อีกครั้งในวันที่ 12 ของรอบเดือน

4. ผู้หญิงจำนวนมากมีเพศสัมพันธ์เป็นประจำในช่วง 12 ถึง 14 วันของรอบเดือน แอป Glow เรียกทุกวันนี้ว่า "เซ็กซี่ขั้นสุด"

5. ผู้หญิงจะรู้สึกเซ็กซี่ที่สุดในวันที่ 13 และ 14 ของรอบเดือน แต่สิ่งที่น่าสนใจคือ พวกเขาไม่จำเป็นต้องมีเซ็กส์ที่ดีที่สุดและน่าพึงพอใจที่สุดในเวลานี้

6. ผู้หญิงสนุกกับการมีเซ็กส์มากที่สุดในวันที่ 30 สุดท้ายของรอบเดือน วันนี้ใน Glow ถูกกำหนดให้เป็น "จุดสุดยอดสูงสุด"

ผู้หญิงพอใจมั้ย?

1. ผู้หญิงจะรู้สึกมีความสุขมากที่สุดในวันที่ 15 และ 16 ของรอบเดือน และหากมีเพศสัมพันธ์บ่อยมากในวันก่อนหน้า

2. ผู้ใช้ Glow ลงทะเบียนการมีเพศสัมพันธ์ 7.6 ล้านครั้งในระยะเวลาสองปี

3. ซึ่งหมายความว่าทุกนาทีมีผู้หญิงอย่างน้อยเจ็ดคนที่ใช้แอป Glow กำลังมีเพศสัมพันธ์

4. นอกจากนี้ ผู้ใช้ยังรายงานความสนใจของตนถึง 2 ล้านครั้งอีกด้วย แอปนี้ยังติดตามวัฏจักรทางเพศและการเจริญพันธุ์ของคู่รัก 88,000 คู่

5. น่าเสียดายที่แม้จะมีการติดต่อทางเพศอยู่ แต่ผู้หญิงบางคนก็ไม่พอใจกับสิ่งเหล่านี้ ผู้หญิงเกือบหนึ่งในสามยอมเลิกมีเซ็กส์มากกว่าสมาร์ทโฟน

6. แต่นั่นยังหมายความว่าสองในสามยอมเลิกใช้โทรศัพท์มากกว่ามีเซ็กส์

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

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

ป.ล. หนังสือเล่มนี้ยาวดังนั้นการแปลจะตีพิมพ์ในหลายบทความ มาเริ่มกันเลย...

หนังสือเกี่ยวกับความปลอดภัยของ PHP อีกเล่มหนึ่ง? มีหลายวิธีในการเริ่มเขียนหนังสือเกี่ยวกับความปลอดภัยของ PHP น่าเสียดายที่ฉันยังไม่ได้อ่านเลย ดังนั้นฉันจะต้องคิดออกในขณะที่เขียน บางทีฉันอาจจะเริ่มต้นด้วยพื้นฐานที่สุดและหวังว่าทุกอย่างจะออกมาดี

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

  • อันตรายต่อผู้ใช้: การเข้าถึงอีเมล รหัสผ่าน ข้อมูลส่วนบุคคล รายละเอียดบัตรธนาคาร ความลับทางธุรกิจ รายชื่อผู้ติดต่อ ประวัติการทำธุรกรรม และความลับที่ได้รับการปกป้องอย่างล้ำลึก (เช่น คนที่ตั้งชื่อสุนัข Sparkle) การรั่วไหลของข้อมูลนี้เป็นอันตรายต่อผู้ใช้ (บุคคลและบริษัท) เว็บแอปพลิเคชันที่ใช้ข้อมูลและโฮสต์ในทางที่ผิดซึ่งใช้ประโยชน์จากความไว้วางใจของผู้ใช้ก็อาจก่อให้เกิดอันตรายได้เช่นกัน
  • อันตรายต่อบริษัท X เอง: เนื่องจากความเสียหายที่เกิดกับผู้ใช้ ชื่อเสียงเสื่อมโทรม ต้องจ่ายค่าชดเชย ข้อมูลทางธุรกิจที่สำคัญสูญหาย มีค่าใช้จ่ายเพิ่มเติม - สำหรับโครงสร้างพื้นฐาน การปรับปรุงความปลอดภัย การขจัดผลที่ตามมา ค่าใช้จ่ายทางกฎหมาย สิทธิประโยชน์มากมายจากการถูกไล่ออก ผู้จัดการระดับสูง ฯลฯ
  • ฉันจะเน้นที่ทั้งสองประเภทนี้เนื่องจากปัญหาส่วนใหญ่ที่การรักษาความปลอดภัยของเว็บแอปพลิเคชันควรป้องกัน บริษัททั้งหมดที่เคยประสบกับการละเมิดความปลอดภัยอย่างร้ายแรงจะต้องเขียนข่าวประชาสัมพันธ์อย่างรวดเร็วและบนเว็บไซต์ของตนว่าพวกเขามีความละเอียดอ่อนเพียงใด ดังนั้นผมขอแนะนำให้คุณรู้สึกถึงความสำคัญของปัญหานี้อย่างสุดใจก่อนที่จะพบกับมันในทางปฏิบัติ

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

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

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

  • ใครอยากโจมตีเราบ้าง?
  • พวกเขาจะโจมตีเราได้อย่างไร?
  • เราจะหยุดพวกเขาได้อย่างไร?
  • ใครอยากโจมตีเราบ้าง? คำตอบสำหรับคำถามแรกนั้นง่ายมาก: ทุกสิ่งและทุกสิ่ง ใช่แล้ว ทั้งจักรวาลต้องการสอนบทเรียนให้กับคุณ ผู้ชายที่มีคอมพิวเตอร์โอเวอร์คล็อกที่ใช้ Kali Linux เหรอ? เขาอาจจะโจมตีคุณแล้ว ผู้ชายขี้สงสัยที่ชอบเอาซี่ล้อคน? เขาคงจ้างคนมาโจมตีคุณแล้ว REST API ที่เชื่อถือได้ซึ่งป้อนข้อมูลให้คุณทุกชั่วโมงหรือไม่ อาจถูกแฮ็กเมื่อเดือนที่แล้วเพื่อป้อนข้อมูลที่ติดไวรัสให้กับคุณ แม้ว่าฉันจะโจมตีคุณได้! ดังนั้นคุณไม่จำเป็นต้องเชื่อหนังสือเล่มนี้อย่างสุ่มสี่สุ่มห้า คิดว่าฉันโกหก และหาโปรแกรมเมอร์ที่จะพาฉันไปดื่มน้ำสะอาดและเปิดเผยคำแนะนำที่เป็นอันตรายของฉัน ในทางกลับกัน บางทีเขาอาจจะแฮ็คคุณด้วย...

    ประเด็นของความหวาดระแวงนี้คือเพื่อให้ง่ายต่อการจัดหมวดหมู่ทุกสิ่งที่โต้ตอบกับแอปพลิเคชันเว็บของคุณ (“ผู้ใช้”, “แฮ็กเกอร์”, “ฐานข้อมูล”, “อินพุตที่ไม่น่าเชื่อถือ”, “ผู้จัดการ”, “REST API”) และ จากนั้นกำหนดดัชนีความน่าเชื่อถือให้แต่ละหมวดหมู่ แน่นอนว่า “แฮกเกอร์” นั้นเชื่อถือไม่ได้ แต่ “ฐานข้อมูล” ล่ะล่ะ? “อินพุตที่ไม่น่าเชื่อถือ” มีชื่อด้วยเหตุผล แต่คุณจะกรองโพสต์ในบล็อกจากฟีด Atom ที่เชื่อถือได้ของเพื่อนร่วมงานของคุณหรือไม่

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

    กลับไปที่ "ฐานข้อมูล" สมมติว่าแฮกเกอร์สามารถเข้าถึงฐานข้อมูลได้ (และพวกเราที่หวาดระแวงมักคิดแบบนี้) ก็ไม่มีทางเชื่อถือได้ แอปพลิเคชันส่วนใหญ่เชื่อถือฐานข้อมูลโดยไม่มีคำถามใดๆ จากภายนอกเว็บแอปพลิเคชันดูเหมือนเป็นชิ้นเดียว แต่ภายในเป็นระบบของส่วนประกอบแต่ละส่วนที่แลกเปลี่ยนข้อมูล หากเราพิจารณาว่าส่วนประกอบทั้งหมดเหล่านี้เชื่อถือได้ ถ้าหนึ่งในนั้นถูกแฮ็ก ส่วนประกอบอื่นๆ ทั้งหมดจะถูกบุกรุกอย่างรวดเร็ว ปัญหาด้านความปลอดภัยที่ร้ายแรงดังกล่าวไม่สามารถแก้ไขได้ด้วยวลีที่ว่า “หากฐานข้อมูลถูกแฮ็ก เราก็จะยังแพ้” คุณสามารถพูดได้ แต่ไม่ใช่ความจริงที่ว่าคุณจะต้องทำเช่นนี้หากคุณไม่ไว้วางใจฐานในตอนแรกและปฏิบัติตาม!

    พวกเขาจะโจมตีเราได้อย่างไร? คำตอบสำหรับคำถามที่สองนั้นเป็นรายการที่ค่อนข้างกว้างขวาง คุณสามารถถูกโจมตีได้จากทุกที่ที่แต่ละส่วนประกอบหรือเลเยอร์ของเว็บแอปพลิเคชันได้รับข้อมูล โดยพื้นฐานแล้ว เว็บแอปพลิเคชันเพียงประมวลผลข้อมูลและย้ายจากที่หนึ่งไปยังอีกที่หนึ่ง คำขอของผู้ใช้, ฐานข้อมูล, API, ฟีดบล็อก, แบบฟอร์ม, คุกกี้, พื้นที่เก็บข้อมูล, ตัวแปรสภาพแวดล้อม PHP, ไฟล์การกำหนดค่า, ไฟล์การกำหนดค่าเพิ่มเติม แม้แต่ไฟล์ PHP ที่คุณเรียกใช้ - ทั้งหมดนี้อาจติดไวรัสข้อมูลเพื่อละเมิดความปลอดภัยและทำให้เกิดความเสียหาย โดยพื้นฐานแล้ว หากข้อมูลที่เป็นอันตรายไม่ปรากฏอย่างชัดเจนในโค้ด PHP ที่ใช้ในการส่งคำขอ ก็มีแนวโน้มที่จะมาถึงในรูปแบบ "เพย์โหลด" สิ่งนี้จะถือว่า a) คุณเขียนซอร์สโค้ด PHP b) ได้รับการตรวจสอบโดยผู้ทรงคุณวุฒิอย่างถูกต้อง และ c) คุณไม่ได้รับค่าตอบแทนจากองค์กรอาชญากรรม

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

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

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

    ปัจจุบัน Composer และ Packagist.org อยู่ภายใต้ช่องโหว่ที่ทราบในการตรวจจับการขึ้นต่อกันและการแจกจ่ายแพ็คเกจ ดังนั้นควรตรวจสอบทุกสิ่งในสภาพแวดล้อมการใช้งานจริงของคุณอีกครั้ง และตรวจสอบแหล่งที่มาของแพ็คเกจทั้งหมดจาก Packagist.org

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

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

    หลักการรักษาความปลอดภัยขั้นพื้นฐาน เมื่อพัฒนามาตรการรักษาความปลอดภัย สามารถประเมินประสิทธิผลได้โดยใช้การพิจารณาดังต่อไปนี้ ฉันได้อ้างถึงบางส่วนข้างต้นแล้ว
  • อย่าไว้ใจใครหรือสิ่งใดๆ
  • ถือว่าสถานการณ์กรณีที่เลวร้ายที่สุดเสมอ
  • ใช้การป้องกันหลายระดับ (Defence-in-Depth)
  • ยึดมั่นในหลักการ “Keep It Simple Stupid” (KISS)
  • ยึดหลัก “สิทธิพิเศษน้อยที่สุด”
  • ผู้โจมตีได้กลิ่นความคลุมเครือ
  • อ่านเอกสารประกอบ (RTFM) แต่อย่าเชื่อถือ
  • หากไม่ผ่านการทดสอบก็จะใช้งานไม่ได้
  • มันเป็นความผิดของคุณเสมอ!
  • มาดูประเด็นทั้งหมดโดยย่อ1. อย่าไว้ใจใครหรือสิ่งใดๆ ตามที่ระบุไว้ข้างต้น ตำแหน่งที่ถูกต้องคือการถือว่าทุกสิ่งและทุกคนที่เว็บแอปพลิเคชันของคุณโต้ตอบด้วยต้องการแฮ็กมัน ซึ่งรวมถึงส่วนประกอบหรือเลเยอร์แอปพลิเคชันอื่นๆ ที่จำเป็นในการประมวลผลคำขอ อะไรก็ได้และทุกสิ่ง ไม่มีข้อยกเว้น2. สมมติสถานการณ์กรณีที่เลวร้ายที่สุดเสมอ ระบบรักษาความปลอดภัยจำนวนมากมีสิ่งหนึ่งที่เหมือนกัน: ไม่ว่าระบบจะถูกสร้างขึ้นมาอย่างดีเพียงใด แต่ละระบบก็สามารถถูกละเมิดได้ หากคุณคำนึงถึงสิ่งนี้ คุณจะเข้าใจถึงข้อดีของประเด็นที่สองได้อย่างรวดเร็ว การมุ่งเน้นไปที่สถานการณ์กรณีที่เลวร้ายที่สุดจะช่วยให้คุณประเมินขอบเขตและความรุนแรงของการโจมตีได้ และหากสิ่งนี้เกิดขึ้น คุณอาจสามารถลดผลที่ตามมาอันไม่พึงประสงค์ได้ด้วยมาตรการรักษาความปลอดภัยเพิ่มเติมและการเปลี่ยนแปลงทางสถาปัตยกรรม บางทีโซลูชันแบบเดิมที่คุณใช้อาจถูกแทนที่ด้วยสิ่งที่ดีกว่าแล้วใช่หรือไม่3. ใช้การป้องกันหลายระดับ (Defense-in-Depth) การป้องกันหลายระดับยืมมาจากวิทยาศาสตร์การทหารเพราะผู้คนตระหนักมานานแล้วว่ากำแพง ถุงทราย อุปกรณ์ ชุดเกราะ และขวดจำนวนมากที่ปกคลุมอวัยวะสำคัญจากกระสุนและใบมีดของศัตรูนั้นถูกต้อง แนวทางด้านความปลอดภัย คุณไม่มีทางรู้ได้เลยว่าสิ่งใดข้างต้นไม่สามารถป้องกันได้ และคุณต้องแน่ใจว่าการป้องกันหลายชั้นช่วยให้คุณพึ่งพาได้มากกว่าแค่ป้อมปราการภาคสนามหรือรูปแบบการต่อสู้ แน่นอนว่าไม่ใช่แค่ความล้มเหลวเพียงครั้งเดียวเท่านั้น ลองนึกภาพผู้โจมตีปีนบันไดขึ้นไปบนกำแพงยุคกลางขนาดยักษ์ แต่กลับพบว่ามีอีกกำแพงด้านหลังซึ่งมีลูกธนูอาบอยู่ แฮกเกอร์ก็จะรู้สึกแบบเดียวกัน4. Keep It Simple Stupid (KISS) การป้องกันที่ดีที่สุดนั้นเรียบง่ายเสมอ ง่ายต่อการพัฒนา นำไปใช้ ทำความเข้าใจ ใช้งาน และทดสอบ ความเรียบง่ายช่วยลดข้อผิดพลาด ส่งเสริมประสิทธิภาพของแอปพลิเคชันที่ถูกต้อง และอำนวยความสะดวกในการใช้งานแม้ในสภาพแวดล้อมที่ซับซ้อนและไม่เป็นมิตร5. ปฏิบัติตามหลักการของ "สิทธิ์ขั้นต่ำ" ผู้เข้าร่วมแต่ละคนในการแลกเปลี่ยนข้อมูล (ผู้ใช้ กระบวนการ โปรแกรม) ควรมีสิทธิ์การเข้าถึงเฉพาะที่จำเป็นในการปฏิบัติหน้าที่เท่านั้น6. ผู้โจมตี Smell Obscurity การรักษาความปลอดภัยโดย Obscurity ตั้งอยู่บนสมมติฐานที่ว่า หากคุณใช้ Defense A และไม่บอกใครว่ามันคืออะไร ทำงานอย่างไร หรือมีอยู่จริงหรือไม่ มันจะช่วยคุณได้อย่างน่าอัศจรรย์เพราะผู้โจมตีพ่ายแพ้ ในความเป็นจริงสิ่งนี้ให้ข้อได้เปรียบเพียงเล็กน้อยเท่านั้น บ่อยครั้งที่ผู้โจมตีที่มีประสบการณ์จะสามารถทราบมาตรการที่คุณดำเนินการได้ ดังนั้นคุณจึงจำเป็นต้องใช้การป้องกันที่ชัดเจน ผู้ที่มีความมั่นใจมากเกินไปว่าการคุ้มครองที่ไม่ชัดเจนทำให้ไม่จำเป็นต้องได้รับการปกป้องอย่างแท้จริง ควรถูกลงโทษเป็นการเฉพาะเพื่อกำจัดภาพลวงตา7. อ่านเอกสาร (RTFM) แต่อย่าเชื่อถือคู่มือ PHP คือพระคัมภีร์ แน่นอนว่ามันไม่ได้เขียนโดย Flying Spaghetti Monster ดังนั้นในทางเทคนิคแล้ว มันอาจมีความจริงเพียงครึ่งเดียว การละเว้น การตีความที่ผิด หรือข้อผิดพลาดที่ยังไม่ได้รับการสังเกตหรือแก้ไข เช่นเดียวกับ Stack Overflow

    แหล่งความรู้ด้านความปลอดภัยเฉพาะทาง (เน้นที่ PHP และอื่นๆ) โดยทั่วไปจะให้ความรู้ที่มีรายละเอียดมากกว่า สิ่งที่ใกล้เคียงที่สุดกับพระคัมภีร์เกี่ยวกับการรักษาความปลอดภัย PHP คือ OWASP ซึ่งมีบทความ คำแนะนำ และเคล็ดลับ หากไม่แนะนำให้ทำสิ่งใดบน OWASP อย่าทำเช่นนั้น!

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

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

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

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

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

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

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

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

    Filter_var("php://example.org", FILTER_VALIDATE_URL);
    ตัวกรองผ่านโดยไม่มีคำถามใดๆ ปัญหาคือ php:// URL ที่ได้รับอาจถูกส่งไปยังฟังก์ชัน PHP ที่คาดว่าจะได้รับที่อยู่ HTTP ระยะไกล แทนที่จะส่งคืนข้อมูลจากสคริปต์ PHP ที่รัน (ผ่านตัวจัดการ PHP) ช่องโหว่เกิดขึ้นเนื่องจากตัวเลือกการกรองไม่มีวิธีการจำกัด URI ที่ถูกต้อง แม้ว่าแอปพลิเคชันต้องการลิงก์ http, https หรือ mailto ไม่ใช่ URI เฉพาะ PHP บางส่วน ควรหลีกเลี่ยงวิธีการทดสอบที่กว้างเกินไปนี้ไม่ว่าจะด้วยวิธีใดก็ตาม

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

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

    ปรากฎว่าการตรวจสอบข้อมูลอินพุตนั้นไม่น่าเชื่อถือโดยเนื้อแท้ วิธีนี้มีประสิทธิภาพมากที่สุดในการตัดค่าที่ไม่ถูกต้องออกไปอย่างชัดเจน สมมติว่าเมื่อบางสิ่งต้องเป็นจำนวนเต็ม หรือสตริงตัวอักษรและตัวเลข หรือ HTTP URL รูปแบบและค่าดังกล่าวมีข้อจำกัด และหากได้รับการตรวจสอบอย่างเหมาะสม ก็มีโอกาสน้อยที่จะก่อให้เกิดภัยคุกคาม ค่าอื่นๆ (ข้อความไม่จำกัด อาร์เรย์ GET/POST และ HTML) จะตรวจสอบได้ยากกว่าและมีแนวโน้มที่จะมีข้อมูลที่เป็นอันตรายมากกว่า

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

    นอกจากการตรวจสอบข้อมูลอินพุตแล้ว ยังใช้วิธีการป้องกัน เช่น การป้องกัน บ่อยครั้งมาก ด้วยความช่วยเหลือ ข้อมูลจะถูกตรวจสอบเพื่อความปลอดภัยเมื่อเข้าสู่บริบทใหม่แต่ละบริบท โดยปกติวิธีนี้ใช้เพื่อป้องกันการเขียนสคริปต์ข้ามไซต์ (XSS) แต่ยังใช้ในงานอื่นๆ อีกมากมายในฐานะเครื่องมือกรอง

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

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

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

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

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

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

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

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

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

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

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

    ตัวแทน แห่งไอร์แลนด์ สหราชอาณาจักร
    แบบฟอร์ม HTML สามารถกำหนดข้อจำกัดเกี่ยวกับข้อมูลที่ป้อนได้ คุณสามารถจำกัดการเลือกโดยใช้รายการคงที่ ตั้งค่าต่ำสุดและสูงสุด และยังจำกัดความยาวของข้อความได้ด้วย ความเป็นไปได้ของ HTML 5 นั้นกว้างยิ่งขึ้นไปอีก เบราว์เซอร์สามารถตรวจสอบ URL และที่อยู่อีเมล และควบคุมวันที่ ตัวเลข และช่วงได้ (แม้ว่าการสนับสนุนสำหรับสองรายการหลังจะค่อนข้างขาด ๆ หาย ๆ ก็ตาม) เบราว์เซอร์ยังสามารถตรวจสอบอินพุตโดยใช้นิพจน์ทั่วไปของ JavaScript ที่รวมอยู่ในแอตทริบิวต์เทมเพลต

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

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

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

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

    ยืนยัน(0 == "0ABC"); //ส่งคืน TRUE assert(0 == "ABC"); //คืนค่า TRUE (แม้จะไม่มีตัวเลขอยู่ต้นก็ตาม!) assert(0 === "0ABC"); //ส่งคืนค่า NULL/เตือนว่าไม่สามารถตรวจสอบคำสั่งได้
    เมื่อออกแบบเครื่องมือตรวจสอบความถูกต้อง ตรวจสอบให้แน่ใจว่าคุณใช้การเปรียบเทียบที่เข้มงวดและการแปลงประเภทด้วยตนเองเมื่อค่าอินพุตหรือเอาท์พุตอาจเป็นสตริง ตัวอย่างเช่น แบบฟอร์มสามารถส่งคืนสตริงได้ ดังนั้น หากคุณกำลังทำงานกับข้อมูลที่ต้องเป็นจำนวนเต็ม โปรดตรวจสอบประเภทของแบบฟอร์ม:

    ฟังก์ชั่น checkIntegerRange($int, $min, $max) ( if (is_string($int) && !ctype_digit($int)) ( return false; // มีอักขระที่ไม่ใช่ตัวเลข ) if (!is_int((int) $int )) ( return false; // ค่าอื่นที่ไม่ใช่จำนวนเต็มหรือมากกว่า PHP_MAX_INT ) return ($int >= $min && $int = $min && $int array("verify_peer" => TRUE))); $body = file_get_contents("https://api.example.com/search?q=sphinx", false, $context);
    รปภ. ใน PHP 5.6+ ตัวเลือก ssl.verify_peer จะถูกตั้งค่าเป็น TRUE ตามค่าเริ่มต้น

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

    Curl_setopt(CURLOPT_SSL_VERIFYPEER, เท็จ);
    การปิดใช้งานการตรวจสอบเซิร์ฟเวอร์ในบริบท SSL หรือเมื่อใช้ curl_setopt() จะส่งผลให้เกิดช่องโหว่ต่อการโจมตีแบบแทรกกลาง แต่มันถูกปิดใช้งานอย่างแม่นยำเพื่อแก้ไขปัญหาข้อผิดพลาดที่น่ารำคาญซึ่งบ่งบอกถึงการโจมตีหรือแอปพลิเคชันที่พยายามติดต่อกับโฮสต์ที่มีการกำหนดค่าใบรับรอง SSL ไม่ถูกต้องหรือหมดอายุ

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

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

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

    วัสดุล่าสุดในส่วน:

    การไปสุสานในช่วงเวลาที่คุณมีประจำเดือน: ผลที่ตามมาคืออะไร?
    การไปสุสานในช่วงเวลาที่คุณมีประจำเดือน: ผลที่ตามมาคืออะไร?

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

    รูปแบบการถัก การเลือกด้ายและเข็มถัก
    รูปแบบการถัก การเลือกด้ายและเข็มถัก

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

    แจ็คเก็ตสีทันสมัย: ภาพถ่าย ไอเดีย ไอเท็มใหม่ เทรนด์
    แจ็คเก็ตสีทันสมัย: ภาพถ่าย ไอเดีย ไอเท็มใหม่ เทรนด์

    หลายปีที่ผ่านมา การทำเล็บแบบฝรั่งเศสเป็นหนึ่งในการออกแบบที่หลากหลายที่สุด เหมาะสำหรับทุกลุค เช่น สไตล์ออฟฟิศ...