2010-03-07 26 views
5

Tôi có một tình huống trong đó tệp SWF chính của tôi tải nhiều tệp SWF bên ngoài. Tuy nhiên, những tệp SWF bên ngoài đó chỉ nằm trong thư mục công cộng của máy chủ web.Hạn chế hiển thị tệp SWF

Có thể hạn chế khả năng hiển thị SWF chỉ với tệp SWF chính của tôi (tệp tải SWF bên ngoài). Trong trạng thái hiện tại, bất kỳ người dùng nào biết nơi cần tìm chỉ có thể nhập vào URL và truy cập vào SWF, chưa kể các bot giả mạo không tuân theo robots.txt.

Lý do cho việc này rất đơn giản. Người dùng sử dụng tên người dùng/mật khẩu để đăng nhập vào ứng dụng Flash chính và ứng dụng Flash chính lần lượt tải các tệp SWF và CHỈ sau đó chúng có sẵn cho người dùng. Ngoài ra, tùy thuộc vào người dùng đã đăng nhập, một số tệp SWF bị hạn chế và không được tải.

Cảm ơn bạn đã trợ giúp!

+1

Tôi không quen với Flash nên tôi không biết khả năng cụ thể của Flash tồn tại cho điều này, nhưng điều này có thể được giải quyết bằng cách thực hiện đăng nhập bằng ngôn ngữ phía máy chủ như PHP hoặc ASP. Đăng nhập sẽ tạo một phiên và phiên hợp lệ sẽ là điều kiện để phân phối các tệp tiếp theo. –

+0

Cảm ơn Pekka. Tôi đã giải trí ý tưởng này, nhưng tôi khá chắc chắn Flash chỉ có thể tải các tài sản bên ngoài (bao gồm SWF) bằng cách yêu cầu một URL (SWF không thể được gửi * đến * nó). Nếu đúng, Flash sẽ không bao giờ có thể tiếp cận SWF nếu chúng được bảo vệ theo bất kỳ cách nào. – helloworlder

+0

Chỉ cần có một suy nghĩ khác. Không phải là nó có thể ngăn chặn một thư mục từ danh sách bằng cách sửa đổi .htacess? Vì vậy, nó không thể liệt kê, nhưng bạn vẫn có thể mở tệp nếu bạn biết chính xác tên. Có lẽ nó có thể làm cho tên không thể * để có được bằng cách thêm một băm vào cuối tên tập tin. * thực tế không thể – helloworlder

Trả lời

1

Phụ thuộc vào cách flash đang xác thực. Flash cần xác thực bằng ứng dụng phía máy chủ với cơ sở dữ liệu. Ứng dụng phía máy chủ sau đó có thể sử dụng cơ sở dữ liệu để thực hiện kiểm soát truy cập trên cơ sở từng tệp.

Tất cả files phải được theo dõi bởi một bảng, chứa các cột như địa phương path vào tệp cũng như user_group hoặc có thể là user_id. Phiên được xác thực sẽ theo dõi user_id sau khi họ đăng nhập bằng tên người dùng và mật khẩu.

Người nhện tấn công thường sử dụng robots.txt, nếu bạn đặt các đường dẫn tệp này vào tệp robots.txt, bạn nên tắt chúng lên và đưa chúng cho kẻ tấn công.

Rất dễ dàng để dịch ngược các ứng dụng flash và sửa đổi chúng. Không dựa vào các hệ thống bảo mật "phía máy khách", chúng rất dễ bỏ qua. Kẻ tấn công cũng có thể phát lại và sửa đổi các yêu cầu HTTP bằng cách sử dụng tamperdata.Bạn cần một máy chủ để cho khách hàng biết những tệp nào họ có thể truy cập.

+0

Xin chào, cảm ơn bạn đã trả lời! Tôi đã suy nghĩ về cách sử dụng một phương pháp như thế này, nhưng vấn đề là nếu các SWF bên ngoài nằm trong một thư mục được bảo vệ tức là không hiển thị công khai, thì Flash cũng không thể tải chúng, phải không? Tôi nghĩ vấn đề chính là bạn không thể chuyển đối tượng SWF vào ứng dụng Flash. Chỉ một ứng dụng Flash mới có thể tải các đối tượng SWF bằng cách tham chiếu đến một URL thực. Vì vậy, có thể điều đó là không thể? :-( – helloworlder

+0

Tôi cho rằng nếu không thể, tôi sẽ phải thỏa hiệp một chút nào đó Vấn đề bản quyền liên quan đến SWF là hơi phức tạp nhưng đó là bản chất của yêu cầu kinh doanh Nếu đó là một sự thỏa hiệp an ninh thì tôi có Có lẽ tôi có thể biến nó thành ứng dụng máy tính để bàn AIR thay vào đó và người dùng sẽ đăng nhập vào ứng dụng web và xem các tệp SWF "thuộc về" để chúng có sẵn để tải xuống. Họ tải xuống các tệp SWF đó từ máy chủ vào máy tính của họ để ứng dụng AIR có thể truy cập các tệp đó. – helloworlder

0

Tùy thuộc vào cách an toàn bạn muốn trở thành, tôi có thể nghĩ ra một vài lựa chọn:

  1. Một server-side script để kiểm soát giao phụ file SWF của bạn (như Pekka đã gợi ý ở trên).

  2. Nếu muốn làm tất cả client-side, bạn có thể đặt một bài kiểm tra điều kiện trong mỗi tiểu swf, vì vậy họ sẽ chỉ chơi từ bên swf chính của bạn:

Something như if(this.parent.toString() != "mainSwf") { stop();} (trong giả).

Cấp, điều này là không dễ dàng, vì ai đó có thể dễ dàng làm cho cha mẹ của họ có tên "mainSwf", nhưng nó sẽ ngăn chặn duyệt bình thường của phụ của bạn swfs. Ít nhất cho đến khi ai đó giải mã chúng ...

Bạn có thể làm mọi thứ khó hơn bằng cách đặt thuộc tính trong swf chính, chẳng hạn như var myKey:String="362574036704ry3f0y3432607", sau đó sử dụng điều kiện của bạn để kiểm tra: if(this.parent.myKey != "362574036704ry3f0y3432607") { stop();}.

Mặc dù không an toàn lắm. Hi vọng điêu nay co ich.


EDIT:

Ngoài ra còn có một câu hỏi tương tự here, mà có thể có câu trả lời hữu ích.

+0

-1 Bạn không thể đề xuất một lỗ hổng trên SO, đặc biệt là nếu bạn biết một lỗ hổng của nó. Việc biên dịch lại flash hoặc phát lại các yêu cầu GET với tamperdata có thể bỏ qua hệ thống bảo mật phía máy khách của bạn. – rook

+0

@ The Rook: Hehe, tôi chắc chắn sẽ đọc Câu hỏi thường gặp cẩn thận hơn lần sau! Nhưng hãy cho tôi biết làm thế nào bạn nghĩ rằng GET sniffing sẽ crack phương pháp này. Và có, đôi khi một giải pháp phía máy chủ là không thể vì những lý do khác ... đoán chúng ta đang sống trong một thế giới không hoàn hảo. :) –

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