2009-05-22 15 views
6

Một trong những tính năng tuyệt vời của CFC là khả năng sử dụng lại mã cho cả trang .cfm thẳng và cho ứng dụng Flex.Làm thế nào để bảo vệ các chức năng truy cập = "từ xa" trong các CFC từ các trình thám thính?

Một ứng dụng như vậy mà tôi devleoped sử dụng Flex cho khả năng biểu đồ của nó và cần truy cập vào một hàm 'getResults()' trong cfc.

Tất cả các nội dung này là đằng sau một cơ chế xác thực, nhưng kể từ khi CFC sẽ mở bản thân lên đến một yêu cầu wsdl:

https://myserver.com/c/functions.cfc?wsdl

và thực sự sẽ trả lại kết quả cho trình duyệt nếu truy vấn URL được chế tác đúng cách:

https://myserver.com/c/functions.cfc?method=getResults&Term=2009&Course=Anatomy

Những kỹ thuật nào mà mọi người sử dụng để bảo vệ cfc khỏi truy cập trực tiếp KHÔNG CẦN yêu cầu đến trực tiếp từ bộ xử lý CFML HOẶC từ Flex Remoting?

Trả lời

4

Bạn có thể sử dụng một số biến phạm vi CGI để kiểm tra xem yêu cầu đến từ đâu.

ví dụ: CGI.REMOTE_HOST, CGI.REMOTE_ADDR

Vì vậy, bạn muốn có thể xây dựng một chức năng mới với một truy cập = tài sản "công cộng" mà kiểm tra các giá trị của các biến chống lại một danh sách các giá trị hợp lệ cho bạn máy chủ. Nếu nó trả về true, bạn sẽ thực hiện yêu cầu và nếu nó trả về false, bạn sẽ ném/trả về một số loại lỗi.

+0

Bạn cũng có thể bảo đảm yêu cầu với một số loại thông tin xác thực để thêm một bức tường mỏng phiền toái khác. –

+0

Tôi nghĩ đây là con đường để đi. Tôi đang sử dụng CGI.SCRIPT_NAME để kiểm tra xem trình duyệt có đang truy cập trực tiếp vào CFC hay không. Nếu có, họ sẽ khởi động. –

3

tôi sẽ đề nghị thêm một handler OnRequestStart đến file Application.cfc của bạn, và thực hiện một tấm séc có ... những gì kiểm tra đó là phụ thuộc vào mô hình hiện tại của bạn, nhưng một số gợi ý tốt sẽ được kiểm tra cgi .remote_user (nếu được chứng thực) hoặc có thể lưu trữ một cái gì đó trong phạm vi phiên?

+0

Tôi đoán tôi cũng đang cố gắng bảo vệ cfc cụ thể khỏi bị thao túng bởi một người đã được xác thực/ủy quyền –

1

Một điều tôi muốn làm là chỉ có một đối số cho mỗi phương pháp - XML ​​hoặc Struct - và yêu cầu một tên nút/đối tượng nhất định có mặt trong XML hoặc Struct đó.

<cfif NOT StructKeyExists(arguments.myArgs, "requiredParam")> 
    <cfxml name="myXML"> 
     <error> 
      <message>Required parameter not found.</message> 
     </error> 
    </cfxml> 

    <cfreturn myXML /> 
</cfif> 

2

gì về việc sử dụng thuộc tính các vai trò mới? Mọi người truy cập vào trang web của bạn sẽ tự động nhận vai trò cflogin = "công khai".

0

Chỉ cần đi qua câu hỏi này trong khi tìm kiếm cái gì khác và nghĩ rằng tôi muốn thêm 2p tôi:

Tôi có một ứng dụng bằng cách sử dụng CFC từ xa mà tôi chỉ muốn được cung cấp cho người dùng đăng nhập 'admin'. Trong trường hợp này, kiểm tra biến CGI vẫn sẽ chuyển cho người dùng ứng dụng khách.

Khi người dùng quản trị đăng nhập, tôi lấy một mã băm của ID phiên và thời gian đăng nhập và lưu trữ trong cơ sở dữ liệu và phạm vi phiên. Khi tôi nhấn CFC từ xa, tôi chuyển băm dưới dạng biến và kiểm tra nó dựa vào cơ sở dữ liệu của người dùng quản trị.

Nếu hồ sơ trở lại, tôi biết người dùng hiện tại là quản trị viên và tôi tiếp tục với yêu cầu.