การตรวจจับเครื่องยนต์ฟอรัมโดยอัตโนมัติ การตรวจหากลไกฟอรัมโดยอัตโนมัติ ดัชนีไฟล์ บอร์ด php

เรามาเริ่มกันทันทีด้วยรหัสสคริปต์หลัก:

#!/usr/bin/perl

สคริปต์ # which-forum.pl
# (c) 2010 Alexandr A Alexeev, http://website/

ใช้อย่างเข้มงวด

# บรรทัดความคิดเห็น - เพื่อความเข้มงวด
# ถ้างานคือการรวบรวมสถิติของเครื่องยนต์ ปล่อยไว้ตามที่เป็นอยู่
# หากคุณสร้างรายการฟอรัม - ไม่แสดงความคิดเห็น

ข้อมูล $ ของฉัน ;
$data .= $_ ในขณะที่ (<> ) ;

# ตรวจสอบจำนวนที่ Powered by phpBB ไม่มีลิงค์ส่วนท้าย
พิมพ์ "phpbb \n"
ถ้า ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?phpbb\.com\/?"[^>]*>phpBB/iหรือ
# $data =~ /viewforum\.php\?[^""]*f=\d+/i หรือ
$data =~ /phpBB\-SEO/i หรือ
$ข้อมูล =~ /) ;
พิมพ์ "ipb \n"
ถ้า ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?invision(?:board|power)\.com\/?[^"]*"[^>]*> [^<]*IP\.Board/i หรือ
$ข้อมูล =~ /]+href="[^"]*http:\/\/(?:www\.)?invisionboard\.com\/?"[^>]*>Invision Power Board/iหรือ
$ข้อมูล =~ /

/ฉันหรือ
$ข้อมูล =~ /index\.php\?[^""]*showforum=\d+/i) ;
พิมพ์ "vbulletin \n"
ถ้า ($data =~ /ขับเคลื่อนโดย:?[^<]+vBulletin[^<]+(?:Version)?/i หรือ
$ข้อมูล =~ /) ;
พิมพ์ "smf \n"
ถ้า ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?simplemachines\.org\/?"[^>]*>ขับเคลื่อนโดย SMF/iหรือ
$ข้อมูล =~ /index\.php\?[^""]*board=\d+\.0/i) ;
พิมพ์ "punbb \n"
ถ้า ($data =~ /]+href="[^"]*http:\/\/(?:(?:www\.)?punbb\.org|punbb\.informer\.com)\/?"[^>]*> PunBB/i) ; #หรือ
# $data =~ /viewforum\.php\?[^""]*id=\d+/i);
พิมพ์ "fluxbb \n"
# if($data =~ /viewtopic\.php\?id=\d+/i หรือ
ถ้า ( $data =~ /]+href="http:\/\/(?:www\.)fluxbb\.org\/?"[^>]*>FluxBB/i) ;
พิมพ์ "exbb \n"
ถ้า ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?exbb\.org\/?"[^>]*>ExBB/i) ; # หรือ
# $data =~ /forums\.php\?[^""]*forum=\d+/i);
พิมพ์ "ยั๊บ \n"
ถ้า ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?yabbforum\.com\/?"[^>]*>YaBB/iหรือ
$data =~ /YaBB\.pl\?[^""]*num=\d+/i ) ;
พิมพ์ "dleforum \n"
ถ้า ($data =~ /\(ขับเคลื่อนโดยฟอรัม DLE\)<\/title>/ฉันหรือ
$ข้อมูล =~ /]+href="[^"]+(?:http:\/\/(?:www\.)?dle\-files\.ru|act=copyright)[^"]*">ฟอรัม DLE<\/a>/ฉัน) ;
พิมพ์ "iconboard \n"
ถ้า ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?ikonboard\.com\/?[^"]*"[^>]*>Ikonboard/iหรือ
$ข้อมูล =~ /\n"
ถ้า ($data =~ /\n"
# if($data =~ /forums\.php\?fid=\d+/i หรือ
# $data =~ /topic\.php\?fid=\d+/i หรือ
ถ้า ($data =~ /]+href="http:\/\/(?:www\.)?flashbb\.net\/?"[^>]*>FlashBB/i) ;
พิมพ์ "stokesit \n"
# if($data =~ /forum\.php\?f=\d+/i หรือ
ถ้า ($data =~ /]+href="http:\/\/(?:www\.)?stokesit\.com\.au\/?"[^>]*>[^\/]*สโตก IT/i) ;
พิมพ์ "แท่น \n"
# if($data =~ /topic\.php\?t=\d+/i หรือ
ถ้า ($data =~ /]+href=[""]?http:\/\/(?:www\.)?sopebox\.com\/?[""]?[^>]*>โพเดียม/i) ;
พิมพ์ "usebb \n"
# if($data =~ /forum\.php\?id=\d+/i หรือ
ถ้า ($data =~ /]+href="http:\/\/(?:www\.)?usebb\.net\/?"[^>]*>UseBB/i) ;
พิมพ์ "wrforum \n"
# if($data =~ /index\.php\?fid=\d+/i หรือ
ถ้า ($data =~ /]+href="http:\/\/(?:www\.)?wr\-script\.ru\/?"[^>]*>WR\-ฟอรัม/i) ;
พิมพ์ "ยังอื่น forumnet \n"
ถ้า ($data =~ /Yet Another Forum\.net/i หรือ
$ข้อมูล =~ /default\.aspx\?g=posts&t=\d+/i) ;

สคริปต์นี้และสคริปต์อื่น ๆ ที่กล่าวถึงในโพสต์สามารถพบได้ในไฟล์เก็บถาวรนี้

สคริปต์ ซึ่ง-forum.plตรวจสอบโค้ดหน้า html เพื่อดูว่ามีลายเซ็นเครื่องมือฟอรัมอยู่ในนั้นหรือไม่ เราใช้เทคนิคที่คล้ายกันเมื่อกำหนด WordPress และ Joomla แต่มีความแตกต่างเล็กน้อย ประการแรก ตัวสคริปต์เองไม่โหลดโค้ดเพจ แต่อ่านจาก stdin หรือไฟล์ที่ส่งผ่านเป็นอาร์กิวเมนต์ ซึ่งช่วยให้เราสามารถดาวน์โหลดหน้าเว็บได้เพียงครั้งเดียว เช่น ใช้ wget แล้วเรียกใช้ผ่านโปรแกรมแยกวิเคราะห์หลายตัว หากเรามีมากกว่าหนึ่งตัว ประการที่สอง ในสคริปต์นี้ การมีลายเซ็นเป็นสัญญาณ 100% ของเครื่องยนต์ ครั้งที่แล้ว การปรากฏตัวของลายเซ็นให้น้ำหนักกับเครื่องยนต์ที่เกี่ยวข้องเท่านั้นและ "ชนะ" เครื่องยนต์ที่มีน้ำหนักสูงสุด ฉันตัดสินใจว่าในกรณีนี้ วิธีการดังกล่าวจะทำให้โค้ดซับซ้อนโดยไม่จำเป็นเท่านั้น

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

ในการรับรายชื่อฟอรัม ฉันใช้โปรแกรมแยกวิเคราะห์ของ Google เครื่องมือค้นหาส่งคำขอเช่น

เว็บไซต์:forum.*.ru
ไซต์:talk.*.ru
เว็บไซต์:board.*.ru
เว็บไซต์:smf.*.ru
ไซต์:phpbb.*.ru
....

และอื่น ๆ รหัสเต็มตัวสร้างแบบสอบถามคุณจะพบในไฟล์ gen-forumsearch-urls.pl. นอกจากโซน .ru แล้ว ยังใช้ .su .ua .kz และ .by อีกด้วย การทำการศึกษาครั้งล่าสุดเป็นเรื่องยากเนื่องจากไซต์ WordPress และ Joomla ไม่มีลายเซ็นดังกล่าวใน URL แคตตาล็อก เช่น cmsmagazine.ru/catalogue/ มีขนาดตัวอย่างไม่เพียงพอ 600 ไซต์บน Drupal คืออะไร

ฉันต้องยอมรับว่าผลการทดลองทำให้ฉันผิดหวัง จากไซต์ 12,590 แห่งที่ศึกษา มีเพียง 7,083 เครื่องยนต์เท่านั้นที่สามารถระบุได้สำเร็จ นั่นคือ 56% ของกรณีเท่านั้น บางทีฉันไม่ได้คำนึงถึงเครื่องยนต์บางอย่าง? Bitrix ยืนอยู่บนฟอรัมครึ่งหนึ่งหรือไม่? หรือฉันควรใช้เวลามากขึ้นในการมองหาลายเซ็น? โดยทั่วไปจำเป็นต้องมีการวิจัยเพิ่มเติมที่นี่

ในบรรดา 56% ของเอ็นจิ้นที่ระบุได้สำเร็จนั้น IPB (31%), phpBB (26.6%) และ vBulletin (26.5%) เป็นที่นิยมมากที่สุดตามที่คาดไว้

ตามด้วย SMF (5.8%) และ DLEForum (5.3%) punBB ที่ฉันชอบคืออันดับที่ 6 เท่านั้น (1.64%) ฉันจะไม่แนะนำให้เชื่อตัวเลขเหล่านี้อย่างยิ่ง (พวกเขาบอกว่าทุก ๆ ฟอรัมที่สามใน Runet ทำงานบน IPB) แต่แน่นอนว่าสามารถสรุปได้

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

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

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

เป็นที่ชัดเจนว่าการใช้สคริปต์ที่มีชื่อนั้นไม่ใช่สคริปต์เดียว ฉันคิดว่าคุณสามารถเข้าใจได้ง่ายว่าคุณจะใช้งานมันอย่างไร

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

เทมเพลต

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

บอร์ดที่รองรับ

บอร์ดบางรุ่นมีฮาร์ดแวร์ที่กำหนดไว้ล่วงหน้า ในกรณีที่เป็นบอร์ดทั่วไป เรามี makefile ( /boards/base/xxx/board.mk) ซึ่งคุณสามารถรวมไว้ใน makefile โครงการของคุณเอง จากนั้นจะรวมไดรเวอร์ฮาร์ดแวร์มาตรฐานและไฟล์บอร์ดทั้งหมดโดยอัตโนมัติ นอกจากนี้ยังสามารถพบไฟล์บอร์ดที่กำหนดไว้ล่วงหน้าเพิ่มเติมได้ใน /boards/ส่วนเสริม.


ไฟล์ index.php เป็นไฟล์หลักของฟอรัมและใช้ในการดำเนินการเกือบทั้งหมด งานของเขาประกอบด้วยขั้นตอนต่อไปนี้:
1) การเชื่อมต่อ ไฟล์คอนฟิกูเรชัน database.php และ iboard.php
2) สร้างการเชื่อมต่อกับ DBMS และเข้าถึงฐานข้อมูล
3) อ่านข้อมูลจาก คุกกี้ของผู้ใช้หรือจากพารามิเตอร์ที่ส่งไปยังสคริปต์ ดึงข้อมูลเกี่ยวกับผู้ใช้รายนี้จากฐานข้อมูลและตรวจสอบความถูกต้องของผู้ใช้
4) ในกรณีที่การตรวจสอบไม่สำเร็จ (หรือขาดข้อมูลเกี่ยวกับผู้ใช้) ข้อมูลสำหรับโปรไฟล์ผู้ใช้ Guest จะถูกดึงเป็นข้อมูลผู้ใช้ ( ทะเบียนเลขที่ - 1).
5) การเชื่อมต่อไฟล์สไตล์และภาษาอินเทอร์เฟซ ผู้ใช้กำหนดในการตั้งค่าโปรไฟล์ของคุณ
6) หากพารามิเตอร์ t มีอยู่ในพารามิเตอร์การเรียกใช้สคริปต์ ข้อมูลเกี่ยวกับหัวข้อและฟอรัมที่ระบุจะถูกดึงมาจากฐานข้อมูล ซึ่งใน หัวข้อนี้ตั้งอยู่.
7) หากพารามิเตอร์ f มีอยู่ในพารามิเตอร์การเรียกใช้สคริปต์ ข้อมูลเกี่ยวกับฟอรัมจะถูกดึงมาจากฐานข้อมูล
8)หากมีพารามิเตอร์ t หรือ f แสดงว่าผู้ใช้มีสิทธิ์เพียงพอในการดูฟอรัมที่เกี่ยวข้องหรือไม่
9) กำลังเชื่อมต่อโมดูลที่ระบุในพารามิเตอร์ m หากไม่มีพารามิเตอร์ m ประเภทของโมดูลจะถูกกำหนดขึ้นอยู่กับประเภทของพาร์ติชันที่ใช้ การกระทำนี้. หากไม่ได้ระบุประเภทพาร์ติชัน จะมีการตรวจสอบเพื่อระบุว่าควรแสดงเป็นสิ่งใด หน้าแรก. ในกรณีที่เลือกส่วนใดส่วนหนึ่งเป็นหน้าหลัก โมดูลที่รับผิดชอบในการแสดงส่วนของประเภทที่เกี่ยวข้องจะเชื่อมต่ออยู่ มิฉะนั้น - โมดูล main.php ไฟล์สไตล์รวมอยู่ด้วยซึ่งมีชื่อเดียวกับปลั๊กอิน แต่อยู่ในไดเร็กทอรีย่อยของไดเร็กทอรีสไตล์ที่สอดคล้องกับสไตล์ที่เลือกในการตั้งค่าโปรไฟล์ผู้ใช้
10) มีการตรวจสอบพารามิเตอร์ a หากไม่ได้ตั้งค่าไว้อย่างชัดเจน จะมีการประกาศเท่ากับมุมมอง นอกจากนี้ หากมีการระบุส่วนเฉพาะและพารามิเตอร์เท่ากับมุมมอง จะถูกแทนที่ด้วย<имя_раздела>_ดู.
11) ขึ้นอยู่กับการดำเนินการที่ร้องขอ (ระบุไว้ในพารามิเตอร์การเรียกใช้สคริปต์ a) ไฟล์ tmplate1.php (หากการดำเนินการไม่มีคำนำหน้า do_) หรือไฟล์ tmplate2.php (มิฉะนั้น) เชื่อมต่ออยู่ ถัดไป การดำเนินการทั้งหมดที่แสดงในเทมเพลตที่เกี่ยวข้องจะถูกเรียกใช้ และแทนที่จะเป็นการดำเนินการ main_action การดำเนินการที่ระบุในพารามิเตอร์จะถูกเรียกใช้จริง
12) บันทึกฟอรัมประกอบด้วยข้อมูลเกี่ยวกับการดำเนินการ ตัวระบุและที่อยู่ IP ของผู้ใช้ที่ดำเนินการ
นอกจากนี้ในไฟล์ index.php ยังมีฟังก์ชันสำหรับจัดการข้อผิดพลาดร้ายแรงซึ่งออกแบบมาเพื่อแสดงข้อความแสดงข้อผิดพลาด ตลอดจนแก้ไขข้อความแสดงข้อผิดพลาดในไฟล์ error.log

กำลังโหลด...
สูงสุด