ส่วนท้ายเต็มเป็นตัวอักษร 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 เราสามารถสรุปได้ว่าแอปพลิเคชันนั้นมีส่วนประกอบจำนวนหนึ่งซึ่งหากถูกแฮ็กสามารถก่อให้เกิดอันตรายร้ายแรงได้ อันไหนเช่น?
น่าเสียดายที่ปัญหาด้านความปลอดภัยมักได้รับการแก้ไขในภายหลัง เชื่อว่าสิ่งที่สำคัญที่สุดคือการสร้างแอพพลิเคชั่นที่ใช้งานได้ตรงตามความต้องการของผู้ใช้ภายในงบประมาณและกรอบเวลาที่ยอมรับได้ เป็นลำดับความสำคัญที่เข้าใจได้ แต่การรักษาความปลอดภัยไม่สามารถละเลยได้ตลอดไป เป็นการดีกว่ามากที่จะคำนึงถึงเรื่องนี้อย่างต่อเนื่องโดยใช้โซลูชันเฉพาะในระหว่างการพัฒนา เมื่อต้นทุนการเปลี่ยนแปลงยังมีน้อย
ลักษณะรองของการรักษาความปลอดภัยส่วนใหญ่เป็นผลมาจากวัฒนธรรมการเขียนโปรแกรม โปรแกรมเมอร์บางคนระเบิดเหงื่อออกเมื่อนึกถึงช่องโหว่ ในขณะที่คนอื่นๆ อาจโต้แย้งการมีอยู่ของช่องโหว่จนกว่าพวกเขาจะพิสูจน์ได้ว่ามันไม่ใช่ช่องโหว่เลย ระหว่างความสุดโต่งทั้งสองนี้ มีโปรแกรมเมอร์จำนวนมากที่เพียงแค่ยักไหล่เพราะสิ่งต่างๆ ยังไม่ผิดพลาดสำหรับพวกเขา เป็นเรื่องยากสำหรับพวกเขาที่จะเข้าใจโลกที่แปลกประหลาดนี้
เนื่องจากการรักษาความปลอดภัยแอปพลิเคชันบนเว็บจะต้องปกป้องผู้ใช้ที่ไว้วางใจบริการของแอปพลิเคชัน จึงจำเป็นต้องทราบคำตอบสำหรับคำถามต่อไปนี้:
ประเด็นของความหวาดระแวงนี้คือเพื่อให้ง่ายต่อการจัดหมวดหมู่ทุกสิ่งที่โต้ตอบกับแอปพลิเคชันเว็บของคุณ (“ผู้ใช้”, “แฮ็กเกอร์”, “ฐานข้อมูล”, “อินพุตที่ไม่น่าเชื่อถือ”, “ผู้จัดการ”, “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
เราจะหยุดพวกเขาได้อย่างไร? การเจาะระบบความปลอดภัยของเว็บแอปพลิเคชันอาจเป็นงานที่อาจทำได้ง่ายอย่างน่าขันหรือใช้เวลานานมาก เป็นเรื่องที่ยุติธรรมที่จะสรุปได้ว่าทุกเว็บแอปพลิเคชันมีช่องโหว่อยู่ที่ไหนสักแห่ง เหตุผลง่ายๆ คือ การสมัครทั้งหมดจัดทำโดยคน และผู้คนก็ทำผิดพลาด การรักษาความปลอดภัยที่สมบูรณ์แบบนั้นช่างเป็นความฝันที่ไพเราะ แอปพลิเคชันทั้งหมดอาจมีช่องโหว่และงานของโปรแกรมเมอร์คือการลดความเสี่ยงให้เหลือน้อยที่สุดคุณจะต้องคิดอย่างรอบคอบเพื่อลดโอกาสที่จะเกิดความเสียหายจากการโจมตีแอปพลิเคชันเว็บ เมื่อเรื่องราวดำเนินไป ฉันจะพูดถึงวิธีการโจมตีที่เป็นไปได้ บางส่วนของพวกเขาชัดเจนและคนอื่นไม่ได้ แต่ไม่ว่าในกรณีใด เพื่อแก้ไขปัญหา คุณต้องคำนึงถึงหลักการรักษาความปลอดภัยขั้นพื้นฐานบางประการด้วย
หลักการรักษาความปลอดภัยขั้นพื้นฐาน เมื่อพัฒนามาตรการรักษาความปลอดภัย สามารถประเมินประสิทธิผลได้โดยใช้การพิจารณาดังต่อไปนี้ ฉันได้อ้างถึงบางส่วนข้างต้นแล้วแหล่งความรู้ด้านความปลอดภัยเฉพาะทาง (เน้นที่ 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 อย่างน้อยที่สุดที่เราทำได้คือรักษาแอปพลิเคชันของเราให้มีมาตรฐานสูงที่กำหนดโดยเบราว์เซอร์ที่เตือนผู้ใช้และพยายามปกป้องพวกเขาจากการเชื่อมต่อกับเซิร์ฟเวอร์ที่น่าสงสัย
ข้อสรุป บ่อยครั้งที่เรามีความสามารถทั้งหมดในการสร้างแอปพลิเคชันที่ปลอดภัย แต่ตัวเราเองก็ข้ามข้อจำกัดที่สมเหตุสมผลบางประการเพื่ออำนวยความสะดวกในการพัฒนา การดีบัก และปิดการใช้งานเอาต์พุตของข้อผิดพลาดที่น่ารำคาญ หรือด้วยความตั้งใจที่ดี เรากำลังพยายามทำให้ตรรกะของแอปพลิเคชันซับซ้อนโดยไม่จำเป็นแต่แฮกเกอร์ก็ไม่กินขนมปังโดยเปล่าประโยชน์เช่นกัน พวกเขากำลังมองหาวิธีใหม่ๆ ในการหลีกเลี่ยงการป้องกันที่ไม่สมบูรณ์ของเรา และกำลังศึกษาช่องโหว่ในโมดูลและไลบรารีที่เราใช้ และหากเป้าหมายของเราคือการสร้างเว็บแอปพลิเคชันที่ปลอดภัย เป้าหมายของพวกเขาก็คือการประนีประนอมบริการและข้อมูลของเรา ท้ายที่สุดแล้ว เราทุกคนต่างทำงานเพื่อปรับปรุงผลิตภัณฑ์ของเรา