Làm cách nào để giải mã mã HTML trong JavaScript?

Các tập lệnh này nhằm giải thích cách "ẩn" HTML và/hoặc javascript khỏi những người khác xem mã nguồn trang của bạn. Nó không phải là hoàn hảo, nhưng nó làm cho việc đọc và hiểu mã nguồn trở nên khó khăn hơn. Do bản chất của cách thức hoạt động của các tập lệnh này, phần giải thích có vẻ phức tạp và dài dòng, nhưng hãy kiên nhẫn và nó sẽ có ý nghĩa khi bạn có một chút kinh nghiệm với chúng. Bạn không thực sự cần phải biết thông tin chi tiết về các tập lệnh này, nhưng nó sẽ giúp bạn hiểu cách thức và lý do chúng hoạt động. Vì vậy, hãy ngồi xuống và tôi sẽ cố gắng hết sức để làm cho điều này có vẻ không phức tạp nhất có thể


Thoát / Unescape

Phần đầu tiên của trang này giải thích cách "thoát" bất kỳ văn bản, HTML hoặc Javascript nào để khiến người dùng thông thường không thể đọc được. Mã thoát URL là các giá trị thập lục phân hai ký tự (8 bit) đứng trước dấu %. Điều này được sử dụng chủ yếu trong các URL của trình duyệt hoặc để sử dụng khi tạo cookie cho các ký tự không hoạt động, thường là do chúng là các ký tự dành riêng (như khoảng trắng và các ký tự tương tự)

Ví dụ: nếu bạn có tên tệp HTML của trang một, thì mã URL đã thoát sẽ giống như trang%20one. %20 là giá trị thoát cho một khoảng trắng. Thông thường, bạn sẽ chỉ thoát khỏi các ký tự đặc biệt (thường là bất kỳ ký tự nào khác ngoài a-z, A-Z và 0-9), nhưng tập lệnh bên dưới thực sự thoát khỏi tất cả văn bản chỉ bằng cách thay thế tất cả các ký tự bằng các ký tự tương đương đã thoát của chúng. Vì vậy, nếu bạn hoàn toàn thoát khỏi trang một, nó sẽ giống như. %70%61%67%65%20%6F%6E%65. Bây giờ, không có văn bản nào có thể giải mã dễ dàng mặc dù phần lớn nó được tạo thành từ các ký tự bình thường

Vì trình duyệt vốn có thể xử lý các mã thoát, nên điều này có thể được sử dụng khá dễ dàng mà không cần phải thêm bất kỳ tập lệnh nào để giải mã chúng. Vì vậy, nếu bạn muốn trình duyệt ghi văn bản đã thoát đó vào trang, bạn có thể làm điều gì đó như

Tất cả những gì tôi đang làm ở đây là đặt chuỗi đã thoát vào một tập hợp dấu ngoặc kép (quan trọng. ), gói nó bên trong phương thức unescape() tích hợp, rồi gói nó trong một tài liệu. viết phương pháp. Điều này có vẻ hơi vô giá trị, nhưng bạn có thể ẩn địa chỉ email theo cách này để ngăn trình thu thập dữ liệu web lấy địa chỉ email của bạn từ trang web của bạn để sử dụng trong các email spam hàng loạt, nhưng vẫn cho phép khách truy cập đọc nó. Tất nhiên, trừ khi bạn thực sự thích nhận được những lời gạ gẫm Viagra. . )

Chẳng hạn, địa chỉ e-mail không trả lời Script Asylum được thoát hoàn toàn sẽ trông như thế này đối với trình thu thập dữ liệu web

nhưng sẽ trông như thế này với khách truy cập

noreply@scriptasylum. com

Hai hộp văn bản bên dưới sẽ cho phép bạn thoát hoàn toàn và bỏ thoát bất kỳ văn bản nào bạn muốn. Chỉ cần nhập bất kỳ văn bản/HTML/JavaScript nào bạn muốn vào hộp bên trái và nhấp vào nút -> để thoát hoàn toàn. Tương tự như vậy, nhấp vào nút <-- để chuyển đổi nó trở lại văn bản bình thường để xác minh rằng nó giống với bản gốc. Bạn có thể sao chép và dán mã thoát vào trang của mình (đừng quên sử dụng unescape() và tài liệu. các phương thức write())


Giải mã mã hóa

Bây giờ, có lẽ bạn đã nhận ra rằng bạn có thể ẩn toàn bộ trang HTML bằng phương pháp trên; . Kích thước và dễ dàng "bẻ khóa" mã của bạn

Khi bạn thoát hoàn toàn toàn bộ trang, mỗi ký tự sẽ trở thành 3 ký tự. Điều này sẽ tăng gấp ba lần kích thước trang của bạn. Không phải là vấn đề lớn nếu trang chỉ có kích thước khoảng 10-50 KByte; . Điều này sẽ làm chậm thời gian tải đối với những người lướt web không có kết nối băng thông rộng

Ngoài ra, nếu ai đó xem mã nguồn của bạn, sẽ khá dễ dàng để biết bạn đang làm gì. Sau đó, họ có thể chỉ cần sao chép và dán mã và tạo một tập lệnh nhỏ để hiển thị nội dung bình thường. Không có cách nào tuyệt đối hoàn hảo (phía khách hàng) để ngăn ai đó xem nguồn của bạn nếu họ đủ quyết tâm;

Vì vậy, để giải quyết cả hai mối quan tâm, bạn có thể mã hóa/giải mã văn bản. Một lần nữa, sẽ không dễ dàng để ngăn mọi người ăn cắp nội dung nguồn của bạn nếu họ thực sự muốn nó. Tôi thực sự đang sử dụng các thuật ngữ "mã hóa" và "giải mã" một cách lỏng lẻo ở đây; . Đầu ra được mã hóa sẽ dài hơn một chút so với văn bản gốc, nhưng ít hơn nhiều so với việc bạn chỉ đơn giản thoát khỏi tất cả

Phần trên chỉ thoát khỏi văn bản. Phần bên dưới thực sự thay đổi các giá trị Unicode để kết quả trông giống như vô nghĩa. Hãy thử và bạn sẽ thấy;

Các bước sau đây là những gì tập lệnh thực hiện để thực hiện hiệu ứng này khi bạn nhấp vào nút -> (mã hóa)

  1. Đầu tiên, tất cả các văn bản được thoát
  2. Sau đó, tập lệnh tìm các giá trị Unicode cho từng ký tự trong chuỗi
  3. Sau đó, tập lệnh thêm bất kỳ giá trị hộp thả xuống Code Key nào vào giá trị Unicode của mỗi ký tự
  4. Sau đó, tập lệnh lấy các ký tự dựa trên các giá trị Unicode đã thay đổi
  5. Giá trị Khóa mã cũng được nhúng trong văn bản đã giải mã để tập lệnh biết cách giải mã lại chuỗi đúng cách
  6. Cuối cùng, nó thoát kết quả một lần nữa để xóa bất kỳ ký tự đặc biệt nào. Bây giờ, kết quả đầu ra trông hoàn toàn xa lạ đối với những người không thể hủy dịch chuyển các giá trị Unicode trong đầu họ. . )
Bước giải mã <- chỉ đơn giản là đảo ngược quá trình

Thật không may, trình duyệt không có bất kỳ khả năng tích hợp nào để xử lý việc giải mã, vì vậy chúng tôi phải sử dụng một chức năng cho việc đó. Vì vậy, bạn phải thoát chức năng xử lý giải mã để ẩn phần đó và để trình duyệt ghi nó vào tài liệu. Bạn không thực sự cần phải thoát khỏi chức năng giải mã, nhưng điều đó sẽ khiến ai đó khó hiểu chuyện gì đang xảy ra hơn rất nhiều. Sau đó, chức năng giải mã có thể được sử dụng để giải mã phần còn lại của bất kỳ nội dung nào bạn đã mã hóa. Tôi sẽ phác thảo từng bước bên dưới để làm cho việc này bớt khó hiểu hơn

  1. Thoát chức năng giải mã. Trước khi chức năng này được thoát, nó trông như thế này


    Sau khi thoát, chức năng trông như thế này

    %3C%73%63%72%69%70%74%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%63%72


    Gọn gàng hả?. )
    Dù sao, bây giờ bạn phải làm cho trình duyệt ghi phần đó của tập lệnh vào trang bằng cách gói nó vào tài liệu. write() và unescape() như thế này


  2. Bây giờ bạn đã có chức năng giải mã trên trang, bạn có thể gọi nó để giải mã bất kỳ nội dung nào bạn đã mã hóa. Giả sử bạn có một tập lệnh muốn bảo vệ;


    Khi tập lệnh trên được mã hóa bằng "mã khóa" số 1, nó trông như thế này

    %264dtdsjqu%2631mbohvbhf%264e%2633kbwbtdsjqu%2633%264f%261E%261BGVODUJPO%2631QSFMPBEJNBHFT


    Sau đó, bạn giải mã chuỗi và ghi nó vào trang bằng cách gọi hàm dF() (vừa được giải mã và ghi vào trang ở bước trước) chuyển chuỗi ở trên như thế này

    df ('%264dtdsjqu%2631mboHVb

Vì vậy, để kết hợp tất cả những điều này lại với nhau, sau đây là nội dung bạn sẽ dán vào trang của mình

Tôi đã đánh dấu phần giải mã chức năng bộ giải mã bằng màu xanh lá cây và phần giải mã tập lệnh tải trước và ghi nó vào trang bằng màu xanh lam đậm. Bạn chỉ cần dán toàn bộ phần trên vào trang của mình và tập lệnh sẽ hoạt động hoàn hảo giống như nếu nó là tiếng Anh cổ đơn giản. Vâng, có vẻ khó hiểu, nhưng đó là vấn đề phải không? . toàn bộ chuỗi sẽ xuất hiện trên một dòng;

Điều tương tự cũng được thực hiện nếu bạn muốn mã hóa toàn bộ trang HTML, ngoại trừ phần được mã hóa của chuỗi (màu xanh đậm) có thể LỚN. Tuy nhiên, chức năng thoát (màu xanh lá cây) sẽ không thay đổi

Tôi đã tạo một số thuật sĩ mà bạn có thể sử dụng cho các mục đích khác nhau. Bạn có thể đạt được điều tương tự bằng cách sử dụng các hàm thoát/bỏ thoát và bộ mã hóa/giải mã ở trên, nhưng chúng chuyên dùng để loại bỏ một số phỏng đoán. Mỗi liên kết bên dưới sẽ mở ra một cửa sổ mới

Làm cách nào để giải mã văn bản HTML trong JavaScript?

Giải mã thực thể HTML với phần tử DOM