2010-11-15 30 views
22

Tôi đang viết một công cụ trang web mạnh mẽ, có thể mở rộng và khá phức tạp bằng cách sử dụng HTMl, CSS và JavaScript. Tôi không muốn nó bị gạt đi, và tôi tự hỏi liệu có cách nào để bảo vệ nguồn không bị xem trong máy khách hay không.Cách tốt nhất để bảo vệ HTML/CSS/JavaScript độc quyền là gì?

Tôi đặc biệt quan tâm đến JavaScript và tôi tự hỏi liệu tôi có thể bảo vệ nó bằng cách lưu trữ nó trong các tệp riêng biệt không thể xem trực tiếp được không. Tôi có toàn quyền kiểm soát máy chủ web của mình và tôi có thể thay đổi bất kỳ cài đặt nào để chứa.

+2

Giống như nhiều câu hỏi trước, bao gồm [Cách mã hóa HTML, CSS và JavaScript để ngăn chặn hành vi trộm cắp] (http://stackoverflow.com/questions/3247270/how-to-encrypt-html-css-and-javascript- để ngăn chặn hành vi trộm cắp), [Một số cách hay để ngăn người khác sao chép mã nguồn của tôi là gì? ] (http://stackoverflow.com/questions/2562775/what-are-some-good-ways-to-prevent-people-from-copying-my-source-code) và [Cách tốt nhất để mã hóa/bảo vệ mã javascript?] (http://stackoverflow.com/questions/3904141/what-is-the-best-way-to-encode-protect-a-javascript-code). –

Trả lời

18

Không, bạn không thể làm điều đó.

Mọi thứ sẽ chuyển sang trình duyệt (ứng dụng khách). Bạn có thể làm xáo trộn uglify, minify hoặc whatnot với nó, nhưng cuối cùng nó là một shot dễ dàng để "mã hóa" một lần nữa.

Bạn cũng không thể ẩn nó vì bạn muốn trình duyệt nhận tất cả các nguồn của bạn. Vì vậy, ngay cả khi bạn làm một số di chuyển sôi nổi như, "tải javascript với chèn thẻ script động và loại bỏ các thẻ script sau đó". Điều đó có thể hiệu quả đối với một số người dùng chưa có kinh nghiệm, nhưng sử dụng công cụ như Fiddler sẽ hiển thị sự thật một lần nữa.

8

Vâng, câu trả lời phổ biến sẽ là "không đặt nó trên web". Tuy nhiên, bạn có thể làm xáo trộn javascript của bạn rất nhiều, thông thường, không ai bận tâm ăn cắp nó. Loại bỏ chức năng và tên biến và tương tự sẽ diễn ra một chặng đường dài. Nói chung nó sẽ dễ dàng hơn để bắt đầu từ đầu.

+1

Điều đó có lẽ sẽ là giải pháp mà tôi quyết định khám phá. – user161190

+0

Có tất cả javascript của bạn trong một tập tin cũng tốt cho hiệu suất cũng như obfuscation, có thể bạn có thể nhúng và ẩn JS tùy chỉnh của bạn trong một thư viện JS phổ biến, khá dễ đọc như jQuery. Không ai có thể nhận ra. –

+1

@Andrew M, bạn vừa mới nhận ra điều đó. –

11

Bạn chỉ đơn giản là không thể làm điều đó. Obfuscating javascript và CSS của bạn với một minimizer có lẽ là gần nhất bạn có thể nhận được.

+0

-1 Điều đó sẽ không giúp ích chút nào, có những bộ làm đẹp sẽ làm sáng tỏ mã nhanh như bạn có thể làm xáo trộn nó. – Ben

+6

@Steve - Có, có các công cụ để hoàn tác giảm thiểu, nhưng chúng vẫn không tạo ra hàm có ý nghĩa và tên biến từ rác. Vì vậy, mã sẽ có phần dễ đọc hơn, nhưng vẫn khó giải mã. –

5

Bạn không thể đặt nó trên internet hoặc chỉ có thể truy cập thông qua mạng nội bộ; nhưng không có cách nào để ngăn chặn khách hàng truy cập vào html/css/JS một cách đáng tin cậy, mà không ngăn cản họ truy cập vào trang web.

Obfuscation sẽ ngăn chặn các nỗ lực bình thường và duyệt web tò mò, nhưng sẽ không ngăn chặn kẻ tấn công/trình duyệt được xác định vì tất cả được triển khai ở phía máy khách.

3

Bạn có thể sử dụng trình chặn obfuscator JavaScript. Nó sẽ làm cho mã khó đọc. Họ vẫn có thể "tách nó ra", nhưng nó sẽ rất khó hiểu và do đó sửa đổi nó. Không có cách nào bạn có thể ẩn mã hoàn toàn.

33

Bất kể bạn làm xáo trộn mã như thế nào, bất kỳ ai cũng có thể sao chép những gì bạn đang làm chỉ bằng cách nhìn thấy nó. Nó có thể mất nhiều thời gian hơn để viết nó từ đầu, nhưng không có nhiều bạn có thể làm về điều đó.

Tùy chọn thực sự duy nhất của bạn để bảo vệ liên quan đến việc cấp bản quyền mã và, có khả năng, gửi bằng sáng chế. Nếu những gì bạn đang làm thực sự khác biệt, thì bằng sáng chế có lẽ là cách tốt nhất để đi.

Thông thường giá trị trong ứng dụng của bạn thực sự sẽ nằm trong vùng hỗ trợ. Nói cách khác, mọi người sẽ mua nó nếu họ cảm thấy rằng bạn sẽ ở đủ lâu để hỗ trợ nó. Hãy nhận biết điều này khi bạn định giá nó.

Bạn sẽ thấy rằng sẽ có một số chỉ đơn giản là ăn cắp mã của bạn và sử dụng lại mã đó. Đừng lo lắng quá nhiều về họ vì họ sẽ không trả tiền cho khách hàng. Thay vào đó, hãy giúp khách hàng của riêng bạn dễ dàng mua và sử dụng nội dung của bạn. Đảm bảo bạn cung cấp hỗ trợ; đó là nơi mà giá trị thực sự sẽ đến từ đó.

+1

Đây không phải là câu trả lời đầu tiên như thế này, nhưng Chris là chính xác. Nếu những gì bạn đang làm thực sự là một cái gì đó độc đáo, cấp giấy phép và cấp bằng sáng chế là con đường để thực hiện. Bạn sẽ không thể ngăn ai đó khôi phục mã của mình, bất kể bạn làm xáo trộn mã như thế nào. Ngoài ra, bạn có nguy cơ làm cho mình trở nên tệ hại với phần còn lại của cộng đồng phát triển bằng cách cố gắng giấu những gì bạn đang làm. –

5

Giảm bớt HTML, CSS và JavaScript của bạn sẽ giúp một chút, nhưng mọi người luôn có thể định dạng lại.Đặt cược tốt nhất của bạn là nếu nội dung được gửi xuống cho khách hàng không giống như nội dung gốc mà bạn đang làm việc.

Điều đó có thể đạt được bằng cách:

  • tạo ra HTML của bạn từ một số khuôn khổ
  • tạo CSS của bạn qua SASS/LESS vv
  • sử dụng JavaScript biên dịch trên kịch bản của bạn (ví dụ: Google Closure Compiler)

Tuy nhiên, với tất cả những thứ đó, chỉ có cho đến nay bạn có thể đi. Việc biên dịch JavaScript của bạn sẽ làm cho việc theo dõi ý định ban đầu của bạn khó hơn, nhưng có lẽ không đủ khó khăn nếu ai đó đặt tâm trí của họ để đảo ngược kỹ thuật đó.

29

Làm ngược lại, giải phóng mã của bạn dưới dạng mã nguồn mở với giấy phép MIT/GPL. Đính kèm tên (doanh nghiệp) của bạn vào mã và được gọi là người đầu tiên tạo ứng dụng X. Danh tiếng giúp bạn có được nhiều nỗ lực hơn nữa để "bảo vệ mã của bạn" xa hơn.

  1. JS/Html/CSS thường khá dễ dàng với kỹ sư lạc hậu, họ không cần phải xem mã của bạn cả.
  2. Cơ hội là các mã JS của bạn đã tồn tại và được viết bởi người khác vào năm 2001.
  3. Mã phức tạp hơn, càng khó lấy cắp tài sản trí tuệ, đặc biệt nếu bạn mở nó.

Có thực sự không có lý do lành mạnh để bảo vệ mã của bạn nơi JS/CSS/HTML là có liên quan, tốt nhất bạn có thể làm là bảo vệ logic kinh doanh của bạn bằng cách giữ cho rằng trên backend.

Ví dụ điển hình, tôi có thể viết triển khai CKEditor của riêng mình (rất nhiều người làm điều đó) nhưng nó dễ dàng hơn rất nhiều khi chỉ sử dụng CKEditor và mọi người đều biết nó là gì, ai đã viết nó ...

Hoặc lấy bản đồ google làm ví dụ, có rất nhiều bản sao xung quanh, nhưng chỉ có một bản đồ google thực sự. Heck, những người khác đã viết một bản đồ thực hiện trước khi google, nhưng bản đồ google là nổi tiếng hơn.

Tôi có thể tiếp tục với rất nhiều ví dụ tại sao cố gắng bảo vệ mã của bạn không chỉ ngớ ngẩn, nhưng thực sự không thông minh ... Bảo vệ logic nghiệp vụ là một điều, nhưng bạn thực sự có nhiều hơn để đạt được bằng cách công khai ưa thích smancy frontend mã ...

2

Tôi đã nghĩ về vấn đề này rất nhiều và, thẳng thắn, không có nhiều mà có thể được thực hiện. Điều tốt nhất tôi từng gặp là sử dụng trình biên dịch JS. Về mặt lý thuyết, và tôi chưa bao giờ thực sự làm điều này nhưng tôi biết rằng nó là có thể, có thể tải js của bạn thông qua một swf 1x1 pixel mà lần lượt được gửi thông qua một scrambler. Bạn vẫn có thể vượt qua điều đó, nhưng nó trở thành xa hơn gây phiền nhiễu hơn. Sau đó, bạn sẽ có thể gửi mã được mã hóa aes đến swf, giải mã phía máy khách (sử dụng thư viện as3crypt) và sau đó ghi nó vào trình duyệt. Điều đó nói rằng, trừ khi bạn đang sử dụng swf cho một loạt các cuộc gọi lại, bạn vẫn có vấn đề thực tế là nó vẫn cần phải được được viết cho trình duyệt.Firebug và các trình điều khiển js của trình duyệt khác sẽ cho phép người dùng nhận được các js "biên dịch". Tất nhiên, có thể viết mã AS3 để đăng ký chuỗi cuộc gọi lại ...

Như tôi đã nói, điều này là giả thuyết hơn không và trong khi tôi không nghi ngờ rằng nó có thể hoạt động trong các tình huống bình dị, Flash bị giới hạn và bạn cần kiến ​​thức về AS3. Lợi ích, tất nhiên, là đây là một cách để có được js cho trình duyệt mà không có người dùng có thể đọc nó một cách dễ dàng.

1

Tôi không thực sự tin rằng có thể ẩn mã JavaScript từ người dùng cuối, JavaScript được thực hiện phía máy khách chứ không phải phía máy chủ nghĩa là nó đang xem mã nguồn ở dạng văn bản thuần túy hơn hoặc có chương trình bên thứ ba chặn trình duyệt , người dùng cuối, yêu cầu mã để hoàn thành tác vụ.

Ngay cả khi mã được mã hóa, tại một thời điểm nào đó, mã hóa sẽ không được mã hóa để trình duyệt hoàn tất và hiển thị tác vụ, nơi người dùng cuối sẽ nhận được mã, trừ khi bạn có toàn quyền kiểm soát trên máy tính của người dùng cuối ẩn bất kỳ mã nào được thực hiện phía máy khách sẽ là không thể.

Các vấn đề liên quan