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

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()

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 <;. Ví dụ JavaScript ở trên sẽ xuất hiện như thế này.  

JavaScript được mã hóa này sẽ không thực thi trong trình duyệt. Nếu bạn nhận thức được mối nguy hiểm tiềm ẩn ở đây, bạn sẽ xóa bình luận ngay lập tức và xem lại trang web của mình để tìm lỗ hổng. Một lần nữa, bạn chỉ cần cắm một lỗ và họ đã có bạn

Các cuộc tấn công tiêm JavaScript là một mối đe dọa khó chịu đối với bất kỳ trang web nào chấp nhận thông tin đầu vào từ khách truy cập. Những kẻ xấu đã biết điều này, vì vậy đào tạo những kẻ tốt là cách chúng ta sẽ bịt những lỗ hổng này. Chắc chắn họ sẽ nghĩ ra những cách thông minh hơn để đánh sập trang web của bạn, vì vậy hãy luôn cập nhật các kỹ năng của bạn và truyền bá kiến ​​thức

Ronald James là ai?

Chúng tôi là chuyên gia tuyển dụng công nghệ & kỹ thuật số thích hợp hàng đầu cho vùng Đông Bắc nước Anh. Chúng tôi chuyên thu hút các tài năng công nghệ hiệu suất cao trong nhiều lĩnh vực CNTT bao gồm Phát triển phần mềm kỹ thuật số & công nghệ

Mục tiêu cuối cùng của chúng tôi là tạo ra tác động tích cực đến mọi khách hàng và ứng viên mà chúng tôi phục vụ - từ cuộc gọi và giới thiệu ban đầu, cho đến lần giao hàng cuối cùng, chúng tôi muốn khách hàng và ứng viên của mình cảm thấy họ đã có trải nghiệm hữu ích và hiệu quả

Liên hệ với nhóm của chúng tôi

Nếu bạn đang muốn bắt đầu hành trình tìm kiếm nhân tài hoặc tìm kiếm công việc mơ ước của mình, bạn sẽ cần một nhóm chuyên gia đầy nhiệt huyết, năng động để hướng dẫn bạn. Kiểm tra trang Việc làm của chúng tôi để biết các vị trí tuyển dụng mở. Nếu quan tâm, hãy liên hệ với chúng tôi hoặc gọi 0191 620 0123 để trò chuyện nhanh với nhóm của chúng tôi

Làm bạn nhé

Theo dõi chúng tôi trên blog, Facebook, LinkedIn, Twitter hoặc Instagram của chúng tôi để theo dõi các tin tức, sự kiện, câu chuyện thành công và các bản phát hành blog mới của ngành

Làm cách nào để gọi một hàm dựa trên chuỗi js?

Có hai phương pháp để gọi một hàm từ chuỗi được lưu trữ trong một biến. Cách thứ nhất là bằng cách sử dụng phương thức đối tượng cửa sổ và cách thứ hai là bằng cách sử dụng phương thức eval(). Phương thức eval() cũ hơn và không được dùng nữa.

Làm cách nào để gọi hàm bằng JavaScript biến?

// Tên hàm để gọi var fnName = 'helloWorld'; . tổ chức'; . Call function using Window object window[fnName](params); This can be useful for invoking Google Apps Script functions as well.

Làm cách nào để gọi một hàm JavaScript từ một chuỗi mà không cần sử dụng eval?

var params = "praveen. khoa học" // Bây giờ hãy gọi hàm mà không sử dụng eval. cửa sổ [fnName](params); Điều này cũng có thể hữu ích để gọi các chức năng của Google Apps Script.

Làm cách nào để gán chức năng cho chuỗi trong JavaScript?

Một cách tốt hơn để tạo một hàm từ một chuỗi là sử dụng Hàm. var fn = Function("alert('xin chào')"); . This has as advantage / disadvantage that variables in the current scope (if not global) do not apply to the newly constructed function.