2014-12-18 18 views
6

Một div (chứa thông tin an toàn) trong trang HTML của tôi phải được hiển thị dựa trên sự cho phép.Làm thế nào an toàn là ng-nếu để ẩn thông tin an toàn

  • Làm cách nào để sử dụng ng-if để ẩn div trong trường hợp này?
  • Người dùng có thể hack và xem div có chứa thông tin bảo mật không?
+4

mọi thứ không an toàn nếu bạn gửi nó đến giao diện –

+2

Khi viết một ứng dụng dựa trên web, bạn nên giả định rằng người dùng có thể truy cập mọi thứ bạn gửi tới trình duyệt. Nếu bạn muốn hạn chế quyền truy cập vào một số dữ liệu, hãy thực hiện nó ở phía máy chủ. – hon2a

+0

Một người dùng thậm chí một lượng nhỏ kiến ​​thức gỡ lỗi trên web sẽ có thể xem bất kỳ nội dung nào có trong HTML của bạn, cho dù có hiển thị hay không. – JLRishe

Trả lời

15

Bạn không được ẩn bất kỳ thứ gì vì mục đích bảo mật trong 'front-end' (tức là sử dụng Angular). Đó là tầm thường cho một người sử dụng để truy cập vào nội dung ẩn sử dụng ng-if, ng-show, ng-hide vv

Bạn nên thay vì che giấu dữ liệu này trên back-end và không bao giờ vượt qua nó vào trình duyệt ở nơi đầu tiên.

Quy tắc bảo mật đơn giản: Nếu trình duyệt có quyền truy cập vào nó, người dùng cũng vậy.

2

Làm cách nào để sử dụng ng-if để ẩn div trong trường hợp này?

Không hề an toàn.

Người dùng có thể hack và xem div chứa thông tin bảo mật không?

Tuyệt đối, có.

2

Thực ra trong js góc bạn có thể gỡ lỗi, do đó, người dùng có thể truy cập đối tượng mà bạn đang sử dụng để chuyển đổi ng-if và thay đổi thuộc tính của nó. bạn có thể muốn sử dụng ng-bind-html và bing div đó làm mô-đun sẽ an toàn hơn nhưng không tuân thủ

3

ng-if không hiển thị thông tin liên quan trong chế độ xem. Tuy nhiên, nó phụ thuộc vào dữ liệu trong phạm vi $ có hay không hiển thị thông tin. Ngoài ra, thông tin được hiển thị cũng nằm trong phạm vi $. Sử dụng các phần mở rộng của trình duyệt, chẳng hạn như Batarang (hoặc thậm chí là javascript đơn giản), người dùng có thể hiển thị toàn bộ hệ thống phân cấp phạm vi $ với các giá trị chứa.

Vì vậy ... không :) tôi không mong đợi AngularJS để che giấu thông tin nhạy cảm cho bạn

+0

Tôi tin rằng nếu bạn đặt debugInfoEnabled (sai), bạn sẽ không thể truy cập phạm vi với Batarang? –

+0

Tôi chỉ nhận ra rằng điều này có thể được kích hoạt trở lại bất cứ lúc nào bằng cách gõ angular.reloadWithDebugInfo(); vào bảng điều khiển. –

6

Thêm vào các điểm đã được đề cập trong các câu trả lời, bạn nên lưu ý rằng webapps khi bạn đang chạy, sau đó người dùng có quyền truy cập vào toàn bộ mã của khách hàng của bạn. Vì vậy, bạn nên, thậm chí không bao giờ nghĩ đến việc ẩn dữ liệu nhạy cảm ở phía khách hàng.

Ngoài ra, bạn nên biết thêm một chút về sự khác biệt giữa ng-ifng-show, ng-hide. Trích dẫn từ trang web AngularJS của

ngIf khác với ngShow và ngHide ở chỗ ngIf hoàn toàn loại bỏ và tái tạo các phần tử trong DOM hơn là thay đổi tầm nhìn của nó thông qua các thuộc tính display css. Một trường hợp phổ biến khi sự khác biệt này có ý nghĩa là khi sử dụng các bộ chọn css dựa vào vị trí của phần tử trong DOM, chẳng hạn như các lớp giả: con đầu tiên hoặc cuối cùng.

Vì vậy, nó là NOT an toàn để ẩn dữ liệu nhạy cảm ở front-end. Tùy thuộc vào cấp độ quyền của người dùng, bạn có thể thực hiện cuộc gọi API riêng để tìm nạp dữ liệu. Tại máy chủ, hãy xác minh quyền và trả về phản hồi thích hợp.

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