Hàm gọi javascript bằng biến chuỗi

Thông thường, khi chúng ta gọi các hàm trong JavaScript, chúng ta đề cập đến toàn bộ tên của nó dưới dạng nghĩa đen. Đôi khi, tên hàm của bạn có thể xuất hiện trong một biến và bạn có thể cần gọi nó bằng cách sử dụng biến đó. Trong trường hợp này, chúng ta sẽ học cách gọi hàm sử dụng tên biến trong JavaScript


Cách gọi hàm sử dụng tên biến trong JavaScript

Dưới đây là các bước để gọi hàm sử dụng tên biến trong JavaScript

Giả sử bạn đã định nghĩa một hàm trong JavaScript như hình bên dưới

function hello_world[]{
  alert['hello world'];
}

Thông thường, chúng ta gọi hàm trên như hình bên dưới

   hello_world[];

Giả sử tên hàm của bạn được lưu trữ trong một biến khác như hình bên dưới

var a="hello_world";

Bây giờ bạn không thể gọi hàm được xác định ở trên như hình bên dưới vì nó sẽ tìm hàm a[] thay vì hello_world[]

  a[];

Vì vậy, cách đúng để gọi một hàm bằng chuỗi là

window["functionName"][arguments];

Ví dụ, đây là cách gọi hàm hello_world[] ở trên

window["hello_world"][];
OR
window[a][];

Không gian tên cửa sổ chứa các tham chiếu đến tất cả các chức năng

Nếu bạn đã xác định hàm JavaScript của mình trong Không gian tên, bạn cần sửa đổi lệnh gọi hàm như được hiển thị

window["Namespace"]["functionName"][arguments];

Trong bài viết này, chúng ta đã học cách gọi hàm sử dụng tên biến trong JavaScript. Sẽ hữu ích nếu bạn muốn gọi các hàm sử dụng các biến, thay vì các chuỗi ký tự. Nó cũng cho phép bạn tự động thay đổi chức năng nào sẽ được gọi dựa trên giá trị biến

Nói chung, chúng tôi sử dụng phương thức ác eval[] để gọi một hàm JavaScript có tên được lưu trữ trong một biến chuỗi nhưng có một cách thay thế tốt hơn và an toàn hơn, không yêu cầu eval[]

Giả sử rằng chúng ta có một hàm myFunction[str] lấy biến và in nó

Function myFunction [str] {
str = str || "Anonymous";
console.log["Hello, "+str+"!"];
return false;
}

Bây giờ, hãy khai báo một biến có tên hàm là nội dung chuỗi và một biến khác lưu trữ các đối số

________số 8

Điều này cũng có thể hữu ích để gọi các chức năng của Google Apps Script. Tuy nhiên, vì nó là mã phía máy chủ chứ không phải môi trường trình duyệt web nên chúng tôi sử dụng mã này để chỉ đối tượng chứa mã đó

this [fnName][params];

Bằng cách này, sẽ an toàn khi gọi các hàm một cách linh hoạt và gửi các tham số một cách linh hoạt. Vậy có gì sai khi sử dụng eval[] ? . Có một thứ gọi là tấn công tiêm JavaScript

Các cuộc tấn công tiêm JavaScript

Rất nhiều trang web, bao gồm cả blog, chấp nhận đầu vào của người dùng. Khách truy cập được mời nhập giá trị vào các trường và nhấp vào nút để gửi biểu mẫu web. Điều này có thể đơn giản như để lại nhận xét trên blog hoặc mua áo phông có thiết kế bị đánh cắp

Nguyên tắc cơ bản trong phát triển trang web là KHÔNG BAO GIỜ TIN TƯỞNG CỦA NGƯỜI DÙNG. Nói cách khác, bạn phải luôn cho rằng dữ liệu trên biểu mẫu web nhằm mục đích gây hại cho trang web của bạn. Kẻ xấu có một số cách thông minh để thực hiện việc này với một trình duyệt thông thường; . Hơn nữa, bạn chỉ cần thất bại ở một điểm trên trang web của mình và bạn đã hoàn thành. Máy tính dùng chung tại quán cà phê địa phương sẽ hoạt động tốt cho phương tiện tấn công của họ

Chúng ta hãy xem một bình luận blog đơn giản. Hãy tưởng tượng rằng blog của bạn chứa một biểu mẫu lấy tên và nhận xét. Bạn đang mong đợi khách truy cập nhập giá trị vào cả hai trường và nhấp vào nút. Bạn thậm chí có thể triển khai một số xác thực để đảm bảo rằng cả hai trường đều có giá trị trước khi có thể đăng biểu mẫu

Bây giờ chúng ta hãy áp dụng quy tắc cơ bản được mô tả ở trên. Bạn không bao giờ nên tin tưởng đầu vào của người dùng. Mặc dù biểu mẫu sẽ cảnh báo người dùng khi trường bị thiếu, khách truy cập vẫn có thể nhập sai ngữ pháp và bạn có thể làm rất ít để ngăn chặn họ. Đó là một biểu mẫu web, họ đang ở trên trang web mà bạn đã cung cấp cho họ và đó là lý do tại sao bạn kiểm duyệt nhận xét trên blog. Mặc dù thật tốt khi xem nhận xét từ những người đồng ý và không đồng ý với bạn, nhưng bạn vẫn cố gắng giữ tỷ lệ tín hiệu trên tạp âm ở mức hợp lý

Các cuộc tấn công tiêm JavaScript là một trong những lý do chính không bao giờ nên tin tưởng vào đầu vào của người dùng. Giả sử blog lưu các trường biểu mẫu web vào cơ sở dữ liệu. Khi những khách truy cập tiếp theo yêu cầu trang blog, tất cả các nhận xét sẽ được hiển thị theo thứ tự thời gian bên dưới bài đăng trên blog. Khá điển hình cho đến nay, phải không? . giả sử thay vì nhận xét, vị khách bất chính của chúng tôi đã nhập đoạn mã JavaScript sau

Mọi người truy cập trang blog chứa JavaScript trước đó sẽ thấy một hộp thông báo có nội dung “Xin chào thế giới”. Đây là một ví dụ về một trong những cuộc tấn công nguy hiểm nhất trên web hiện nay. Cuộc tấn công rất dễ thử và bạn chỉ cần bỏ sót một vị trí trên toàn bộ trang web của mình là có thể bị tấn công

Nếu một khách truy cập có thể yêu cầu trang web của bạn thực thi JavaScript của họ, thì họ có thể thực hiện một số điều thực sự tồi tệ. Ví dụ: họ có thể viết một đoạn mã JavaScript cho phép họ mạo danh bạn và thực hiện mọi tác vụ bạn có thể thực hiện trên trang web. Tất cả những gì bạn cần làm là truy cập trang [trên trang web của riêng bạn] có chứa JavaScript của họ. Bạn có khả năng đọc các nhận xét trên blog của mình, vì vậy phần đó khá dễ dàng, phải không?

Đây là cách họ làm điều đó. Sau khi bạn đăng nhập, nhiều trang web sẽ cấp mã thông báo tạm thời cho bạn dưới dạng cookie. Trình duyệt của bạn gửi cookie này cùng với mỗi yêu cầu trang để xác thực bạn là ai. Nếu bạn đóng trình duyệt của mình, bạn có thể phải đăng nhập lại và nhận một cookie mới. Ngoài ra, trang web có thể đã phát hành một cookie bền hơn. Trong trường hợp này, trang web có thể đã hướng dẫn trình duyệt lưu trữ cookie trong vài ngày. Đây là cách Google giữ cho bạn đăng nhập trong vài ngày

Vì JavaScript có quyền truy cập vào cookie nên JavaScript do kẻ xấu viết có thể được viết theo cách gửi cookie của bạn đến trang web của chúng. Họ sẽ đợi cookie xuất hiện và tìm kiếm cookie ngon ngọt có nhiều quyền hạn. Khi họ có nó, bạn không thể làm gì nhiều ngoài việc tắt máy chủ web. Họ sở hữu trang web của bạn. Hơn nữa, không có email thông báo về sự kiện này. Bạn sẽ không biết về nó

Thứ đáng sợ hả?

Bạn cần bảo vệ trang web của mình khỏi các kiểu tấn công này. Cách tốt nhất là xử lý từng byte từ khách truy cập. Bạn không bao giờ được hiển thị nội dung thô do người dùng không đáng tin cậy cung cấp. Trong trường hợp này, người dùng không đáng tin cậy là tất cả mọi người trừ bạn. Vì bạn có nó, tại sao không bảo vệ trang web khỏi chính bạn, chỉ để chắc chắn

Một cách để thực hiện phương pháp hay nhất này là mã hóa các trường trước khi chúng được hiển thị trên trang web. Văn bản mã hóa sẽ chuyển đổi một ký tự < thành tương đương an toàn hơn với

Chủ Đề