Hướng dẫn do you need to escape in javascript? - bạn có cần thoát trong javascript không?

Đôi khi, phía máy chủ sẽ tạo ra các chuỗi để được nhúng trong mã JavaScript nội tuyến. Ví dụ: nếu "Tên người dùng" nên được tạo bởi ASP.NET. Sau đó, nó trông giống như.


Điều này không an toàn, bởi vì người dùng có thể có tên của mình

Đó là lỗ hổng XSS.

Vì vậy, về cơ bản, mã phải là:


Những gì javascriptencode làm là thêm charater "\" trước "/" và "'" và "" "" Vì vậy, html đầu ra giống như. Var username = "alert (\' bug \ ')";JavascriptEncode does is to add charater "\" before "/" and "'" and """. So, the output html is like. var username = "alert(\'bug\')";

Trình duyệt sẽ không diễn giải "" là kết thúc của khối tập lệnh. Vì vậy, XSS trong tránh." as end of script block. So, XSS in avoided.

Tuy nhiên, vẫn còn "" ở đó. Nó được đề xuất để thoát khỏi hai nhân vật này là tốt. Trước hết, tôi không tin rằng đó là một ý tưởng tốt để thay đổi "" thành "& gt;" nơi đây. Và, tôi không chắc chắn thay đổi "" có thể nhận ra đối với tất cả các trình duyệt. Có vẻ như không cần thiết phải thực hiện mã hóa thêm cho "".

Có bất kỳ đề xuất về điều này?

Thanks.

%27 This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible; see the compatibility table at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time.

\ Although escape() is not strictly deprecated (as in "removed from the Web standards"), it is defined in Annex B of the ECMA-262 standard, whose introduction states:

%5C

/escape() function computes a new string in which certain characters have been replaced by a hexadecimal escape sequence.

%2f This function was used mostly for URL queries (the part of a URL following ?)—not for escaping ordinary String literals, which use the format \xHH. (HH are two hexadecimal digits, and the form \xHH\xHH is used for higher-plane Unicode characters.)

?

%3f

<


3

%3C

& lt;

>

%3E

Hàm


4 là một thuộc tính của đối tượng toàn cầu. Các ký tự đặc biệt được mã hóa ngoại trừ:

5

Hình thức thập lục phân cho các ký tự, có giá trị đơn vị mã là


6 hoặc ít hơn, là một chuỗi thoát hai chữ số:

7. Đối với các ký tự có đơn vị mã lớn hơn, định dạng bốn chữ số

8 được sử dụng.

Ví dụ

Sử dụng lối thoát

escape('abc123');     // "abc123"
escape('äöü');        // "%E4%F6%FC"
escape('ć');          // "%u0107"

// special characters
escape('@*_+-./');    // "@*_+-./"

Thông số kỹ thuật

Sự chỉ rõ
Đặc tả ngôn ngữ Ecmascript # sec-escape-string
# sec-escape-string

Tính tương thích của trình duyệt web

Bảng BCD chỉ tải trong trình duyệt

Xem thêm

Mỗi ngôn ngữ lập trình đều có các ký tự đặc biệt - các ký tự có nghĩa là một cái gì đó đặc biệt như xác định một biến, phần cuối của một dòng hoặc một sự phá vỡ trong một số dữ liệu. JavaScript không khác, vì vậy nó cung cấp một số chức năng mã hóa và giải mã các ký tự đặc biệt.

Nếu bạn đang tương tác giữa PHP và JavaScript, bạn cũng sẽ cần phải làm quen với các hàm PHP để mã hóa và giải mã các ký tự đặc biệt, đó là lý do tại sao chúng tôi đã tạo ra công cụ đặc biệt này để kiểm tra và so sánh các chức năng khác nhau.

Mã hóa và giải mã bằng JavaScript và PHP

Biểu mẫu bên dưới cho phép bạn thấy đầu ra của các chức năng khác nhau được sử dụng để mã hóa các ký tự đặc biệt khi chúng xuất hiện trong các tham số văn bản hoặc URL thuần túy (theo '?' Trong URL). Trang này gọi các hàm PHP trực tiếp bằng AJAX thay vì mô phỏng JavaScript. Nếu bạn có một chuỗi để giải mã, thay vào đó, hãy sử dụng các nút ở bên phải.encode special characters when they appear in plain text or URL parameters (following the '?' in a URL). This page calls the PHP functions directly using Ajax rather than a JavaScript emulation. If you have a string to decode, use the buttons on the right instead.

Các chức năng này thực hiện thay thế trên một số ký tự nhất định như trong bảng làm mờ hơn trang và được mô tả ngắn gọn ở đây:

  • Hàm thoát JavaScript thay thế hầu hết các biểu tượng dấu chấm câu bằng các mã HEX tương đương, nhưng được tìm thấy là không đủ khi nó mã hóa ký tự Unicode và đã được thay thế bởi hàm encodeuri.
  • Hàm encodeuricomponent là một phần mở rộng của encodeuri, sự khác biệt là nó cũng thoát khỏi các ký tự sau:, /? : @ & = + $
  • Về phía PHP của mọi thứ, sự khác biệt duy nhất giữa URLENCODE và RAWURLENCODE là phần sau thoát khỏi ký tự trong đó UrlenCode sử dụng phương pháp được chấp nhận rộng rãi + thay thế.
  • Hàm HTMLEntities thoát khỏi các ký tự có ý nghĩa đặc biệt bên trong HTML bằng cách chèn các thực thể HTML ở vị trí của chúng (ví dụ: & amp; thay cho &). Xem bài viết của chúng tôi về mã ký tự ASCII để biết thêm chi tiết.
  • Tất cả các chức năng đều có chức năng 'giải mã' bổ sung mà khá nhiều điều ngược lại.

Thoát khỏi các trích dẫn kép và đơn lẻ

Một chức năng PHP cần thiết khác có ích khi chuyển dữ liệu cho JavaScript là AddSlashes sẽ thêm dấu gạch chéo ngược trước: dấu gạch chéo ngược, các trích dẫn đơn và đôi.

Ví dụ: để lặp lại một biến PHP vào mã JavaScript:


9

Trong HTML, chúng tôi sử dụng các trích dẫn kép và trong các trình điều khiển đơn JavaScript, vì vậy bất kỳ trích dẫn nào trong mã JavaScript sẽ cần phải được thoát để chúng không mâu thuẫn với các trích dẫn HTML hoặc JavaScript.

Để biết thêm chi tiết về việc thoát các biến PHP để sử dụng trong JavaScript, hãy xem bài viết liên quan của chúng tôi: Chuyển các biến PHP sang JavaScript.

Bảng các ký tự được mã hóa

Ở đây bạn có thể thấy các hàm JavaScript và PHP khác nhau áp dụng cho một loạt các ký tự phổ biến.

Đầu vàoJavaScriptPHP
thoát khỏiEncodeuriEncodeuricomponentURLENCODERAWURLENCODEHTMLENTITY
%20%20%20+%20
+!!++!!!!+
!!!!!!%21%21%21!!
%21@%21@@@%21
@%40@%40%40%40@
%40#####%40
#%23%23%23%23%23#
%23$%23$$$%24
Phần trămPhần trămPhần trămPhần trăm%25%25Phần trăm
%25^%25%25^^%25
^%5E^^%5E%5E^
%5E%5E%5E%5E%5E%5E%5E
Không có giá trịKhông có giá trịKhông có giá trịKhông có giá trịKhông có giá trịKhông có giá trịKhông có giá trị
%26& amp;%26& amp;& amp;& amp;%26
+++!!!!!!+
!!%21!!%21%21%21!!
%21@%21@@%40%21
@@@@@@@
%40#####%23
$%24$$%24%24$
%24Phần trămPhần trămPhần trămPhần trămPhần trăm%24
Phần trămPhần trămPhần trăm%25%25%25Phần trăm
%25^%25^^^%25
^%5E%5E%5E%5E%5EKhông có giá trị
%26& amp;& amp;& amp;& amp;& amp;*
%2a.%2a%2a..%2a
.%28%28%28%28%28.
%28)))))%28
)%29%29%29%29%29)
%29-----%29
-_____-

_

=

  • %3D
  • %2b

:

%3a

Tôi có cần phải trốn thoát trong chuỗi JavaScript không?

Các ký tự duy nhất bạn thường cần phải lo lắng trong chuỗi JavaScript là kép (nếu bạn đang trích dẫn chuỗi có trình duyệt kép), một cách truy cập (nếu bạn đang trích dẫn chuỗi với một trình điều khiển đơn), Backslash, vận chuyển trở lại (\ r) hoặc linefeed (\ n).double-quote (if you're quoting the string with a double-quote), single-quote (if you're quoting the string with a single-quote), backslash, carriage-return (\r), or linefeed (\n).

Tôi có thể sử dụng gì thay vì trốn thoát trong JavaScript?

Hàm Escape () không được chấp nhận.Sử dụng encodeURI () hoặc encodeuricomponent () thay thế.encodeURI() or encodeURIComponent() instead.

Escape làm gì trong JavaScript?

Hàm Escape () tính toán một chuỗi mới trong đó một số ký tự đã được thay thế bằng chuỗi thoát thập lục phân.Lưu ý: Hàm này được sử dụng chủ yếu cho các truy vấn URL (phần của URL sau?)computes a new string in which certain characters have been replaced by a hexadecimal escape sequence. Note: This function was used mostly for URL queries (the part of a URL following ? ) —not for escaping ordinary String literals, which use the format \xHH .

Tôi có cần phải trốn thoát trong Regex không?

Để sử dụng một nghĩa đen ^ khi bắt đầu hoặc một đô la theo nghĩa đen ở cuối regex, nhân vật phải được thoát ra.Một số hương vị chỉ sử dụng ^ và $ làm metacharacters khi chúng ở đầu hoặc cuối của regex tương ứng.Trong những hương vị đó, không cần phải trốn thoát bổ sung là cần thiết.Nó thường chỉ là tốt nhất để thoát khỏi chúng.. Some flavors only use ^ and $ as metacharacters when they are at the start or end of the regex respectively. In those flavors, no additional escaping is necessary. It's usually just best to escape them anyway.