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

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

แผนของฉันคือ:

  1. ใช้ฟังก์ชันพิเศษ F (เช่น MD5SUM) ในไฟล์จาวาสคริปต์ C

    อินพุต: สตริงคุกกี้ของผู้ใช้ปัจจุบัน (คุกกี้จะเปลี่ยนไปในแต่ละคำตอบ)

    เอาท์พุต: สตริงการตรวจสอบ V

  2. ส่ง V พร้อมกับพารามิเตอร์อื่นๆ ไปยังอินเทอร์เฟซแบ็กเอนด์ที่ละเอียดอ่อนเพื่อขอข้อมูลอันมีค่า

  3. เซิร์ฟเวอร์แบ็กเอนด์มีฟังก์ชันตรวจสอบความถูกต้อง T เพื่อตรวจสอบว่า V ถูกต้องหรือไม่

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

อันที่จริงมี obfuscators js มากมาย แต่ฉันจะบรรลุเป้าหมายโดยการใช้ฟังก์ชันตัวสร้าง G ซึ่งไม่ปรากฏใน C

G(K) สร้าง F โดยที่ K เป็นจำนวนเต็มขนาดใหญ่ F ควรซับซ้อนเพียงพอ ดังนั้นผู้เขียนโปรแกรมรวบรวมข้อมูลต้องใช้เวลาหลายชั่วโมงในการทำความเข้าใจ F เมื่อพิจารณาจาก K' อีกตัว G(K') = F', F' ควรดูเหมือนฟังก์ชันใหม่ในบางขอบเขต และอีกครั้ง ผู้เขียนโปรแกรมรวบรวมข้อมูล ต้องใช้เวลาหลายชั่วโมงในการถอดรหัส

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

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


person ShenLei    schedule 28.07.2017    source แหล่งที่มา
comment
โปรแกรมรวบรวมข้อมูลที่ดีจะผ่านมันไปได้... ปกป้องข้อมูลของคุณผ่านกลไกการเข้าสู่ระบบ   -  person Salketer    schedule 28.07.2017
comment
@Salketer คุณหมายถึง captcha (หรือเข้าสู่ระบบด้วย captcha) หรือไม่? การเข้าสู่ระบบสามารถแก้ไขได้ เป็นเพียงคำขอ http เท่านั้น   -  person Ryosaku    schedule 28.07.2017
comment
@Salketer ใช่ คำขอทั้งหมดในโพสต์ของฉันอยู่ในสถานะเข้าสู่ระบบ ไม่มีคำขอที่ไม่ระบุชื่อเนื่องจากอินเทอร์เฟซที่ละเอียดอ่อนสามารถเข้าถึงได้โดยผู้ใช้ที่เข้าสู่ระบบเท่านั้น   -  person ShenLei    schedule 28.07.2017


คำตอบ (1)


การใช้การเข้าสู่ระบบเพื่อป้องกันไม่ให้คนทั้งโลกเห็นข้อมูลเป็นทางเลือกหนึ่ง

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

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

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

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

ตอนนี้เพื่อบังคับใช้จาวาสคริปต์

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

ซึ่งส่วนใหญ่ไม่สามารถทำได้ เนื่องจากโปรแกรมรวบรวมข้อมูลสามารถเข้าถึงทุกสิ่งที่จาวาสคริปต์ของลูกค้าสามารถเข้าถึงได้

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

สิ่งที่ควรทำ

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

คิดถึงผู้ใช้จริงของคุณ

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

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

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

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

person Salketer    schedule 28.07.2017
comment
ขอบคุณสำหรับการตอบกลับของคุณ ฉันจะโหวต +1 สำหรับข้อมูลเชิงลึก แต่คำตอบอยู่นอกหัวข้อ ฉันต้องการสร้างไฟร์วอลล์หลายตัวเพื่อปกป้องโปรแกรมรวบรวมข้อมูล อันแรกคือการบังคับให้โปรแกรมรวบรวมข้อมูลรัน PhantomJS จริงๆ แล้ว พวกเขาสามารถจำลองพฤติกรรมของผู้ใช้ได้ แต่พวกเขาจะจ่ายมากกว่า urlopen แบบธรรมดามาก หากพวกเขาไม่เข้าใจสิ่งที่ js ของฉันทำ พวกเขาจะต้องเรียกใช้มันเป็นครั้งคราว การป้องกันอื่นๆ เช่น การนับแบ็กเอนด์/แคปต์ชา ถือเป็นไฟร์วอลล์เพิ่มเติมที่อยู่เบื้องหลังสิ่งนี้ - person ShenLei; 29.07.2017
comment
สิ่งที่ฉันพูดคือไม่จำเป็นต้องใช้ phantomJS พวกเขาเพียงแค่ใช้จาวาสคริปต์ไฟร์วอลล์ของคุณและรันบนโปรแกรมรวบรวมข้อมูล nodeJS ของพวกเขา ไม่มีวิธีที่แน่นอนในการบังคับ phantomJS มีวิธีทำให้การบำรุงรักษา/ค่าใช้จ่ายของคุณสูงขึ้น ทุกอย่างขึ้นอยู่กับสาเหตุที่ข้อมูลของคุณมีความเป็นส่วนตัวมาก - person Salketer; 29.07.2017
comment
และถึงแม้ว่าจะไม่ตอบคำถามของคุณเกี่ยวกับวิธีการแบ่งส่วน แต่ฉันอยากจะคิดว่ามันยังอยู่ในหัวข้อ เพราะมันอธิบายได้อย่างมากว่าทำไมคุณถึงทำไม่ได้ - person Salketer; 29.07.2017
comment
บางทีฉันอาจจะแสดงออกไม่ชัดเจน ฉันต้องการบังคับให้โปรแกรมรวบรวมข้อมูลรันโปรแกรม js ของฉันในเบราว์เซอร์จริง ๆ หรือ PhantomJS หรือ node.js หรือตัวดำเนินการ / ตัวจำลอง js อื่น ๆ - person ShenLei; 29.07.2017
comment
บางทีฉันอาจจะแสดงออกไม่ชัดเจน หากจาวาสคริปต์สามารถทำได้ ActionScript, C#, C++, C, Python, PHP, Go และเพื่อนๆ ทุกคนก็สามารถทำได้เช่นกัน - person Salketer; 29.07.2017
comment
ใช่แล้ว นั่นคือส่วนหลัก! หากจาวาสคริปต์สามารถทำได้ ภาษาอื่นก็สามารถทำได้เช่นกัน อย่างไรก็ตาม คุณต้องเข้าใจว่า js ของฉันทำอะไร จากนั้นคุณจึงเขียนมันใหม่เป็นภาษาอื่นได้ ปัญหาคือ ถ้า js ของฉันเข้าใจยาก ค่าใช้จ่ายในการเขียนซ้ำก็ยอมรับไม่ได้ ไม่ต้องพูดถึง F อาจมีการเปลี่ยนแปลง นั่นเป็นเหตุผลว่าทำไมเครื่องกำเนิดไฟฟ้า G(K) จึงมีความสำคัญมาก - person ShenLei; 29.07.2017