Làm cách nào tôi có thể ngăn người dùng chỉnh sửa mã của mình trong trình duyệt của họ?


11

Sự miêu tả

Tôi đang thiết kế một ứng dụng Node.JS (giống như một trang web đầy đủ). Ứng dụng sẽ gửi năm tệp JavaScript và sẽ có <script>các thẻ liên kết chúng lại với nhau.

Câu hỏi

Làm cách nào tôi có thể ngăn người dùng và kẻ tấn công nhìn trộm và chỉnh sửa mã của mình ?

  • Một ví dụ sẽ là:

    • Ctrl+ Shift+I

    • Trong Devtools , goto Nguồn , chọn một tệp để chỉnh sửa (nghĩa là index.html) và viết các chỉnh sửa

    • Nhấn Ctrl+ Ssẽ khiến chỉnh sửa trực tiếp xảy ra

Tôi muốn ngăn ví dụ trên xảy ra ... Có thể không?


Đây là những gì tôi nghĩ:

Tôi sẽ tạo một tệp JavaScript phía máy khách khác, notify_keys.js

Nó sẽ lắng nghe Ctrl+ Shift+ I.

Nếu nó trả về true(tức là các phím được nhấn), nó sẽ loglà các phím.

Tuy nhiên, điều đó sẽ không ngăn người dùng sử dụng Devtools trực tiếp.


16
Bạn không thể ngăn bất kỳ ai nhìn thấy hoặc sửa đổi javascript của bạn chạy trong trình duyệt. Không thể.
jfriend00

7
Chỉ vì câu trả lời cho một câu hỏi là Bạn không thể., Không có nghĩa là nó nên bị hạ cấp.
RubberDuck

1
Câu hỏi liên quan rất chặt chẽ: Chỉ xác thực JavaScript trên biểu mẫu AJAX . Đặc biệt kiểm tra câu trả lời được chấp nhận với ví dụ tầm thường về cách gửi một cuộc gọi POST, đến máy chủ của bạn, trông giống hệt với cuộc gọi đến từ máy khách của bạn, mặc dù thậm chí không đến từ trình duyệt web.
8bittree

Câu trả lời:


35

Bạn thực sự không thể ngăn người dùng truy cập và sửa đổi nội dung mà bạn đang gửi cho họ. Bạn không có quyền kiểm soát trình duyệt hoặc trình duyệt họ sử dụng hoặc thực tế họ có đang tải xuống mã nguồn của bạn thông qua trình duyệt hay không. Bạn đang thực thi mã của mình trên thiết bị của người khác. Bạn không nên và không thể thừa nhận bất cứ điều gì về tính toàn vẹn của thiết bị này.

Nếu bạn có mã mà bạn không muốn tiết lộ, đừng gửi nó tới trình duyệt. Thay vào đó, hãy để trình duyệt gửi yêu cầu đến máy chủ nơi bạn thực thi mã bí mật.

Như một ví dụ cụ thể, không kiểm tra mật khẩu trên máy khách. Máy khách có thể được sửa đổi để luôn báo cho máy chủ về mật khẩu chính xác mật khẩu. Thay vào đó, xác thực phải xảy ra trên máy chủ đáng tin cậy của bạn.


4
"Máy khách có thể được sửa đổi để luôn báo cho máy chủ về mật khẩu chính xác mật khẩu." ho libssh ho
Philip Kendall

Cảm ơn rất nhiều! Tôi đã gửi xử lý để đăng nhập, đăng xuất và đăng ký. Tôi đã thay đổi nó thành các tuyến đường trong máy chủ.
Edwin Pratt

23

Bạn không thể. Một trong những quy tắc cơ bản của điện toán: bạn không thể tin tưởng khách hàng . Bất cứ kế hoạch thông minh nào bạn nghĩ ra, tôi có thể làm tròn nó nếu tôi kiểm soát được khách hàng.


2
Tôi đã chuyển tất cả các trình xử lý xác thực, tải lên, tải xuống, userAccouts () vào bao gồm máy chủ.
Edwin Pratt

1
"Bạn không thể tin tưởng khách hàng" chỉ là một mặt của đồng tiền. Phía bên kia nói: "Bạn không phải là chủ sở hữu của khách hàng". Trình duyệt chạy javascript của bạn không phải của bạn, HĐH chạy trình duyệt không phải của bạn và phần cứng mà trình duyệt chạy không phải là của bạn. Dù chủ sở hữu của công cụ này có làm gì với dữ liệu bạn gửi cho họ không phải là việc của bạn . Đó là một vấn đề tôn trọng khách hàng của bạn để không cố gắng chiếm đoạt công cụ của họ.
cmaster - phục hồi monica

2

Tại sao bạn không muốn sửa đổi mã?

Bảo vệ? Lòng tin? Bí mật thương mại?

Sau đó, không gửi mã, yêu cầu khách hàng gửi yêu cầu và trả lại kết quả. Có thể không phải là một kết quả riêng tư hoặc đặc quyền, chỉ cần thực hiện là đủ cho nhiều UI.

Bởi vì các phiên bản sửa đổi một chút của mã của riêng bạn đang làm tổn thương dòng dưới cùng của bạn?

Sử dụng một trình che khuất mã, trình quản lý tên và các phân đoạn mã tầm thường.

Những kỹ thuật này nâng cao mức độ kỹ năng thực tế và công cụ cần thiết để tạo một biến thể nhỏ của trang web của bạn. Chỉ cần lưu ý rằng các kỹ thuật này có thể làm cho mã của bạn chậm hơn, có thể đưa ra các lỗi và thông báo lỗi thú vị và vô nghĩa, nhưng vẫn có thể được khắc phục bởi ai đó với các công cụ và / hoặc kỹ năng phù hợp. Vì vậy, thực sự xem xét nếu đó là giá trị nó. Vào cuối ngày, bất cứ ai cũng có thể thực sự viết cùng một mã.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.