2011-12-30 20 views
12

Tôi có các tập lệnh JavaScript trong ứng dụng của tôi có chứa các hàm JavaScript và jQuery. Tất cả tương tác của người dùng với ứng dụng của tôi là động và nó chuyển đến ứng dụng thông qua jQuery.Làm cách nào tôi có thể làm xáo trộn hoặc tạo các tệp JavaScript không đọc được?

Điều tôi nhận ra là khi tôi chạy ứng dụng của mình, ở phía máy khách, khách hàng có thể xem tất cả mã nguồn của tôi bằng cách xem nguồn trang (Ctrl + U).

Làm cách nào để ẩn hoặc làm điều gì đó để người dùng không thể hiểu hoặc đọc nguồn?

Tôi muốn làm điều gì đó giống như những gì Facebook làm. Bằng cách xem người sử dụng nguồn Facebook không thể tái sử dụng mã nguồn của nó hoặc thậm chí hiểu nó.

Tôi googled và thấy rằng quá trình này được gọi là obfuscation, nhưng điều này không làm việc cho tôi.

Tôi cố gắng này:

http://www.javascriptobfuscator.com/default.aspx

http://dean.edwards.name/packer/

http://www.daftlogic.com/projects-online-javascript-obfuscator.htm

thậm chí tôi đã cố gắng http://www.jasob.com/

Nhưng nó không sử dụng cho tôi.

+0

Bạn ** có thể ** xem tất cả mã máy khách cho cả Facebook và Google. Nó là obfuscated, có nghĩa là nó là * khó khăn hơn * để đọc nó, nhưng không phải không thể. Nhưng điều quan trọng nhất, bạn không giải thích ý của bạn bằng cách nào * "nó không có ích gì cho tôi" *. Vấn đề thực tế bạn đang phải đối mặt với những obfuscators là gì? – Groo

+0

Thực ra tôi nghĩ nó chỉ được rút gọn. Trong khi đó là obfuscation quá, nó không phải là mục đích chính của nó. – ThiefMaster

+0

@Groo: có nghĩa là tôi đã cố gắng obfuscator tệp js của tôi nhưng không thành công trong việc thử nghiệm ứng dụng của tôi. nó sẽ không thực hiện bất kỳ hoạt động nào trên sự kiện nhấp chuột. u có thể đề nghị tôi mà obfuscator công cụ tôi sử dụng để obfuscate js của tôi. – Bhargav

Trả lời

23

Nếu ai đó thực sự quan tâm đến mã của bạn, anh ấy sẽ lấy khối lượng công việc không khai thác (thay thế ngẫu nhiên bằng tên biến/chức năng hữu ích). Mọi thứ khác như "mã hóa" hoặc đóng gói chỉ là snake oil vì nó có thể được hoàn nguyên vô cùng dễ dàng. Vì vậy, tiết kiệm cho mình một số công việc và thay vì chi tiêu nó vào làm cho ứng dụng của bạn tốt hơn.

Vì vậy: Điều duy nhất bạn nên làm trên hệ thống sản xuất là giảm thiểu mã JS của bạn. Điều này làm cho nó nhỏ hơn và do đó nhanh hơn để tải - vì vậy nó là một lợi thế thực sự. Bên cạnh đó, nó sẽ làm cho nó ít có thể đọc được đối với những người chỉ tò mò cho một cái nhìn nhanh chóng nhưng không muốn dành nhiều thời gian vào nó.

Ví dụ, tệp Facebook JS chỉ được rút gọn - rất có thể chỉ vì lý do băng thông/hiệu suất.


Cách dễ nhất để rút gọn JavaScript đang sử dụng dịch vụ web của Google cho nó: http://closure-compiler.appspot.com/home
Lưu ý rằng nó có một giới hạn 1MB vì ​​vậy nếu JS của bạn là rất lớn, bạn có thể cần phải tải về minifier dựa trên nền Java để chạy nó cục bộ.

+0

có bạn đã đúng. bạn có thể gợi ý cho tôi bất kỳ công cụ nào để giảm bớt mã JS không? – Bhargav

+0

Đã thêm một liên kết vào câu trả lời của tôi – ThiefMaster

+0

Tôi không thể tìm thấy trình chỉnh sửa dựa trên Java. Có liên kết nào không? –

2

Mọi thứ ThiefMaster nói là đúng. Nó cũng đáng chú ý rằng các ứng dụng của bạn nên được thiết kế với giả định người dùng có thể xem và thao tác tất cả mọi thứ trên máy khách. Nếu bạn lo lắng về obfuscation bởi vì bạn nghĩ rằng nó sẽ ngăn chặn người dùng nhìn thấy dữ liệu nhạy cảm hoặc thao tác thông tin như giá cả, sau đó bạn cần phải thiết kế lại ứng dụng của bạn để logic an toàn nằm trên máy chủ.

+0

có bạn là sự thật. tôi chỉ muốn js của tôi khó đọc ở điểm đầu tiên. Tôi chỉ thực hiện logic của mình trên máy chủ. Tôi chỉ chuyển dữ liệu người dùng đến bộ điều khiển máy chủ bằng jquery. tôi chỉ muốn người dùng đó không thể biết được những gì đang diễn ra. thats mục đích của tôi để sử dụng obfuscator. – Bhargav

+0

Thậm chí nếu bạn hoàn thành làm xáo trộn nguồn theo cách không thể đảo ngược (không thể), các khách hàng hiện đại vẫn cho phép người dùng theo dõi lưu lượng mạng từ khách hàng của họ. :/Bạn quan tâm đến chức năng cụ thể nào khi ẩn? – RSG

+0

tôi sẽ đi cho obfuscate tập tin js của tôi. bất kỳ tham chiếu nào được hoan nghênh. cảm ơn... – Bhargav

0

Vì tôi cần phải rút ngắn mã nguồn javascript của mình, tôi đang tìm một chương trình javascript có thể tự rút gọn mã javascript của mình.

Tại sao trình chỉnh sửa javascript? Bởi vì, tôi đang viết một số mã JavaScript ngẫu nhiên từ máy chủ web cho máy khách.

Tôi nên sử dụng "node.js" trên máy chủ web để thực thi chương trình javascript tạo mã javascript và rút gọn nó và gửi cho khách hàng.

Chương trình javascript này là: chương trình mã hóa và giải mã. Kết quả mã javascript cho khách hàng nên chứa một hàm javascript giải mã từng phần của một phiên bản json hoặc hệ thập lục phân của một dữ liệu được mã hóa. Hàm thực hiện một số dấu cộng, trừ và nhân các số nguyên. Đôi khi, tôi có thể tạo ra một điều kiện (nếu, sau đó và khác) để tính toán hai hoạt động khác nhau. Chức năng này được sử dụng để giải mã hai hoặc nhiều tham số đầu vào.

Đó là chức năng ngẫu nhiên: mỗi khi khách hàng yêu cầu một số dữ liệu cá nhân, máy chủ web tạo hai hàm javascript khác nhau: một cho mã hóa và một cho giải mã. Chức năng giải mã được gửi đến máy khách. Các chức năng mã hóa được sử dụng bởi các máy chủ web để mã hóa và gửi dữ liệu cá nhân cho khách hàng. Nó làm cho một cảm giác cho obfuscation: mỗi khi quá trình đang chạy, mỗi lần các chức năng gửi là hoàn toàn khác nhau.

Và, để thuyết phục mã hóa/giải mã được bảo mật, tôi thêm cho khách hàng, một giá trị dạng bảng chuyển đổi hai hoặc nhiều tham số; nhưng, các giá trị dạng bảng được tạo ra, trên thực tế, bởi một hàm được viết cho máy chủ web và chứa một số hằng số dạng số, không bao giờ gửi cho máy khách. Vì vậy, bất kỳ ai muốn giải mã phải có giá trị hằng số.

Tôi giải thích rằng quá trình bởi vì:

  1. bạn đang thực hiện một số điều về obfuscation trong javascript mã nguồn; nhưng, obfuscation trong javascript chưa được thực hiện bởi máy chủ web và trình duyệt ... có thể, nó có thể xảy ra ... nhưng, loại giải pháp nào là hữu ích với sự giúp đỡ của "SSL-ize" tất cả truyền qua internet.

  2. Có thể mã hóa và giải mã bằng các chức năng mã hóa/giải mã có thể đọc được. Và, không có chi phí chứng chỉ SSL. Thậm chí, "một người đàn ông ở giữa" sẽ giải mã dữ liệu được mã hóa; cho rằng, ông chỉ cần thực hiện chức năng javascript. Ok..để tưởng tượng rằng chức năng giải mã javascript cũng được mã hóa ... sau đó, "người đàn ông ở giữa" phải thực thi chức năng giải mã và sau đó giải mã lại nội dung được giải mã là hàm javascript để giải mã dữ liệu được mã hóa.

Và, hãy tưởng tượng nếu máy chủ web hỏi câu hỏi khách hàng và câu trả lời duy nhất được xử lý bởi tính toán kết quả của khách hàng (không gửi qua Internet) ... không thể "người đàn ông ở giữa "để có câu trả lời.

Kiểm tra ý tưởng của tôi; Tôi đang chờ nhận xét từ bất kỳ ai.

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