การป้องกันเมล์จาก SPAM และตรวจสอบไวรัสในระบบเมล์
จาก Research 2549, สารานุกรมฟรี
ชื่อผู้จัดทำ นนร.ธนะรัชต์ บุญสอด
สารบัญ |
บทคัดย่อ
Spam เมล์คือเมล์ที่เราไม่ต้องการ เป็นประเภทหนึ่งของ Junk เมล์ จุดประสงค์ของ spam mail นั้นผู้ส่งส่วนใหญ่ต้องการโฆษณาบริการต่างๆที่ตัวเองมี ทั่วไป spam mail เป็นการส่งอีเมล์แต่ละฉบับไปหาคนจำนวนมาก ที่สำคัญจะส่งผลไปถึงค่าส่งมันจะถูกลงเป็นอย่างมาก ด้วยเหตุนี้จึงทำให้ผู้ส่งส่วนใหญ่เลือกใช้วิธีนี้ในการโฆษณา แต่ผลของมันจะทำให้ผู้รับ mail เหล่านี้เกิดความลำคาญเป็นอย่างมากที่จะต้องคอยเปิดดู และคอยลบมันอยู่ตลอดเวลา จึงได้ทำการหาวิธีในการป้องกัน spam mail ทั้งการเขียนโปรแกรมขึ้นมาเอง หรือหาโปรแกรมสำเร็จรูปมาใช้การได้ในทันที
บทนำ
จากปัญหาที่ทุกๆคนได้ประสบณ์มา ในการใช้บริการ e-mail ก็คือปัญหาจาก spam mail ที่ทำให้เกิดความลำคาญเป็นอย่างมากในการที่จะต้องคอยลบ mail นั้นทิ้งไปหรือจะต้องเจอกับปัญหาพื้นที่การเก็บ e-mail ของผู้ใช้บริการเต็มอย่างรวดเร็ว ในทุกบริษัทหรือทุกองค์กรจึงพยายามที่หาวิธีในการแก้ปัญหานี้ ทางผู้จัดทำจึงได้รวบรวมและหาข้อมูลเกี่ยวกับปัญหานี้ เพื่อเป็นแนวทางในการแก้ไขปัญหาและศึกษาในโอกาสต่อๆไป
ประวัติความเป็นมา/ทฤษฏีพื้นฐานที่เกี่ยวข้อง
spam ในทางที่ทุกคนรู้กันก็คือ อาหารชนิดหนึ่งซึ้งเป็นเนื้อที่บรรจุอยู่ในกระป๋อง เป็นอาหารที่มีรสชาติที่ไม่น่านำมารับประทานมาก
เนื่องจากเห็นผลนี้ จึงนำเอา spam มาใช่เรียกสิ่งของที่ไม่มีไครต้องการหรือเป็นสิ่งของที่ไม่มีประโยชน์ ซึ้งนำไปถึงการเรียก mail ที่ผู้รับไม่ได้ต้องและเป็น mail ที่ไม่ได้ประโยชน์ต่อผู้รับเลย โดยทางผู้ใช้ e-mail จะเรียกเมล์เหล่านี้ว่า spam mail มาโดยตลอด
เนื้อเรื่อง (วิธีการ/รูปแบบการทำงาน)
SPAM
ในปัจจุบันการติดต่อสื่อสารทางจดหมายอิเล็กทรอนิกส์หรืออีเมล์เป็นที่นิยมใช้กันอย่างแพร่หลายทั้งในระดับองค์กรเพื่อติดต่อทางธุรกิจ หรือการติดต่อสื่อสารส่วนตัว ซึ่งอีเมล์แอดเดรสของเราก็เปรียบเสมือนการที่อยู่ทางไปรษณีย์นั่นเอง แต่จะแตกต่างกันก็คืออีเมล์แอดเดรสจะถูกส่งไปกับอีเมล์ที่เรารับ,ส่ง, ส่งต่อ ก็หมายถึงทุกครั้งที่เรารับ, ส่ง หรือ ส่งต่ออีเมล์จะทำให้คนที่อยู่ในกลุ่มผู้รับหรือผู้ที่รับอีเมล์ต่อจะรู้อีเมล์แอดเดรสของเราอย่างง่ายดาย หมายถึงโอกาสที่กลุ่มผู้สร้าง spam จะสามารถรู้อีเมล์แอดเดรสของเราและส่ง spam อีเมล์มาให้เราได้อย่างไม่ยากเลย
Spam คืออะไร spam จริงๆแล้วก็ไม่ได้เป็นคำย่อมาจากคำใดๆ และก็ไม่เคยมีความหมายในภาษาอังกฤษมาก่อน เพียงแต่เป็นคำแสลง ที่ใช้ในการเรียกอีเมล์ที่ส่งมาเพือมีจุดประสงค์ในการโฆษณาขายสินค้า, ประชาสัมพันธ์, บริจาค, ขอความช่วยเหลือ หรืออื่นๆ ซึ่งสร้างความรำคาญในกับผู้ใช้อีเมล์หากได้รับอีเมล์ประเภทนี้มาเกินไป
spam เกิดขึ้นได้อย่างไร ก็อย่างที่เรารู้กันว่าการส่งอีเมล์เป็นการสื่อสารที่เสียค่าใช่จ่ายน้อยและสามารถเข้าถึงกลุ่มผู้บริโภคได้จำนวนมาก พวกสร้าง spam ก็คือพวกที่ต้องการเข้าถึงกลุ่มผู้บริโภคให้ได้มากที่สุดเพื่อจุดประสงค์ในการ โฆษณาขายสินค้า, ประชาสัมพันธ์ ทางธุรกิจของตน จึงใช้วิธีการให้ได้มาซึ่งอีเมล์แอดเดรสของกลุ่มผู้บริโภคที่เป็นกลุ่มเป้าหมาย ซึ่งอาจเป็นได้จากหลายกรณี เช่น การที่เราส่งต่ออีเมล์ต่างๆ, การใช้อีเมล์แอดเดรสในการสมัครสมาชิกของกลุ่มข่าว หรือ สมัครสมาชิกของ website ต่างๆ เป็นต้น
วิธีการป้องกัน
จะเห็นได้ว่า spam เกิดจากการที่พวกที่สร้าง spam รู้อีเมล์แอดเดรสของเรา ดังนั้นการป้องกันที่สาเหตุที่ดีที่สุด คือการที่ป้องกันไม่ให้คนอื่นที่ไม่จำเป็นหรือไม่เกี่ยวข้องในติดต่อรู้อีเมล์แอดเดรสของเรา แต่ถ้าเราไม่สามารถป้องกันได้ที่สาเหตุตั้งแต่แรก และเราได้เคยได้รับ spam อีเมล์แล้ว เราก็สามารถการป้องกันได้ที่ปลายเหตุ โดยใช้ความสามารถของอีเมล์ไคลเอ็นท์ เช่น Microsoft Outlook ในการกรอง spam อีเมล์ หรือ/และร่วมกับความสามารถของอีเมล์เซอร์เวอร์ เช่น Microsoft Exchange หรือ ซอร์ฟแวร์ anti-spam เพิ่มเติม ตามความเหมาะสม โดยทั่วไปการป้องกัน spam สามารถทำได้ดังนี้
การใช้ Outlook ในการกรองอีเมล์ SPAM
ถ้าใช้ Outlook 2003 ในเครื่องคอมพิวเตอร์อยู่แล้ว จะเห็นได้ว่ามี folder ที่เรียกว่า Junk E-Mail. ซึ่งใน Folder นี้จะมีกลไกในการกรองอีเมล์ที่ไม่ต้องการออกไปจาก Inbox ซึ่งตัวกรองจะสามารถกำหนดได้หลากหลายรูปแบบ รวมทั้งเวลาที่อีเมล์ถูกส่งมา ตัวอย่างการทำงานของตัวกรองอีเมล์ของ Junk E-mail folder แสดงได้ดังนี้
1.กำหนดกลุ่ม "Safe Senders List" สำหรับกลุ่มคนที่เราติดต่ออยู่เป็นประจำ(ที่อยู่นอกเหนือจากคนที่อยู่ใน Outlook contact ของคุณ) ทำให้อีเมล์จากคนเหล่านั้นจะไม่ถูกส่งไปยัง Junk E-mail folder ซึ่งสามารถทำได้โดย เลือกอีเมล์ที่ส่งมาถึงเราใน Inbox ที่เราต้องการจัดให้ผู้ส่งอยู่ใน "Safe Senders List" แล้วไปที่เมนู Actions -> Junk E-mail -> Add Sender to Safe Senders List อีเมล์แอดเดรสของผู้ส่งอีเมล์ฉบับนั้นก็จะอยู่ใน "Safe Senders List"อัตโนมัติ
2.เพราะว่าเมื่อ Outlook ได้รับอีเมล์จากคนที่อยู่ใน Outlook contact จะส่งไปที่ Inbox ทันที ดังนั้นควรจะหมั่นอัปเดท Outlook contact สม่ำเสมอ เพื่ออำนวยความสะดวกในการค้นหาอีเมล์แอดเดรสของผู้ที่เราติดต่อด้วยและนอกจากนี้ยังมั่นใจได้ว่าอีเมล์จากพวกเขาเหล่านั้นจะไม่หลุดไปอยู่ใน Junk E-mail folder เพื่อเพิ่มความแม่นยำในการกรองอีเมล์ spam อีกด้วย
3.สามารถกำหนด Outlook ให้สามารถรับอีเมล์จากกลุ่มผู้ส่งใน "Safe Senders List" เข้าไปที่ Inbox เท่านั้นที่เหลือไปที่ Junk E-mail folder ก็ได้ หรือในทางกลับกันเราสามารถกำหนด "Blocked Senders List" ใน Outlook เพื่อให้ Outlook จัดการนำอีเมล์ที่ได้รับจากผู้ส่งที่อยู่ในรายชื่อนี้ไปใน Junk E-mail folder ทันที การกำหนดอีเมล์แอดเดรสให้เป็น "Blocked Senders List" ก็ทำคล้ายๆกับการทำ "Safe Senders List" ที่กล่าวไปแล้วข้างต้น
ถ้าหากยังไม่ได้ใช้ Outlook 2003 แต่ใช้ Outlook version ก่อนหรือ Microsoft Outlook Express ก็สามารถแก้ปัญหาเฉพาะหน้าได้เช่นกันโดย
-กำหนดชื่อผู้ส่งและทั้งโดเมน ที่ต้องสงสัยว่าจะเป็น SPAMใน "junk e-mail list"
-สร้างกฎที่จะทำให้ Outlook รู้จักอีเมล์ spam เช่นให้ใส่ flag หรือลบอีเมล์นั้นทิ้งเมื่อเจอ คำที่กำหนดเช่น spam, donation เป็นต้น อยู่ใน subject หรือเนื้อหาของอีเมล์
นอกจากนี้เรายังนำกฎเหล่านี้มาใช้เพื่อกำหนดสีของอีเมล์ที่ต้องสงสัยเพื่อที่จะสามารถแยกออกมาได้อย่างเด่นชัด แทนที่จะลบมันไปอัตโนมัติก็ได้ หากต้องการเรียนรู้วิธีการ กำหนดชื่อผู้ส่งและทั้งโดเมนที่ต้องสงสัยว่าจะเป็น SPAMใน "junk e-mail list" หรือวิธีการสร้างกฏ สามารถทำได้โดยกดปุ่ม F1 ใน Outlook 2002, Outlook 2000 หรือ Outlook express
หลีกเลี่ยงการตอบอีเมล์ SPAM
เพราะการตอบอีเมล์ spam ทำให้พวกผู้สร้าง spam รู้ว่าคุณยังใช้อีเมล์แอดเดรสและเมล์บ๊อกซ์นี้อยู่ ทำให้พวกผู้สร้าง spam จะส่งอีเมล์ spam มาอีก ทางที่ดีที่สุดคือลบอีเมล์ spam ทิ้งเมื่อคุณได้รับมัน
หากต้องใช้อีเมล์แอดเดรสในการลงทะเบียน website ใดๆให้อ่าน privacy policy ให้ละเอียด
สำหรับ website ที่ต้องการให้เราใช้อีเมล์แอดเดรสในการลงทะเบียน มักมี privacy policy ให้คุณอ่านและเลือกตอบ เช่น เราต้องการเปิดเผยข้อมูลและอีเมล์แอดเดรสของเราแก่ผู้ที่อยู่ในกลุ่มผู้ใช้ของ website หรือไม่ ?, อีเมล์ของเราต้องการให้เก็บเป็นความลับหรือไม่ ? เป็นต้น ดังนั้นเราจะต้องอ่านให้ละเอียดและเลือกตอบให้เหมาะสม
ลบข้อมูลของคุณจาก profile ต่างๆที่อาจค้นเจอได้โดยทางอินเตอร์เนต
ข้อนี้อาจทำได้ยากในทางปฎิบัติ แต่จากการสำรวจอย่างไม่เป็นทางการของผู้เขียนเอกสาร Crabby's top 10 spam-fighting tips พบว่าเมื่อทำการลบ profile ที่เราไปลงทะเบียนไว้หรือแสดงอีเมล์แอดเดรสของเราเอาไว้ ไม่ว่าจะเป็น Internet directory, กลุ่มข่าว หรือ discussion board พบว่าจำนวนอีเมล์ spam ลดลง
ไม่ควรส่งต่ออีเมล์ประเภท chain e-mail หรือ forward mail
ซึ่งปัจจุบันมี chain e-mail หลายรูปแบบ เช่นการบริจาคเงิน , บริจาคเลือด, การได้รับรางวัล ต่างๆ หรือ forward e-mail เช่นรูปภาพ, ข้อความ, ข่าว เป็นต้น หากต้องการส่งต่ออีเมล์ประเภทนี้ ก็ควรจะลบรายชื่อของผู้ที่ได้รับอีเมล์ก่อนหน้านี้ที่จะปรากฎอยู่เมื่อคุณกดปุ่ม Forward ทั้งนี้เป็นช่วยการป้องกันผู้ที่อยู่ในรายชื่อของผู้ที่ได้รับอีเมล์ก่อนหน้านี้ แต่อย่าลืมว่าผู้ที่ได้รับอีเมล์ต่อจากคุณอาจจะส่งต่อไปให้เพือนๆของเขา ซึ่งคุณก็มีโอกาสเสี่ยงในการที่พวกสร้างอีเมล์ spam จะรู้อีเมล์แอดเดรสของคุณอยู่ดี
การป้องกัน สแปมมีหลายวิธี ดังนี้
Canceln, UDP ,NoCeM แล้วก็สติ๊กเกอร์ ซึ่งสามวิธีแรกใช้ได้เฉพาะกับ Newsgroup และต้องติดตั้งโปรแกรม เพิ่มเติม ส่วนการติดสติ๊กเกอร์นั้นได้ผลในระดับหนึ่งเท่านั้น กล่าวคือหาก หุ่นยนต์ (Robot) สามารถเก็บลิ้งก์ของเราไปได้เรียบร้อยแล้ว การติดสติ๊กเกอร์ก็จะไม่สามารถทำอะไรกับเจ้าหุ่นยนต์นั้นได้ หลักการทำงานของสติ๊กเกอร์ คือ สร้างลิ้งค์ปลอม หลอกหุ่นยนต์ เวลาที่หุ่นยนต์สแกนลิ้งค์บนหน้าเว็บไซท์แล้ว เจอสติ๊กเกอร์ดังกล่าวเข้า โปรแกรมที่ซ่อนอยู่ภายใต้สติ๊กเกอร์จะผลิตลิ้งค์ปลอมจำนวนมหาศาลให้หุ่นยนต์ ทำให้หุ่นยนต์ไม่สามารถค้นห้าและเก็บข้อมูลจากลิ้งค์อื่น ๆ ได้ และจะหยุดทำงานไปในที่สุด เมื่อไม่มีพื้นที่ เก็บข้อมูลอีกต่อไป เนื่องจากพื้นที่เก็บข้อมมูลเต็มไปด้วยลิ้งค์ปลอมที่ถูกสร้างขึ้น ดังนั้นวิธีการติดสติ๊กเกอร์ จึงเป็นเพียงการป้องกันเท่านั้น ไม่ใช่การแก้ไข หากหน้าเวบไซท์ใดโดนเจ้าหุ่นยนต์เล่นงานเข้าแล้ว การติดสติ๊กเกอร์ภายหลังจึงต้องทำควบคู่กับวิธีการอื่น ๆ ด้วย ส่วนวิธีการอื่น ๆ ในการป้องกัน Spam-Comment ที่นิยมทำกันได้แก่ regular expression โดยการหารูปแบบ ข้อมูลที่หุ่นยนต์ส่งเข้ามา เมื่อมีการส่งความคิดเห็นไปยังเวบเซิพเวอร์โปรแกรมต้องตรวจสอบทุกครั้ง ว่าความคิดเห็นที่ส่งมาเป็น Spam หรือไม่ โดยใช้ regular expression ผลที่ได้จากวิธีนี้ ไม่คุ้มกับแรงงาน ที่เสียไป เพราะการหารูปแบบข้อมูลที่หุ่นยนต์ส่งเข้ามานั้น ต้องใช้ตรรกะและระยะเวลาในการคิดมาก แต่ Spammer สามารถเปลี่ยนแปลงข้อมูลเพียงเล็กน้อยก็สามารถเล็ดรอดระบบเข้าไปได้
วิธีที่นิยมใช้และได้ผลมากคือการแยกหุ่นยนต์ออกจากคน โดยใช้ robot.txt แต่วิธีการนี้จะใช้ไม่ได้ผล กับหุ่นยนต์ที่ปลอมตัวเก่ง สามารถปลอมเป็นคนเข้ามาส่ง spam ได้ วิธีการใช้วิธีแยกหุ่นยนต์ออกจากคน
อีกวิธีที่ได้ผลกว่าการใช้ robot.txt คือการสร้างไฟล์ภาพที่มีรหัสลับอยู่ในรูปภาพขึ้น จากนั้นก็ให้คนที่ต้องการ แสดงความคิดเห็นอ่านรหัสลับจากรูปภาพดังกล่าว แล้วส่งรหัสลับพร้อมกับความคิดเห็นไปยังเซิพเวอร์ หากรหัสลับถูกต้องความคิดเห็นก็จะได้รับการบันทึกลงในระบบ เนื่องจากหุ่นยนต์ไม่สามารถอ่านรหัสลับ จากรูปภาพได้ จึงไม่สามารถเล็ดรอดเข้าไปปล่อย Spam ในระบบได้ แต่วิธีการนี้เป็นการเพิ่มภาระให้ระบบ ในการสร้างไฟล์ภาพ และเพิ่มภาระอีกเล็กน้อยให้ผู้แสดงความคิดเห็นในการใส่รหัสลับ แต่ถือว่าเป็นวิธีการ ที่ดีมากอีกวิธีหนึ่ง
ส่วนวิธีการที่ได้ผลร้อยเปอร์เซ็นต์แต่ยุ่งยากคือการใช้ระบบสมาชิก ซึ่งวิธีนี้ทำให้ผู้ที่ต้องการแสดงความคิดเห็น เพียงเล็กน้อยหมดความตั้งใจในการแสดงความคิดเห็นได้ และเป็นวิธีที่ไม่สามารถใช้ได้กับทุกสถานการณ์ ยกตัวอย่างเช่น ระบบสมุดเยี่ยม สมุดเยี่ยมที่เขียนได้เฉพาะสามาชิกของระบบเท่านั้น คงไม่ใช่สมุดเยี่ยม ที่ดีเท่าไรนัก เป็นต้น
วิธีที่ใช้ในเวบ BioLawCom ของเราขณะนี้ เป็นวิธีที่นำหลักการของสติ๊กเกอร์มาปรับปรุงให้มีประสิทธิภาพ มากขึ้น โดยการเปลี่ยนชื่อลิ้งก์ที่นำไปสู่ส่วนที่ต้องแสดงความคิดเห็นในเวบไซท์อยู่ตลอดเวลา ทำให้หุ่นยนต์ ที่เข้ามาในเวบไซท์ต้องเก็บข้อมูลใหม่ทุกครั้งที่เข้ามา ทำให้หุ้นยนต์ทำงานมากขึ้น แต่ก็ไม่สามารถส่ง Spam เข้าสู่ระบบได้
สุดท้ายไม่ว่าเจ้าหุ่นยนต์ส่งสแปมจะยอมแพ้หรือไม่ ประสิทธิภาพการทำงานของมันก็จะลดลงไปเรื่อย ๆ โดยที่ระบบของเราแทบไม่ได้รับผลกระทบใด ๆ เลย เพื่อให้ง่ายต่อการเขียน ผมขอเรียกวิธีนี้ว่า Poison URL แล้วกันครับ
วิธีการนี้ตรงข้ามกับระบบ Friendly URL ที่ใช้บน CMS (Content Management System) หลาย ๆ ตัว Friendly URL ถูกพัฒนาขึ้นเพื่อให้ Search Engine ต่าง ๆ เก็บข้อมูลที่มีอยู่ในเวบไซท์ของเราได้ง่ายขึ้น
คำถามที่เกิดขึ้น คือ หากใช้ Poison URL แล้วจะส่งผลกระทบต่อ rating ของเวบไวท์บน Search Engine หรือไม่ ผมตอบอย่างไม่ลังเลครับว่า เกิดขึ้นอย่างแน่นอน แต่ที่สำคัญคือค่อนข้างน้อย เนื่องจาก Search Engine ใช้ meta-data พวก title, keywords และ description ในการเก็บข้อมูลมากกว่าการใช้ URL ซึ่งเท่าที่ผมทดลองใช้ Poison URL มาเป็นระยะเวลาเกือบสามเดือน ก็ไม่เห็นผลกระทบที่ชัดเจนสำหรับ rating ของเวบไซท์บน Search Engine (Google และ Yahoo! ยังคงเก็บข้อมูลจากเวบไซท์ของเราอย่างต่อเนื่อง) การเปลี่ยนแปลง URL ของลิงก์ต่าง ๆ นั้นไม่ได้เปลี่ยนแปลงทั้งหมด แต่จะเพิ่มข้อมูลตรวจสอบเพิ่มเติงลงไปใน URL เมื่อผู้ใช้งานเปิดหน้าเวบไซท์ที่มี Poison URL ระบบจะทำการตรวจสอบส่วนเพิ่มเติมดังกล่าวว่า ถูกต้องหรือไม่ หากไม่ถูกต้อง ข้อมูลต่าง ๆ ก็ยังสามารถเปิดดูได้ตามปกติ แต่ส่วนที่ใช้เขียนความคิดเห็น จะไม่ถูกแสดงผล นอกจากนี้ในส่วนของ Form ที่ใช้กรอกความคิดเห็นก็จะมีข้อมูลสำหรับการตรวจสอบ ซ่อนอยู่เช่นกัน หากส่งความคิดเห็นไปยังเวบเวิพเวอร์และถูกตรวจสอบได้ว่าข้อมูลดังกล่าวไม่ถูกต้อง ความคิดเห็นที่ส่งไปจะถูกตีตราว่าเป็นสแปมและถูกกำจัดออกจากสารระบบ
ดังนั้นสิ่งสำคัญที่สุดสำหรับ Poison URL คือข้อมูลตรวจสอบที่ซ่อนอยู่ใน URL และ Form ต้องได้รบการ เปลี่ยนแปลงตลอดเวลา โดยที่ผู้ใช้งานไม่รับรู้ถึงการเปลี่ยนแปลงดังกล่าว และระบบสามารถตรวจสอบได้ว่า ข้อมูลตรวจสอบดังกล่าวถูกต้องหรือไม่ การเปลี่ยนแปลงข้อมูลตรวจสอบตลอดเวลา ทำให้สแปมที่สามารถ หลุดรอดเข้าสู่ระบบมาได้นั้นสามารถเข้ามาได้เพียงครั้งเดียว การเข้ามาครั้งต่อ ๆ ไป เจ้าหุ่นยนต์ส่งสแปม ต้องเก็บข้อมูลตรวจสอบไปอีกครั้ง ดังนั้น หุ่นยนต์สามารถทำได้อย่างมากเพียงแค่แลกหมัดกับเราเท่านั้น เพราะข้อมูลตรวจสอบที่หุ่นยนต์เก็บไปนั้น
หากเปรียบไปแล้วก็เป็นสแปมสำหรับเจ้าหุ่นยนต์ ซึ่งการต่อสู้ครั้งนี้เราค่อนข้างได้เปรียบ เนื่องจากเราเป็นฝ่ายรุก มากกว่ารับ หากสแปมหลุดรอดเข้ามามากขึ้น เราก็เพิ่มความถี่ในการเปลี่ยนแปลงข้อมูลตรวจสอบ และเพิ่มขนาดของข้อมูลตรวสอบไปพร้อม ๆ กัน เพื่อทำให้หุ่นยนต์ทำงานหนักขึ้นสิ่งที่เราต้องการในการผลิตและเปลี่ยนแปลงข้อมูลตรวจสอบคือ เครื่องมือสำหรับสุข้อมูล (random) ในผลิตข้อมูลตรวจสอบที่มีประสิทธิภาพ และ เครื่องมือสำหรับตรวจสอบเวลา (cron) เป็นเหมือนนาฬิกาปลุก เพื่อให้ระบบเปลี่ยนแปลงข้อมูลตรวจสอบได้ในระยะเวลาที่เหมาะสม
เครื่องมือสำหรับสุ่มข้อมูลนั้น สร้างได้ไม่ยาก เนื่องเพราะ PHP มีฟังก์ชั่นที่สนับสนุนการสุ่มข้อมูลอยู่แล้ว เราสามารถเขียนโปรแกรมเพิ่มเติมอีกเล็กน้อย เพื่อให้ได้มาซึ่งเครื่องมือผลิตข้อมูลตรวจสอบดังนี้
function generate_key($length){ $extrakey=""; for($j=0;$j<$length;$j++){ while(true){ mt_srand((double)microtime()*1000000); $zufall=mt_rand(48,122); if(($zufall>=48 && $zufall<=57) || ($zufall>=65 && $zufall<=90) || ($zufall>=97 && $zufall<=122)){ $extrakey.=chr($zufall); break; } } } return $extrakey; }
ข้อมูลตรวจสอบที่ได้จะถูกเก็บไว้ในฐานข้อมูล เพื่อนำมาใช้ในภายหลัง ฐานข้อมูลนอกจากจะเป็นที่เก็บข้อมูล แล้ว ยังสามารถใช้เป็นนาฬิการปลุกในกำหนดเวลาเปลี่ยนข้อมูลตรวจสอบได้อีกด้วย
1. function generate_daykey(){ 2. // create table daykey( 3. // `id` int(10) unsigned NOT NULL auto_increment, 4. // `key1` varchar(50), 5. // `key2` varchar(50), 6. // `key3` varchar(50), 7. // `key4` varchar(50), 8. // `key5` varchar(50), 9. // `generate_on` datetime, 10. // PRIMARY KEY (`id`) 11. // ) TYPE=MyISAM; 12. if(mysql_num_rows(three_query( 13. "SELECT id FROM daykey WHERE generate_on>(NOW()-1000);")) 14. == 0){ 15. $key1=generate_key(5); 16. $key2=generate_key(5); 17. $key3=generate_key(5); 18. $key4=generate_key(5); 19. $key5=generate_key(5); 20. three_query("INSERT INTO daykey(key1,key2,key3,key4,key5,generate_on) 21. VALUES('$key1','$key2','$key3','$key4','$key5',NOW());"); 22. three_query("DELETE FROM daykey WHERE generate_on<(NOW()-60000);"); 23. three_query("OPTIMIZE TABLE `daykey`;"); 24. } 25. }
โค้ดที่อยู่ในคอมเมนต์คือโค้ด mysql สำหรับสร้างตารางเก็บข้อมูลตรวจสอบ ฟังก์ชั่น three_query() เป็นฟังก์ชั่นที่ผมเขียนขึ้นมาเอง ซึ่งไม่ได้มีอะไรพิเศษมากมาย การทำงานเหมือนกับ mysql_query() ปกติทั่วไป
ฟังก์ชั่น generate_daykey() จะทำการตรวจสอบก่อนว่าถึงเวลาที่ต้องเปลี่ยนข้อมูล หรือไม่ โดยใช้คำสั่ง WHERE generate_on>(NOW()-1000) generate_on เป็นข้อมูลประเภท date_time บนฐานข้อมูล mysql สำหรับ NOW()-1000 คือเวลา 1000 วินาทีก่อนหน้านี้ ดังนั้นคำสั่ง WHERE generate_on>(NOW()-1000) จึงใช้ตรวจสอบว่ามีข้อมูลตรวจสอบที่มีอายุเกินกว่า 1000 วินาทีหรือไม่ หากมีให้ผลิตข้อมูลตรวจสอบใหม่ ลบข้อมูลตรวจสอบที่มีอายุเกิน 60000 วินาทีทิ้ง และ Optimize ตารางที่ใช้บันทึกข้มูลตรวจสอบ เนื่องจาก ตารางถูกเปลี่ยนแปลงข้อมูลบ่อย ดังนั้นการ Optimize จึงเป็นเรื่องที่จำเป็น
นั่นหมายความว่าข้อมูลตรวสอบจะถูกใช้งานภายในระยะเวลา 1000 พันวินาที และมีอายุการใช้งาน 60000 วินาที เราจึงมีข้อมูลตรวจสอบอยู่ในตารางประมาณ 60 ชุด โดยแต่ละชุดมีรูปแบบให้เลือกใช้งานแตกต่างกัน 5 รูปแบบ (key1 - key5) การลดระยะเวลาการใช้งานของข้อมูลตรวจสอบจะทำให้ระบบถูกเจาะได้ยากขึ้น แต่ระบบต้องทำงานหนักขึ้น ส่วนการลดอายุของข้อมูลทำให้ระบบถูกเจอาะยากขึ้นแต่ผู้เยี่ยมชมเวบมีเวลาเขียนความคิดเห็นน้อยลง ส่วนการเพิ่มความยาวของข้อมูลตรวจสอบก็จะทำให้ระบบเก็บข้อมูลมากขึ้น ดังนั้นไม่ว่าจะเป็นระยะเวลาการใช้งาน อายุการใช้งาน และความยาวของข้อมูลตรวจสอบต้องมากเท่าที่จำเป็น และน้อยที่สุดเท่าที่จะเป็นไปได้ เพื่อให้ระบบทำงานได้เต็มประสิทธิภาพมากที่สุด เมื่อเราสามารถผลิตข้อมูลตรวจสอบได้แล้ว ขั้นต่อมาคือการนำมาใช้งาน การใช้งานข้อมูลตรวจสอบเราต้องการอีกสองฟังก์ชั่นคือ 1. function get_daykey($index){ 2. return mysql_result(three_query( 3. "SELECT key$index FROM daykey ORDER BY id DESC LIMIT 1"),0,0); 4. } สำหรับเรียกข้อมูลตรวจสอบเพื่อนำมาใช้งาน และ 1. function exist_daykey($index,$key){ 2. $day_key=three_query( 3. "SELECT id FROM daykey WHERE key$index='$key';"); 4. (mysql_num_rows($day_key) !=0)?$exist=true:$exist=false; 5. return $exist; 6. }
สำหรับตรวจสอบว่าข้อมูลตรวจสอบถูกต้องหรือไม่
การส่งข้อมูลตรวจสอบเพื่อป้องกันสแปมนั้นมีสองขั้นตอนดังที่ได้กล่าวไปแล้ว คือ ในขั้นตอนของการตรวจสอบ ผ่านลิ้งก์ และขั้นตอนการตรวจสอบผ่าน Form ดังนั้นระบบ Poison URL จึงต้องไฟล์ php ทั้งหมดสามไฟล์
โดยไฟล์แรก เป็นไฟล์ที่แสดงลิ้งก์ไปยัง Form ที่ใช้กรอกข้อมูลสำหรับแสดงความคิดเห็น ไฟล์ที่สอง ใช้ตรวจสอบ URL และส่งข้อมูลตรวจสอบต่อไปยังไฟล์ที่สาม ส่วนไฟล์ที่สามมีหน้าที่ตรวจสอบข้อมูล และบันทึกความคิดเห็น
หน้าตาโค้ดของไฟล์แรกจะมีหน้าตาประมาณนี้
1. <?php
2. generate_daykey();
3. echo("<a href='guestbook.php?daykey= ".get_daykey(1)."'>guestbook</a>");
4. ?>
ไฟล์แรกไม่มีหน้าที่อื่นใดนอกจากผลิตข้อมูลตรวจสอบด้วย generate_daykey() และรับข้อมูลจากฟังก์ชั่น get_daykey() ส่งไปให้ไฟล์ที่สอง คือ guestbook.php ทำการจรวสอบตัวแปร $GET[daykey] ดังนี้
1. <?php
2. if(exist_daykey(1,$_GET[daykey])){
3. echo("<form method='post' action='insert_guestbook.php'>
4. <input name='daykey' value='".get_daykey(2)."' type='hidden'>
5. <textarea name='guestbook'></textarea>
6. <input type='submit' value='เขียนสมุดเยี่ยม'>
7. </form>");
8. }
9. else{
10. echo("<a href='guestbook.php?daykey= ".get_daykey(1)."'>guestbook</a>");
11. }
12. ?>
ไฟล์ที่สองมีหน้าที่สามอย่างด้วยกันคือ ตรวจสอบว่า $_GET[daykey] ที่ส่งมาจากไฟล์ที่หนึ่งถูกต้องหรือไม่ ด้วยฟังก์ชั่น exist_daykey() หากถูกต้อง จึงแสดงฟอร์มที่ใช้กรอกความคิดเห็น (ในที่นี้ก็คือสมุดเยี่ยม) ซึ่งซ่อนข้อมูลตรวจสอบชุดที่สอง เพื่อให้ไฟล์ที่สามตรวจสอบต่อไป หากไม่ถูกต้องจะแสดงลิ้งก์ที่ถูกต้อง เพื่ออำนวยความสะดวกแก่ผู้ที่มาแสดงความคิดเห็น
เมื่อผู้มาเยี่ยมชมเวบไซท์เขียนความคิดเห็นเรียบร้อยแล้ว กดปุ่ม submit เพื่อส่งข้อมูลไปยังไฟล์ที่ 3 ซึ่งมีโค้ดดังนี้ 1. <?php 2. if(exist_daykey(2,$_POST[daykey])){ 3. insert_guestbook(); 4. } 5. ?>
หากข้อมูลถูกต้องจึงเพิ่มความคิดเห็นลงในฐานข้อมูลผ่านฟังก์ชั่น insert_guestbook() ในขั้นแรกหลายท่านอาจมองว่า Poison URL ค่อนข้างยุ่งยากเนื่องจากต้องใช้ฟังก์ชั่นต่าง ๆ หลายฟังก์ชั่น และมีขั้นตอนการใช้งานหลายขั้นตอน แต่เมื่อเทียบกับวิธีการอื่นแล้ว ถือว่า Poison URL มีความซับซ้อนน้อยกว่ามาก สำหรับท่านใดที่สนใจอยากนำ Poison URL ไปใช้งานบนเวบไซท์ของตัวเอง เหมือนเดิมครับ เอาไปใช้และปรับปรุงเปลี่ยนแปลงได้ตามต้องการ หากพบข้อบกพร่องกรุณาแจ้งให้ทราบด้วยครับ ผมจักได้ปรับปรุงพัฒนาตัวโปรแกรมต่อไป เพื่อต่อสู่กับเจ้าสแปมอันน่ารำคาญให้ลดน้อยหรือหมดไปเสียที
สรุป
spam mail นั้นเป็นปัญหาที่ทุกคนได้ประสบณ์กับมันเป็นจำนวนมากคำว่าspam กับ junk ในที่นี้จะจัดให้พวกเดียวกัน เพราะมีลักษณะที่เหมือนกับแต่อาจจะต่างกันที่การเรียกเท่านั้น และวิธีที่จะใช้ในการแก้ไขปัญหานี้ก็มีหลายวิธีเช่นการโปรแกรมมากทำการ
anti-spam หาผยายามเขียนโปรแกรมมาเพื่อป้องกันมัน และในเนื้อหาที่ได้ค้นหาและรวบรวมมานี้ก็มีวิธีในการแก้ปัญหานี้พอสมควร ถ้าผู้อ่านได้นำไปใชแก้ปัญหาหรือนำไปศึกษาต่อก็จะทำสามารถแก้ไขปัญหานี้ได้บ้าง สำหรับ spam mailก็จะไม่เป็นปัญหาต่อผู้ที่ได้อ่านและนำไปใช้อีกต่อไป
เอกสารอ้างอิง และเว็บลิงค์
ได้ค้นหามาจาก www.blognone.com ,www.pdti.kmutt.ac.th ,www.thaicert.nectec.or.th
