ฉันจะป้องกันผู้ใช้จากการแก้ไขรหัสของฉันในเบราว์เซอร์ของพวกเขาได้อย่างไร


11

ลักษณะ

ฉันออกแบบแอปพลิเคชั่น Node.JS (เหมือนเว็บไซต์เต็มรูปแบบ) แอพจะส่งไฟล์ JavaScript ห้าไฟล์และจะมี<script>แท็กเชื่อมโยงเข้าด้วยกัน

คำถาม

ฉันจะป้องกันผู้ใช้และผู้โจมตีโจมตีและแก้ไขโค้ดได้อย่างไร

  • ตัวอย่างจะเป็น:

    • Ctrl+ Shift+I

    • ในDevtoolsให้ไปที่Sourcesเลือกไฟล์ที่จะแก้ไข (เช่นindex.html) และเขียนการแก้ไข

    • การกดCtrl+ Sจะทำให้การแก้ไขสดเกิดขึ้น

ฉันต้องการป้องกันตัวอย่างข้างต้นไม่ให้เกิดขึ้น ... เป็นไปได้หรือไม่


นี่คือสิ่งที่ฉันคิดว่า:

ฉันจะสร้างไฟล์ JavaScript ฝั่งไคลเอนต์อีกไฟล์ Prevent_keys.js

มันจะฟังCtrl+ +ShiftI

ถ้ามันกลับมาtrue(เช่นกดปุ่ม) มันจะlogคีย์

อย่างไรก็ตามนั่นจะไม่หยุดผู้ใช้จากการใช้ Devtools โดยตรง


16
คุณไม่สามารถป้องกันไม่ให้ใครเห็นหรือแก้ไขจาวาสคริปต์ของคุณที่ทำงานในเบราว์เซอร์ ลาด.
jfriend00

7
เพียงเพราะคำตอบของคำถามคือ“ คุณทำไม่ได้” ไม่ได้หมายความว่าควรจะถูกลดระดับลง
RubberDuck

1
คำถามที่เกี่ยวข้องอย่างใกล้ชิด: การตรวจสอบความถูกต้องของ JavaScript ในแบบฟอร์ม AJAXเท่านั้น ลองดูคำตอบที่ได้รับการยอมรับพร้อมตัวอย่างเล็ก ๆ น้อย ๆ เกี่ยวกับวิธีส่งการโทร POST ที่เซิร์ฟเวอร์ของคุณดูเหมือนกับคำตอบที่มาจากลูกค้าของคุณแม้ว่าจะไม่ได้มาจากเว็บเบราว์เซอร์ก็ตาม
8bittree

คำตอบ:


35

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

หากคุณมีรหัสที่คุณไม่ต้องการเปิดเผยอย่าส่งไปยังเบราว์เซอร์ ให้เบราว์เซอร์ส่งคำขอไปยังเซิร์ฟเวอร์ที่คุณใช้รหัสลับแทน

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


4
"ไคลเอ็นต์สามารถแก้ไขได้เพื่อแจ้งเซิร์ฟเวอร์เสมอว่า" รหัสผ่านถูกต้อง "" ไอ libssh ไอ
ฟิลิปเคนดัลล์

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

23

คุณทำไม่ได้ หนึ่งในกฎพื้นฐานของการคำนวณ: คุณไม่สามารถเชื่อถือลูกค้าได้ ไม่ว่าคุณจะคิดแผนการที่ฉลาดเท่าไรฉันก็สามารถปัดเศษได้ถ้าฉันควบคุมลูกค้าได้


2
ฉันย้ายการตรวจสอบความถูกต้องอัปโหลดดาวน์โหลดตัวจัดการ userAccouts () ไปยังเซิร์ฟเวอร์ของรวม
Edwin Pratt

1
"คุณไม่สามารถเชื่อลูกค้าได้" เป็นเพียงด้านเดียวของเหรียญ อีกด้านหนึ่งพูดว่า: "คุณไม่ใช่เจ้าของของลูกค้า" เบราว์เซอร์ที่ใช้งานจาวาสคริปต์ไม่ใช่ของคุณระบบปฏิบัติการที่ใช้งานเบราว์เซอร์ไม่ใช่ของคุณและฮาร์ดแวร์ที่เบราว์เซอร์ทำงานนั้นไม่ใช่ของคุณ สิ่งที่เจ้าของของสิ่งนี้เกิดขึ้นจะทำอย่างไรกับข้อมูลที่คุณส่งให้พวกเขาเป็นใครของธุรกิจของคุณ มันเป็นเรื่องของการเคารพสำหรับลูกค้าของคุณที่จะไม่พยายามแย่งชิงสิ่งที่พวกเขา
cmaster - คืนสถานะโมนิก้า

2

ทำไมคุณไม่ต้องการแก้ไขรหัส?

การรักษาความปลอดภัย? ความน่าเชื่อถือ? ความลับทางการค้า?

จากนั้นอย่าส่งรหัสรับลูกค้าเพื่อส่งคำขอและส่งคืนผลลัพธ์ อาจไม่ได้ผลลัพธ์ที่เป็นส่วนตัวหรือมีสิทธิพิเศษเพียงทำเสร็จก็เพียงพอสำหรับ UIs จำนวนมาก

เพราะรหัสของคุณที่ถูกดัดแปลงเล็กน้อยทำให้คุณเจ็บหรือเปล่า?

ใช้ obscurer รหัส mangler ชื่อและส่วนรหัสเล็กน้อย

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.