Phiên PHP không cần đăng nhập

Phiên web là một chuỗi các giao dịch phản hồi và yêu cầu HTTP mạng được liên kết với cùng một người dùng. Các ứng dụng web hiện đại và phức tạp yêu cầu lưu giữ thông tin hoặc trạng thái về từng người dùng trong suốt thời gian của nhiều yêu cầu. Do đó, các phiên cung cấp khả năng thiết lập các biến – chẳng hạn như quyền truy cập và cài đặt bản địa hóa – sẽ áp dụng cho từng và mọi tương tác mà người dùng có với ứng dụng web trong suốt thời gian của phiên

Show

Các ứng dụng web có thể tạo phiên để theo dõi người dùng ẩn danh sau yêu cầu người dùng đầu tiên. Một ví dụ sẽ là duy trì tùy chọn ngôn ngữ của người dùng. Ngoài ra, các ứng dụng web sẽ sử dụng các phiên sau khi người dùng đã xác thực. Điều này đảm bảo khả năng xác định người dùng trong bất kỳ yêu cầu tiếp theo nào cũng như có thể áp dụng các biện pháp kiểm soát truy cập bảo mật, quyền truy cập được phép vào dữ liệu riêng tư của người dùng và để tăng khả năng sử dụng của ứng dụng. Do đó, các ứng dụng web hiện tại có thể cung cấp khả năng phiên cả xác thực trước và sau

Khi một phiên xác thực đã được thiết lập, ID phiên (hoặc mã thông báo) tạm thời tương đương với phương thức xác thực mạnh nhất mà ứng dụng sử dụng, chẳng hạn như tên người dùng và mật khẩu, cụm mật khẩu, mật khẩu một lần (OTP), chứng chỉ kỹ thuật số dựa trên ứng dụng khách, . Xem Bảng gian lận xác thực OWASP

HTTP là một giao thức không trạng thái (RFC2616 phần 5), trong đó mỗi cặp yêu cầu và phản hồi độc lập với các tương tác web khác. Do đó, để giới thiệu khái niệm phiên, cần phải triển khai các khả năng quản lý phiên liên kết cả mô-đun xác thực và kiểm soát truy cập (hoặc ủy quyền) thường có sẵn trong các ứng dụng web

Phiên PHP không cần đăng nhập

ID phiên hoặc mã thông báo liên kết thông tin đăng nhập xác thực người dùng (ở dạng phiên người dùng) với lưu lượng HTTP của người dùng và các điều khiển truy cập phù hợp do ứng dụng web thực thi. Sự phức tạp của ba thành phần này (xác thực, quản lý phiên và kiểm soát truy cập) trong các ứng dụng web hiện đại, cộng với thực tế là việc triển khai và ràng buộc của nó nằm trong tay nhà phát triển web (vì các khung phát triển web không cung cấp các mối quan hệ chặt chẽ giữa các mô-đun này),

Việc tiết lộ, nắm bắt, dự đoán, vũ phu hoặc cố định ID phiên sẽ dẫn đến các cuộc tấn công chiếm quyền điều khiển phiên (hoặc tấn công ngang), trong đó kẻ tấn công có thể mạo danh hoàn toàn người dùng nạn nhân trong ứng dụng web. Kẻ tấn công có thể thực hiện hai loại tấn công chiếm quyền điều khiển phiên, được nhắm mục tiêu hoặc chung chung. Trong một cuộc tấn công có chủ đích, mục tiêu của kẻ tấn công là mạo danh một người dùng nạn nhân ứng dụng web cụ thể (hoặc có đặc quyền). Đối với các cuộc tấn công chung, mục tiêu của kẻ tấn công là mạo danh (hoặc có quyền truy cập như) bất kỳ người dùng hợp lệ hoặc hợp pháp nào trong ứng dụng web

Thuộc tính ID phiên

Để duy trì trạng thái xác thực và theo dõi tiến trình của người dùng trong ứng dụng web, ứng dụng cung cấp cho người dùng mã định danh phiên (ID phiên hoặc mã thông báo) được chỉ định tại thời điểm tạo phiên và được người dùng và ứng dụng web chia sẻ và trao đổi . ID phiên là một cặp name=value

Với mục tiêu triển khai ID phiên an toàn, việc tạo số nhận dạng (ID hoặc mã thông báo) phải đáp ứng các thuộc tính sau

ID phiên Tên vân tay

Tên được sử dụng bởi ID phiên không được quá mô tả cũng như không cung cấp các chi tiết không cần thiết về mục đích và ý nghĩa của ID

Tên ID phiên được sử dụng bởi các khung phát triển ứng dụng web phổ biến nhất có thể dễ dàng được lấy dấu vân tay, chẳng hạn như PHPSESSID (PHP), JSESSIONID (J2EE), CFID & CFTOKEN (ColdFusion), ASP.NET_SessionId (ASP. NET), v.v. Do đó, tên ID phiên có thể tiết lộ các công nghệ và ngôn ngữ lập trình được ứng dụng web sử dụng

Bạn nên thay đổi tên ID phiên mặc định của khung phát triển web thành một tên chung chung, chẳng hạn như id

Độ dài ID phiên

ID phiên phải đủ dài để ngăn chặn các cuộc tấn công vũ phu, trong đó kẻ tấn công có thể xem qua toàn bộ phạm vi giá trị ID và xác minh sự tồn tại của các phiên hợp lệ

Độ dài ID phiên ít nhất phải là 128 bits (16 bytes)

GHI CHÚ

  • Độ dài ID phiên là 128 bit được cung cấp dưới dạng tham chiếu dựa trên các giả định được đưa ra trong phần tiếp theo Entropy ID phiên. Tuy nhiên, con số này không nên được coi là giá trị tối thiểu tuyệt đối, vì các yếu tố triển khai khác có thể ảnh hưởng đến độ mạnh của nó
  • Ví dụ: có những triển khai nổi tiếng, chẳng hạn như Microsoft ASP. ID phiên NET. "ASP. NET là một số được tạo ngẫu nhiên được mã hóa thành chuỗi 24 ký tự bao gồm các ký tự chữ thường từ a đến z và các số từ 0 đến 5"
  • Nó có thể cung cấp một entropy hiệu quả rất tốt, và kết quả là, có thể được coi là đủ lâu để tránh các cuộc tấn công đoán mò hoặc vũ phu

Entropy ID phiên

ID phiên phải không thể đoán trước (đủ ngẫu nhiên) để ngăn chặn các cuộc tấn công đoán, trong đó kẻ tấn công có thể đoán hoặc dự đoán ID của phiên hợp lệ thông qua các kỹ thuật phân tích thống kê. Với mục đích này, phải sử dụng CSPRNG (Trình tạo số giả ngẫu nhiên an toàn bằng mật mã) tốt

Giá trị ID phiên phải cung cấp ít nhất 64 bits entropy (nếu sử dụng PRNG tốt, giá trị này ước tính bằng một nửa độ dài của ID phiên)

Ngoài ra, một ID phiên ngẫu nhiên là không đủ; . ID phiên ngẫu nhiên không được tồn tại trong không gian ID phiên hiện tại

GHI CHÚ

  • Entropy ID phiên thực sự bị ảnh hưởng bởi các yếu tố bên ngoài và khó đo lường khác, chẳng hạn như số phiên hoạt động đồng thời mà ứng dụng web thường có, thời gian chờ hết hạn tuyệt đối của phiên, số lần đoán ID phiên mỗi giây mà kẻ tấn công có thể thực hiện và
  • Nếu sử dụng ID phiên có entropy 64 bits, kẻ tấn công sẽ mất ít nhất 292 năm để đoán thành công ID phiên hợp lệ, giả sử kẻ tấn công có thể thử 10.000 lần đoán mỗi giây với 100.000 phiên đồng thời hợp lệ có sẵn trong ứng dụng web
  • Thêm thông tin tại đây

Nội dung ID phiên (hoặc Giá trị)

Nội dung ID phiên (hoặc giá trị) phải vô nghĩa để ngăn chặn các cuộc tấn công tiết lộ thông tin, trong đó kẻ tấn công có thể giải mã nội dung của ID và trích xuất thông tin chi tiết về người dùng, phiên hoặc hoạt động bên trong của ứng dụng web

ID phiên phải chỉ là một mã định danh ở phía máy khách và giá trị của nó không bao giờ được bao gồm thông tin nhạy cảm (hoặc PII)

Ý nghĩa và logic nghiệp vụ hoặc ứng dụng được liên kết với ID phiên phải được lưu trữ ở phía máy chủ và cụ thể là trong các đối tượng phiên hoặc trong kho lưu trữ hoặc cơ sở dữ liệu quản lý phiên.

Thông tin được lưu trữ có thể bao gồm địa chỉ IP của máy khách, Tác nhân người dùng, e-mail, tên người dùng, ID người dùng, vai trò, mức đặc quyền, quyền truy cập, tùy chọn ngôn ngữ, ID tài khoản, trạng thái hiện tại, lần đăng nhập cuối cùng, thời gian chờ của phiên và phiên nội bộ khác . Nếu các đối tượng và thuộc tính phiên chứa thông tin nhạy cảm, chẳng hạn như số thẻ tín dụng, thì cần phải mã hóa và bảo vệ hợp lệ kho lưu trữ quản lý phiên

Bạn nên sử dụng ID phiên được tạo bởi ngôn ngữ hoặc khuôn khổ của bạn. Nếu bạn cần tạo sessionID của riêng mình, hãy sử dụng trình tạo số giả ngẫu nhiên an toàn bằng mật mã (CSPRNG) với kích thước ít nhất là 128 bit và đảm bảo rằng mỗi sessionID là duy nhất

Thực hiện quản lý phiên

Việc triển khai quản lý phiên xác định cơ chế trao đổi sẽ được sử dụng giữa người dùng và ứng dụng web để chia sẻ và liên tục trao đổi ID phiên. Có nhiều cơ chế có sẵn trong HTTP để duy trì trạng thái phiên trong các ứng dụng web, chẳng hạn như cookie (tiêu đề HTTP tiêu chuẩn), tham số URL (viết lại URL – RFC2396), đối số URL trên yêu cầu GET, đối số nội dung trên yêu cầu POST, chẳng hạn như trường biểu mẫu ẩn

Cơ chế trao đổi ID phiên ưa thích sẽ cho phép xác định các thuộc tính mã thông báo nâng cao, chẳng hạn như ngày và giờ hết hạn mã thông báo hoặc các ràng buộc sử dụng chi tiết. Đây là một trong những lý do tại sao cookie (RFC 2109 & 2965 & 6265) là một trong những cơ chế trao đổi ID phiên được sử dụng rộng rãi nhất, cung cấp các khả năng nâng cao không có sẵn trong các phương pháp khác

Việc sử dụng các cơ chế trao đổi ID phiên cụ thể, chẳng hạn như những cơ chế bao gồm ID trong URL, có thể tiết lộ ID phiên (trong nhật ký và liên kết web, lịch sử trình duyệt web và dấu trang, tiêu đề Người giới thiệu hoặc công cụ tìm kiếm), cũng như

Triển khai quản lý phiên tích hợp

Các khung phát triển web, chẳng hạn như J2EE, ASP. NET, PHP và những người khác, cung cấp các tính năng quản lý phiên của riêng họ và triển khai liên quan. Bạn nên sử dụng các khung tích hợp sẵn này thay vì xây dựng một ngôi nhà hoàn toàn từ đầu, vì chúng được sử dụng trên toàn thế giới trên nhiều môi trường web và đã được cộng đồng phát triển và bảo mật ứng dụng web kiểm tra theo thời gian

Tuy nhiên, xin lưu ý rằng các khuôn khổ này cũng đã từng có các lỗ hổng và điểm yếu, vì vậy bạn nên luôn sử dụng phiên bản mới nhất hiện có, phiên bản này có khả năng sửa tất cả các lỗ hổng đã biết, cũng như xem xét và thay đổi cấu hình mặc định để nâng cao

Khả năng lưu trữ hoặc kho lưu trữ được sử dụng bởi cơ chế quản lý phiên để lưu tạm thời các ID phiên phải được bảo mật, bảo vệ các ID phiên khỏi tiết lộ tình cờ từ xa hoặc cục bộ hoặc truy cập trái phép

Được sử dụng so với. Cơ chế trao đổi ID phiên được chấp nhận

Ứng dụng web nên sử dụng cookie để quản lý trao đổi ID phiên. Nếu người dùng gửi ID phiên thông qua một cơ chế trao đổi khác, chẳng hạn như tham số URL, thì ứng dụng web nên tránh chấp nhận nó như một phần của chiến lược phòng thủ để dừng sửa lỗi phiên

GHI CHÚ

  • Ngay cả khi một ứng dụng web sử dụng cookie làm cơ chế trao đổi ID phiên mặc định, ứng dụng đó cũng có thể chấp nhận các cơ chế trao đổi khác
  • Do đó, cần phải xác nhận thông qua kiểm tra kỹ lưỡng tất cả các cơ chế khác nhau hiện được ứng dụng web chấp nhận khi xử lý và quản lý ID phiên và giới hạn các cơ chế theo dõi ID phiên được chấp nhận chỉ là cookie
  • Trước đây, một số ứng dụng web đã sử dụng tham số URL hoặc thậm chí chuyển từ cookie sang tham số URL (thông qua viết lại URL tự động), nếu một số điều kiện được đáp ứng (ví dụ: nhận dạng ứng dụng khách web không hỗ trợ cookie hoặc không chấp nhận cookie do

Bảo mật tầng vận tải

Để bảo vệ quá trình trao đổi ID phiên khỏi bị nghe trộm chủ động và tiết lộ bị động trong lưu lượng mạng, điều cần thiết là sử dụng kết nối HTTPS (TLS) được mã hóa cho toàn bộ phiên web, không chỉ cho quá trình xác thực nơi trao đổi thông tin đăng nhập của người dùng. Điều này có thể được giảm thiểu bằng HTTP Strict Transport Security (HSTS) cho máy khách hỗ trợ nó

Ngoài ra, PHPSESSID0 phải được sử dụng để đảm bảo ID phiên chỉ được trao đổi thông qua một kênh được mã hóa. Việc sử dụng kênh liên lạc được mã hóa cũng bảo vệ phiên khỏi một số cuộc tấn công cố định phiên mà kẻ tấn công có thể chặn và thao túng lưu lượng truy cập web để chèn (hoặc sửa) ID phiên trên trình duyệt web của nạn nhân (xem tại đây và tại đây)

Tập hợp các phương pháp hay nhất sau đây tập trung vào việc bảo vệ ID phiên (cụ thể là khi cookie được sử dụng) và giúp tích hợp HTTPS trong ứng dụng web

  • Không chuyển một phiên nhất định từ HTTP sang HTTPS hoặc ngược lại, vì điều này sẽ tiết lộ ID phiên rõ ràng thông qua mạng
    • Khi chuyển hướng đến HTTPS, đảm bảo rằng cookie được đặt hoặc tạo lại sau khi chuyển hướng xảy ra
  • Không trộn lẫn nội dung được mã hóa và không được mã hóa (trang HTML, hình ảnh, tệp CSS, JavaScript, v.v.) trong cùng một trang hoặc từ cùng một miền
  • Nếu có thể, tránh cung cấp nội dung không được mã hóa công khai và nội dung được mã hóa riêng tư từ cùng một máy chủ. Khi bắt buộc phải có nội dung không an toàn, hãy xem xét lưu trữ nội dung này trên một miền không an toàn riêng biệt
  • Triển khai HTTP Strict Transport Security (HSTS) để thực thi các kết nối HTTPS

Xem Bảng cheat bảo vệ lớp vận chuyển OWASP để biết thêm hướng dẫn chung về cách triển khai TLS một cách an toàn

Điều quan trọng cần nhấn mạnh là TLS không bảo vệ chống lại dự đoán ID phiên, bạo lực, giả mạo hoặc cố định phía máy khách;

Bánh quy

Cơ chế trao đổi ID phiên dựa trên cookie cung cấp nhiều tính năng bảo mật dưới dạng thuộc tính cookie có thể được sử dụng để bảo vệ việc trao đổi ID phiên

Thuộc tính an toàn

Thuộc tính cookie PHPSESSID0 hướng dẫn trình duyệt web chỉ gửi cookie thông qua kết nối HTTPS (SSL/TLS) được mã hóa. Cơ chế bảo vệ phiên này là bắt buộc để ngăn chặn việc tiết lộ ID phiên thông qua các cuộc tấn công MitM (Man-in-the-Middle). Nó đảm bảo rằng kẻ tấn công không thể lấy ID phiên từ lưu lượng truy cập trình duyệt web

Buộc ứng dụng web chỉ sử dụng HTTPS để liên lạc (ngay cả khi cổng TCP/80, HTTP, bị đóng trong máy chủ ứng dụng web) không bảo vệ khỏi việc tiết lộ ID phiên nếu cookie PHPSESSID0 chưa được đặt - trình duyệt web có thể bị . Kẻ tấn công có thể chặn và thao túng lưu lượng người dùng nạn nhân và đưa một tham chiếu HTTP không được mã hóa vào ứng dụng web sẽ buộc trình duyệt web gửi ID phiên một cách rõ ràng.

Xem thêm.

Thuộc tính httpOnly

Thuộc tính cookie PHPSESSID3 hướng dẫn trình duyệt web không cho phép tập lệnh (e. g. JavaScript hoặc VBscript) khả năng truy cập cookie thông qua tài liệu DOM. đối tượng cookie. Bảo vệ ID phiên này là bắt buộc để ngăn chặn đánh cắp ID phiên thông qua các cuộc tấn công XSS. Tuy nhiên, nếu một cuộc tấn công XSS được kết hợp với một cuộc tấn công CSRF, các yêu cầu được gửi đến ứng dụng web sẽ bao gồm cookie phiên, vì trình duyệt luôn bao gồm các cookie khi gửi yêu cầu. Cookie PHPSESSID3 chỉ bảo vệ tính bảo mật của cookie;

Xem Bảng gian lận phòng chống OWASP XSS (Cross Site Scripting)

Xem thêm.

Thuộc tính SameSite

SameSite xác định thuộc tính cookie ngăn trình duyệt gửi cookie được gắn cờ SameSite với các yêu cầu trên nhiều trang. Mục tiêu chính là giảm thiểu nguy cơ rò rỉ thông tin giữa các nguồn gốc và cung cấp một số biện pháp bảo vệ chống lại các cuộc tấn công giả mạo yêu cầu trên nhiều trang web

Xem thêm.

Thuộc tính tên miền và đường dẫn

Hướng dẫn các trình duyệt web chỉ gửi cookie đến miền được chỉ định và tất cả các miền phụ. Nếu thuộc tính không được đặt, theo mặc định, cookie sẽ chỉ được gửi đến máy chủ gốc. Hướng dẫn trình duyệt web chỉ gửi cookie đến thư mục hoặc thư mục con được chỉ định (hoặc đường dẫn hoặc tài nguyên) trong ứng dụng web. Nếu thuộc tính không được đặt, theo mặc định, cookie sẽ chỉ được gửi cho thư mục (hoặc đường dẫn) của tài nguyên được yêu cầu và đặt cookie

Nên sử dụng phạm vi hẹp hoặc giới hạn cho hai thuộc tính này. Theo cách này, không nên đặt thuộc tính PHPSESSID5 (chỉ giới hạn cookie cho máy chủ gốc) và thuộc tính PHPSESSID6 phải được đặt càng hạn chế càng tốt đối với đường dẫn ứng dụng web sử dụng ID phiên

Đặt thuộc tính PHPSESSID5 thành một giá trị quá dễ dãi, chẳng hạn như JSESSIONID0 cho phép kẻ tấn công khởi chạy các cuộc tấn công vào ID phiên giữa các máy chủ và ứng dụng web khác nhau thuộc cùng một miền, được gọi là cookie tên miền phụ chéo. Ví dụ: các lỗ hổng trong JSESSIONID1 có thể cho phép kẻ tấn công truy cập vào ID phiên từ JSESSIONID2

Ngoài ra, không nên kết hợp các ứng dụng web có mức độ bảo mật khác nhau trên cùng một miền. Các lỗ hổng trong một trong các ứng dụng web sẽ cho phép kẻ tấn công đặt ID phiên cho một ứng dụng web khác trên cùng một miền bằng cách sử dụng thuộc tính PHPSESSID5 cho phép (chẳng hạn như JSESSIONID0), đây là một kỹ thuật có thể được sử dụng trong các cuộc tấn công cố định phiên

Mặc dù thuộc tính PHPSESSID6 cho phép tách biệt ID phiên giữa các ứng dụng web khác nhau sử dụng các đường dẫn khác nhau trên cùng một máy chủ, nhưng chúng tôi khuyên bạn không nên chạy các ứng dụng web khác nhau (đặc biệt là từ các cấp độ hoặc phạm vi bảo mật khác nhau) trên cùng một máy chủ. Các phương pháp khác có thể được các ứng dụng này sử dụng để truy cập ID phiên, chẳng hạn như đối tượng JSESSIONID6. Ngoài ra, bất kỳ ứng dụng web nào cũng có thể đặt cookie cho bất kỳ đường dẫn nào trên máy chủ đó

Cookie dễ bị tấn công giả mạo/chiếm đoạt/đầu độc DNS, trong đó kẻ tấn công có thể thao túng độ phân giải DNS để buộc trình duyệt web tiết lộ ID phiên cho một máy chủ hoặc tên miền nhất định

Thuộc tính hết hạn và tuổi tối đa

Cơ chế quản lý phiên dựa trên cookie có thể sử dụng hai loại cookie, cookie không liên tục (hoặc phiên) và cookie liên tục. Nếu một cookie trình bày (được ưu tiên hơn JSESSIONID8) hoặc các thuộc tính, thì nó sẽ được coi là một cookie liên tục và sẽ được trình duyệt web lưu trữ trên đĩa cho đến khi hết hạn

Thông thường, khả năng quản lý phiên để theo dõi người dùng sau khi xác thực sử dụng cookie không liên tục. Điều này buộc phiên biến mất khỏi máy khách nếu phiên bản trình duyệt web hiện tại bị đóng. Do đó, chúng tôi khuyên bạn nên sử dụng non-persistent cookie cho mục đích quản lý phiên, để ID phiên không tồn tại trên bộ đệm của máy khách web trong thời gian dài, từ đó kẻ tấn công có thể lấy được nó

  • Đảm bảo rằng thông tin nhạy cảm không bị xâm phạm bằng cách đảm bảo rằng thông tin đó không tồn tại lâu dài, mã hóa và chỉ lưu trữ thông tin đó trong khoảng thời gian cần thiết
  • Đảm bảo rằng các hoạt động trái phép không thể diễn ra thông qua thao tác cookie
  • Đảm bảo cờ an toàn được đặt để ngăn việc vô tình truyền qua dây theo cách không an toàn
  • Xác định xem tất cả các chuyển đổi trạng thái trong mã ứng dụng có kiểm tra đúng cookie và thực thi việc sử dụng chúng không
  • Đảm bảo toàn bộ cookie phải được mã hóa nếu dữ liệu nhạy cảm vẫn tồn tại trong cookie
  • Xác định tất cả các cookie đang được ứng dụng sử dụng, tên của chúng và lý do chúng cần thiết

API lưu trữ web HTML5

Nhóm làm việc về công nghệ ứng dụng siêu văn bản web (WHATWG) mô tả các API lưu trữ web HTML5, CFID0 và CFID1, dưới dạng cơ chế lưu trữ các cặp tên-giá trị phía máy khách. Không giống như cookie HTTP, nội dung của CFID0 và CFID1 không được trình duyệt tự động chia sẻ trong các yêu cầu hoặc phản hồi và được sử dụng để lưu trữ dữ liệu phía máy khách

API lưu trữ cục bộ

Phạm vi

Dữ liệu được lưu trữ bằng API CFID0 có thể truy cập được bởi các trang được tải từ cùng một nguồn gốc, được xác định là lược đồ (CFID5), máy chủ lưu trữ (JSESSIONID0), cổng (CFID7) và miền/lĩnh vực (JSESSIONID0). Điều này cung cấp quyền truy cập tương tự vào dữ liệu này như có thể đạt được bằng cách sử dụng cờ CFID9 trên cookie, nghĩa là không thể truy xuất dữ liệu được lưu trữ từ CFTOKEN0 qua CFTOKEN1. Do khả năng truy cập đồng thời từ các cửa sổ/luồng riêng biệt, dữ liệu được lưu trữ bằng cách sử dụng CFID0 có thể dễ gặp phải các sự cố truy cập được chia sẻ (chẳng hạn như điều kiện chủng tộc) và nên được coi là không khóa ()

Khoảng thời gian

Dữ liệu được lưu trữ bằng API CFID0 được duy trì trong các phiên duyệt web, kéo dài khung thời gian mà người dùng hệ thống khác có thể truy cập dữ liệu đó

Truy cập ngoại tuyến

Các tiêu chuẩn không yêu cầu dữ liệu CFID0 phải được mã hóa ở trạng thái nghỉ, nghĩa là có thể truy cập trực tiếp dữ liệu này từ đĩa

Trường hợp sử dụng

WHATWG đề xuất sử dụng CFID0 cho dữ liệu cần được truy cập trên các cửa sổ hoặc tab, trên nhiều phiên và nơi có thể cần lưu trữ khối lượng dữ liệu lớn (nhiều megabyte) vì lý do hiệu suất

API phiênStorage

Phạm vi

API CFID1 lưu trữ dữ liệu trong ngữ cảnh cửa sổ mà nó được gọi, nghĩa là Tab 1 không thể truy cập dữ liệu được lưu trữ từ Tab 2. Ngoài ra, giống như API CFID0, dữ liệu được lưu trữ bằng API CFID1 có thể truy cập được bởi các trang được tải từ cùng một nguồn gốc, được xác định là lược đồ (CFID5), máy chủ lưu trữ (JSESSIONID0), cổng (_______3_______7) và miền/lĩnh vực (JSESSIONID0 . Điều này cung cấp quyền truy cập tương tự vào dữ liệu này như có thể đạt được bằng cách sử dụng cờ CFID9 trên cookie, nghĩa là không thể truy xuất dữ liệu được lưu trữ từ CFTOKEN0 qua CFTOKEN1

Khoảng thời gian

API CFID1 chỉ lưu trữ dữ liệu trong khoảng thời gian của phiên duyệt web hiện tại. Sau khi đóng tab, dữ liệu đó không thể truy xuất được nữa. Điều này không nhất thiết ngăn chặn quyền truy cập, nếu tab trình duyệt được sử dụng lại hoặc để mở. Dữ liệu cũng có thể tồn tại trong bộ nhớ cho đến khi xảy ra sự kiện thu gom rác

Truy cập ngoại tuyến

Các tiêu chuẩn không yêu cầu dữ liệu CFID1 phải được mã hóa ở trạng thái nghỉ, nghĩa là có thể truy cập trực tiếp dữ liệu này từ đĩa

Trường hợp sử dụng

WHATWG đề xuất sử dụng CFID1 cho dữ liệu phù hợp với một phiên bản của quy trình công việc, chẳng hạn như thông tin chi tiết về đặt vé nhưng có thể thực hiện đồng thời nhiều quy trình công việc trong các tab khác. Bản chất ràng buộc cửa sổ/tab sẽ giữ cho dữ liệu không bị rò rỉ giữa các luồng công việc trong các tab riêng biệt

Người giới thiệu

  • API lưu trữ web
  • API lưu trữ cục bộ
  • SessionStorage API

Công nhân web

Công nhân web chạy mã JavaScript trong ngữ cảnh toàn cầu tách biệt với ngữ cảnh của cửa sổ hiện tại. Có một kênh giao tiếp với cửa sổ thực thi chính, được gọi là ASP.NET_SessionId9

Trường hợp sử dụng

Công nhân web là một giải pháp thay thế cho việc lưu trữ các bí mật (phiên) của trình duyệt khi việc lưu trữ liên tục trong quá trình làm mới trang không phải là một yêu cầu. Để Công nhân web cung cấp bộ lưu trữ trình duyệt an toàn, bất kỳ mã nào yêu cầu bí mật phải tồn tại trong Công nhân web và bí mật sẽ không bao giờ được truyền đến ngữ cảnh cửa sổ chính

Lưu trữ các bí mật trong bộ nhớ của Công nhân web cung cấp các đảm bảo bảo mật giống như cookie HttpOnly. tính bí mật của bí mật được bảo vệ. Tuy nhiên, một cuộc tấn công XSS có thể được sử dụng để gửi tin nhắn đến Web Worker để thực hiện một thao tác yêu cầu bí mật. Web Worker sẽ trả về kết quả của thao tác cho luồng thực thi chính

Ưu điểm của việc triển khai Công nhân web so với cookie HttpOnly là Công nhân web cho phép một số mã JavaScript bị cô lập truy cập bí mật; . Nếu mã JavaScript giao diện người dùng yêu cầu quyền truy cập vào bí mật, thì việc triển khai Công nhân web là tùy chọn lưu trữ trình duyệt duy nhất bảo vệ tính bảo mật bí mật

Vòng đời ID phiên

Tạo và xác minh ID phiên. Quản lý phiên cho phép và nghiêm ngặt

Có hai loại cơ chế quản lý phiên cho các ứng dụng web, cho phép và nghiêm ngặt, liên quan đến lỗ hổng cố định phiên. Cơ chế cho phép cho phép ứng dụng web ban đầu chấp nhận bất kỳ giá trị ID phiên nào do người dùng đặt là hợp lệ, tạo một phiên mới cho nó, trong khi cơ chế nghiêm ngặt thực thi rằng ứng dụng web sẽ chỉ chấp nhận các giá trị ID phiên đã được tạo trước đó bởi ứng dụng web.

Mã thông báo phiên phải được máy chủ web xử lý nếu có thể hoặc được tạo thông qua trình tạo số ngẫu nhiên được bảo mật bằng mật mã

Mặc dù cơ chế phổ biến nhất được sử dụng hiện nay là cơ chế nghiêm ngặt (an toàn hơn), PHP mặc định là cho phép. Nhà phát triển phải đảm bảo rằng ứng dụng web không sử dụng cơ chế cho phép trong một số trường hợp nhất định. Các ứng dụng web không bao giờ được chấp nhận ID phiên mà chúng chưa bao giờ tạo và trong trường hợp nhận được ID phiên, chúng sẽ tạo và cung cấp cho người dùng ID phiên hợp lệ mới. Ngoài ra, tình huống này sẽ được phát hiện là một hoạt động đáng ngờ và một cảnh báo sẽ được tạo

Quản lý ID phiên làm bất kỳ đầu vào nào khác của người dùng

ID phiên phải được coi là không đáng tin cậy, vì bất kỳ thông tin nhập nào khác của người dùng được ứng dụng web xử lý và chúng phải được xác thực và xác minh kỹ lưỡng. Tùy thuộc vào cơ chế quản lý phiên được sử dụng, ID phiên sẽ được nhận trong tham số GET hoặc POST, trong URL hoặc trong tiêu đề HTTP (e. g. bánh quy). Nếu các ứng dụng web không xác thực và lọc ra các giá trị ID phiên không hợp lệ trước khi xử lý chúng, chúng có thể được sử dụng để khai thác các lỗ hổng web khác, chẳng hạn như SQL injection nếu ID phiên được lưu trữ trên cơ sở dữ liệu quan hệ hoặc XSS liên tục nếu ID phiên

Gia hạn ID phiên sau bất kỳ thay đổi cấp độ đặc quyền nào

ID phiên phải được ứng dụng web gia hạn hoặc tạo lại sau bất kỳ thay đổi cấp đặc quyền nào trong phiên người dùng được liên kết. Kịch bản phổ biến nhất trong đó bắt buộc phải tạo lại ID phiên là trong quá trình xác thực, vì mức đặc quyền của người dùng thay đổi từ trạng thái chưa xác thực (hoặc ẩn danh) sang trạng thái đã xác thực mặc dù trong một số trường hợp vẫn chưa phải là trạng thái được ủy quyền. Các kịch bản phổ biến để xem xét bao gồm; . Đối với tất cả các trang nhạy cảm của ứng dụng web, mọi ID phiên trước đó phải được bỏ qua, chỉ ID phiên hiện tại phải được chỉ định cho mọi yêu cầu mới nhận được cho tài nguyên được bảo vệ và ID phiên cũ hoặc trước đó phải bị hủy

Các khung phát triển web phổ biến nhất cung cấp các chức năng phiên và phương thức để gia hạn ID phiên, chẳng hạn như id0 & id1 (J2EE), id2 & id3 (ASP. NET), hoặc id4 & id5 (PHP)

Việc tạo lại ID phiên là bắt buộc để ngăn chặn các cuộc tấn công cố định phiên, trong đó kẻ tấn công đặt ID phiên trên trình duyệt web của người dùng nạn nhân thay vì thu thập ID phiên của nạn nhân, như trong hầu hết các cuộc tấn công dựa trên phiên khác và độc lập với việc sử dụng HTTP hoặc . Biện pháp bảo vệ này giảm thiểu tác động của các lỗ hổng dựa trên web khác cũng có thể được sử dụng để khởi chạy các cuộc tấn công cố định phiên, chẳng hạn như phân tách phản hồi HTTP hoặc XSS (xem tại đây và tại đây)

Một đề xuất bổ sung là sử dụng ID phiên khác hoặc tên mã thông báo (hoặc bộ ID phiên) xác thực trước và sau để ứng dụng web có thể theo dõi người dùng ẩn danh và người dùng được xác thực mà không có nguy cơ lộ hoặc ràng buộc phiên người dùng giữa

Nếu ứng dụng web sử dụng cookie làm cơ chế trao đổi ID phiên và nhiều cookie được đặt cho một phiên nhất định, thì ứng dụng web phải xác minh tất cả cookie (và thực thi mối quan hệ giữa chúng) trước khi cho phép truy cập vào phiên người dùng

Rất phổ biến đối với các ứng dụng web đặt xác thực trước cookie của người dùng qua HTTP để theo dõi người dùng chưa được xác thực (hoặc ẩn danh). Sau khi người dùng xác thực trong ứng dụng web, cookie bảo mật sau xác thực mới được đặt qua HTTPS và ràng buộc giữa cả cookie và phiên người dùng được thiết lập. Nếu ứng dụng web không xác minh cả hai cookie cho các phiên xác thực, kẻ tấn công có thể sử dụng cookie không được bảo vệ xác thực trước để có quyền truy cập vào phiên người dùng đã xác thực (xem tại đây và tại đây)

Các ứng dụng web nên cố gắng tránh trùng tên cookie cho các đường dẫn hoặc phạm vi tên miền khác nhau trong cùng một ứng dụng web, vì điều này làm tăng độ phức tạp của giải pháp và có khả năng gây ra các sự cố về phạm vi

Phiên hết hạn

Để giảm thiểu khoảng thời gian mà kẻ tấn công có thể khởi động các cuộc tấn công vào các phiên đang hoạt động và chiếm quyền điều khiển chúng, bắt buộc phải đặt thời gian chờ hết hạn cho mỗi phiên, thiết lập lượng thời gian mà một phiên sẽ vẫn hoạt động. Ứng dụng web không đủ thời gian hết hạn phiên làm tăng khả năng xảy ra các cuộc tấn công dựa trên phiên khác, vì để kẻ tấn công có thể sử dụng lại ID phiên hợp lệ và chiếm quyền điều khiển phiên được liên kết, nó vẫn phải đang hoạt động

Khoảng thời gian phiên càng ngắn thì thời gian kẻ tấn công sử dụng ID phiên hợp lệ càng ít. Các giá trị thời gian hết hạn của phiên phải được đặt phù hợp với mục đích và bản chất của ứng dụng web, đồng thời cân bằng giữa tính bảo mật và khả năng sử dụng để người dùng có thể thoải mái hoàn thành các thao tác trong ứng dụng web mà phiên của mình không thường xuyên hết hạn

Cả giá trị thời gian chờ không hoạt động và thời gian chờ tuyệt đối đều phụ thuộc nhiều vào mức độ quan trọng của ứng dụng web và dữ liệu của nó. Khoảng thời gian chờ nhàn rỗi phổ biến là 2-5 phút cho các ứng dụng có giá trị cao và 15-30 phút cho các ứng dụng rủi ro thấp. Thời gian chờ tuyệt đối phụ thuộc vào khoảng thời gian người dùng thường sử dụng ứng dụng. Nếu ứng dụng dành cho nhân viên văn phòng sử dụng trong cả ngày, khoảng thời gian chờ tuyệt đối thích hợp có thể là từ 4 đến 8 giờ

Khi một phiên hết hạn, ứng dụng web phải thực hiện các hành động tích cực để vô hiệu hóa phiên ở cả hai phía, máy khách và máy chủ. Cái sau là phù hợp nhất và bắt buộc từ góc độ bảo mật

Đối với hầu hết các cơ chế trao đổi phiên, hành động phía máy khách để vô hiệu hóa ID phiên dựa trên việc xóa giá trị mã thông báo. Ví dụ: để vô hiệu hóa cookie, bạn nên cung cấp giá trị trống (hoặc không hợp lệ) cho ID phiên và đặt thuộc tính JSESSIONID8 (hoặc JSESSIONID7) thành một ngày trong quá khứ (trong trường hợp cookie liên tục đang được sử dụng). id8

Để đóng và làm mất hiệu lực phiên ở phía máy chủ, ứng dụng web bắt buộc phải thực hiện các hành động tích cực khi phiên hết hạn hoặc người dùng chủ động đăng xuất bằng cách sử dụng các chức năng và phương thức do cơ chế quản lý phiên cung cấp, chẳng hạn như . NET) hoặc 128 bits (16 bytes)1 (PHP)

Hết hạn phiên tự động

Thời gian chờ nhàn rỗi

Tất cả các phiên phải triển khai thời gian chờ không hoạt động hoặc không hoạt động. Thời gian chờ này xác định lượng thời gian phiên sẽ vẫn hoạt động trong trường hợp không có hoạt động nào trong phiên, đóng và làm mất hiệu lực phiên theo khoảng thời gian không hoạt động đã xác định kể từ khi ứng dụng web nhận được yêu cầu HTTP cuối cùng cho một ID phiên nhất định

Thời gian chờ không hoạt động giới hạn khả năng kẻ tấn công phải đoán và sử dụng ID phiên hợp lệ từ người dùng khác. Tuy nhiên, nếu kẻ tấn công có thể chiếm quyền điều khiển một phiên nhất định, thì thời gian chờ không hoạt động không hạn chế hành động của kẻ tấn công vì chúng có thể tạo hoạt động trên phiên theo định kỳ để giữ cho phiên hoạt động trong thời gian dài hơn

Quản lý thời gian chờ của phiên và hết hạn phải được thực thi phía máy chủ. Nếu ứng dụng khách được sử dụng để thực thi thời gian chờ của phiên, ví dụ: sử dụng mã thông báo phiên hoặc các tham số ứng dụng khách khác để theo dõi tham chiếu thời gian (e. g. số phút kể từ thời điểm đăng nhập), kẻ tấn công có thể thao túng những điều này để kéo dài thời lượng phiên

Thời gian chờ tuyệt đối

Tất cả các phiên phải thực hiện thời gian chờ tuyệt đối, bất kể hoạt động của phiên. Thời gian chờ này xác định lượng thời gian tối đa mà phiên có thể hoạt động, đóng và làm mất hiệu lực phiên theo khoảng thời gian tuyệt đối đã xác định kể từ khi phiên đã cho ban đầu được tạo bởi ứng dụng web. Sau khi vô hiệu hóa phiên, người dùng buộc phải (tái) xác thực lại trong ứng dụng web và thiết lập phiên mới

Phiên tuyệt đối giới hạn lượng thời gian kẻ tấn công có thể sử dụng phiên bị tấn công và mạo danh người dùng nạn nhân

Hết thời gian gia hạn

Ngoài ra, ứng dụng web có thể triển khai thời gian chờ gia hạn bổ sung, sau đó ID phiên được tự động gia hạn, ở giữa phiên người dùng và độc lập với hoạt động phiên và do đó, thời gian chờ không hoạt động

Sau một khoảng thời gian cụ thể kể từ khi phiên được tạo ban đầu, ứng dụng web có thể tạo ID mới cho phiên người dùng và thử đặt hoặc gia hạn ID đó trên máy khách. Giá trị ID phiên trước đó sẽ vẫn có hiệu lực trong một thời gian, cung cấp một khoảng thời gian an toàn, trước khi khách hàng biết về ID mới và bắt đầu sử dụng nó. Vào thời điểm đó, khi khách hàng chuyển sang ID mới trong phiên hiện tại, ứng dụng sẽ vô hiệu hóa ID trước đó

Kịch bản này giảm thiểu lượng thời gian mà một giá trị ID phiên nhất định, có khả năng bị kẻ tấn công lấy được, có thể được sử dụng lại để chiếm quyền điều khiển phiên người dùng, ngay cả khi phiên người dùng nạn nhân vẫn đang hoạt động. Phiên người dùng vẫn tồn tại và mở trên ứng dụng khách hợp pháp, mặc dù giá trị ID phiên được liên kết của nó được gia hạn định kỳ trong suốt thời lượng của phiên, mỗi khi hết thời gian gia hạn. Do đó, thời gian chờ gia hạn bổ sung cho thời gian chờ không hoạt động và thời gian chờ tuyệt đối, đặc biệt khi giá trị thời gian chờ tuyệt đối kéo dài đáng kể theo thời gian (e. g. đó là một yêu cầu của ứng dụng để giữ cho phiên người dùng mở trong thời gian dài)

Tùy thuộc vào việc triển khai, có khả năng xảy ra tình trạng chạy đua trong đó kẻ tấn công có ID phiên trước đó vẫn còn hiệu lực sẽ gửi yêu cầu trước người dùng nạn nhân, ngay sau khi hết thời gian chờ gia hạn và lấy giá trị đầu tiên cho ID phiên được gia hạn. Ít nhất trong trường hợp này, người dùng nạn nhân có thể biết về cuộc tấn công vì phiên của cô ấy sẽ đột ngột bị chấm dứt do ID phiên được liên kết của cô ấy không còn hợp lệ nữa

Hết hạn phiên thủ công

Các ứng dụng web nên cung cấp các cơ chế cho phép người dùng nhận thức được bảo mật chủ động đóng phiên của họ sau khi họ sử dụng xong ứng dụng web

Nút đăng xuất

Ứng dụng web phải cung cấp nút đăng xuất có thể nhìn thấy và dễ truy cập (đăng xuất, thoát hoặc đóng phiên) có sẵn trên tiêu đề hoặc menu của ứng dụng web và có thể truy cập được từ mọi tài nguyên và trang của ứng dụng web để người dùng có thể đóng phiên theo cách thủ công tại . Như được mô tả trong phần Session_Expiration, ứng dụng web ít nhất phải làm mất hiệu lực phiên ở phía máy chủ

GHI CHÚ. Thật không may, không phải tất cả các ứng dụng web đều tạo điều kiện cho người dùng đóng phiên hiện tại của họ. Do đó, các cải tiến phía máy khách cho phép người dùng tận tâm bảo vệ các phiên của họ bằng cách giúp đóng chúng một cách siêng năng

Bộ nhớ đệm nội dung web

Ngay cả sau khi phiên đã đóng, vẫn có thể truy cập dữ liệu riêng tư hoặc nhạy cảm được trao đổi trong phiên thông qua bộ đệm của trình duyệt web. Do đó, các ứng dụng web phải sử dụng các chỉ thị bộ đệm hạn chế cho tất cả lưu lượng truy cập web được trao đổi qua HTTP và HTTPS, chẳng hạn như các tiêu đề HTTP 128 bits (16 bytes)2 và 128 bits (16 bytes)3 và/hoặc các thẻ META tương đương trên tất cả hoặc (ít nhất) các trang web nhạy cảm

Không phụ thuộc vào chính sách bộ đệm do ứng dụng web xác định, nếu cho phép lưu nội dung ứng dụng web vào bộ đệm, ID phiên không bao giờ được lưu vào bộ đệm, do đó, chúng tôi khuyên bạn nên sử dụng chỉ thị 128 bits (16 bytes)4, để cho phép máy khách web lưu vào bộ đệm mọi thứ ngoại trừ ID phiên (

Phòng thủ bổ sung phía máy khách để quản lý phiên

Các ứng dụng web có thể bổ sung cho các biện pháp bảo vệ quản lý phiên được mô tả trước đó bằng các biện pháp đối phó bổ sung ở phía máy khách. Các biện pháp bảo vệ phía máy khách, thường ở dạng kiểm tra và xác minh JavaScript, không phải là bằng chứng đạn và có thể dễ dàng bị kẻ tấn công lành nghề đánh bại, nhưng có thể tạo ra một lớp phòng thủ khác mà những kẻ xâm nhập phải vượt qua

Thời gian chờ đăng nhập ban đầu

Các ứng dụng web có thể sử dụng mã JavaScript trong trang đăng nhập để đánh giá và đo lượng thời gian kể từ khi trang được tải và ID phiên được cấp. Nếu nỗ lực đăng nhập được thử sau một khoảng thời gian cụ thể, mã máy khách có thể thông báo cho người dùng rằng khoảng thời gian tối đa để đăng nhập đã trôi qua và tải lại trang đăng nhập, do đó truy xuất ID phiên mới

Cơ chế bảo vệ bổ sung này cố gắng buộc gia hạn xác thực trước ID phiên, tránh các tình huống trong đó ID phiên đã sử dụng trước đó (hoặc được đặt thủ công) được sử dụng lại bởi nạn nhân tiếp theo sử dụng cùng một máy tính, chẳng hạn như trong các cuộc tấn công cố định phiên

Buộc đăng xuất phiên trên cửa sổ trình duyệt web Đóng sự kiện

Các ứng dụng web có thể sử dụng mã JavaScript để nắm bắt tất cả các sự kiện đóng tab hoặc cửa sổ trình duyệt web (hoặc thậm chí quay lại) và thực hiện các hành động thích hợp để đóng phiên hiện tại trước khi đóng trình duyệt web, giả lập rằng người dùng đã đóng phiên theo cách thủ công thông qua đăng xuất

Vô hiệu hóa Phiên Cross-Tab của trình duyệt web

Các ứng dụng web có thể sử dụng mã JavaScript sau khi người dùng đã đăng nhập và một phiên đã được thiết lập để buộc người dùng xác thực lại nếu một tab hoặc cửa sổ trình duyệt web mới được mở trên cùng một ứng dụng web. Ứng dụng web không muốn cho phép nhiều tab hoặc cửa sổ trình duyệt web chia sẻ cùng một phiên. Do đó, ứng dụng cố gắng buộc trình duyệt web không chia sẻ cùng một ID phiên đồng thời giữa chúng

GHI CHÚ. Cơ chế này không thể được thực hiện nếu ID phiên được trao đổi thông qua cookie, vì cookie được chia sẻ bởi tất cả các tab/cửa sổ trình duyệt web

Đăng xuất khách hàng tự động

Mã JavaScript có thể được ứng dụng web sử dụng trong tất cả các trang (hoặc quan trọng) để tự động đăng xuất các phiên máy khách sau khi hết thời gian chờ không hoạt động, chẳng hạn như bằng cách chuyển hướng người dùng đến trang đăng xuất (cùng một tài nguyên được sử dụng bởi nút đăng xuất đã đề cập trước đó)

Lợi ích của việc tăng cường chức năng hết thời gian chờ phía máy chủ bằng mã phía máy khách là người dùng có thể thấy rằng phiên đã kết thúc do không hoạt động hoặc thậm chí có thể được thông báo trước rằng phiên sắp hết hạn thông qua đồng hồ đếm ngược . Cách tiếp cận thân thiện với người dùng này giúp tránh mất công việc trong các trang web yêu cầu dữ liệu đầu vào rộng rãi do các phiên hết hạn âm thầm phía máy chủ

Phát hiện tấn công phiên

Đoán ID phiên và phát hiện vũ lực

Nếu kẻ tấn công cố gắng đoán hoặc brute force một ID phiên hợp lệ, thì chúng cần khởi chạy nhiều yêu cầu tuần tự đối với ứng dụng web mục tiêu bằng cách sử dụng các ID phiên khác nhau từ một (hoặc một nhóm) địa chỉ IP. Ngoài ra, nếu kẻ tấn công cố gắng phân tích khả năng dự đoán của ID phiên (e. g. sử dụng phân tích thống kê), họ cần khởi chạy nhiều yêu cầu tuần tự từ một (hoặc một bộ) địa chỉ IP đối với ứng dụng web mục tiêu để thu thập ID phiên hợp lệ mới

Các ứng dụng web phải có khả năng phát hiện cả hai kịch bản dựa trên số lần cố gắng thu thập (hoặc sử dụng) các ID phiên khác nhau và cảnh báo và/hoặc chặn (các) địa chỉ IP vi phạm

Phát hiện sự bất thường của ID phiên

Các ứng dụng web nên tập trung vào việc phát hiện các điểm bất thường liên quan đến ID phiên, chẳng hạn như thao tác của nó. Dự án OWASP AppSensor cung cấp một khuôn khổ và phương pháp để triển khai các khả năng phát hiện xâm nhập tích hợp trong các ứng dụng web tập trung vào việc phát hiện các điểm bất thường và hành vi không mong muốn, dưới dạng các điểm phát hiện và hành động phản hồi. Thay vì sử dụng các lớp bảo vệ bên ngoài, đôi khi các chi tiết logic nghiệp vụ và trí thông minh nâng cao chỉ khả dụng từ bên trong ứng dụng web, nơi có thể thiết lập nhiều điểm phát hiện liên quan đến phiên, chẳng hạn như khi một cookie hiện tại bị sửa đổi hoặc xóa, một cookie mới

Liên kết ID phiên với các thuộc tính người dùng khác

Với mục tiêu phát hiện (và, trong một số trường hợp, bảo vệ chống lại) các hành vi sai trái của người dùng và chiếm quyền điều khiển phiên, bạn nên liên kết ID phiên với các thuộc tính của người dùng hoặc ứng dụng khách khác, chẳng hạn như địa chỉ IP của ứng dụng khách, Tác nhân người dùng hoặc ứng dụng khách . Nếu ứng dụng web phát hiện bất kỳ thay đổi hoặc bất thường nào giữa các thuộc tính khác nhau này ở giữa phiên được thiết lập, thì đây là một chỉ báo rất tốt về các nỗ lực thao túng phiên và chiếm quyền điều khiển và thực tế đơn giản này có thể được sử dụng để cảnh báo và/hoặc chấm dứt phiên đáng ngờ

Mặc dù các thuộc tính này không thể được sử dụng bởi các ứng dụng web để bảo vệ một cách đáng tin cậy chống lại các cuộc tấn công phiên, nhưng chúng làm tăng đáng kể khả năng phát hiện (và bảo vệ) của ứng dụng web. Tuy nhiên, kẻ tấn công lành nghề có thể bỏ qua các kiểm soát này bằng cách sử dụng lại cùng một địa chỉ IP được gán cho người dùng nạn nhân bằng cách chia sẻ cùng một mạng (rất phổ biến trong môi trường NAT, như điểm truy cập Wi-Fi) hoặc bằng cách sử dụng cùng một proxy web gửi đi (rất phổ biến trong

Vòng đời phiên ghi nhật ký. Giám sát việc tạo, sử dụng và hủy ID phiên

Các ứng dụng web nên tăng khả năng ghi nhật ký của chúng bằng cách bao gồm thông tin liên quan đến vòng đời đầy đủ của các phiên. Cụ thể, bạn nên ghi lại các sự kiện liên quan đến phiên, chẳng hạn như tạo, gia hạn và hủy ID phiên, cũng như chi tiết về việc sử dụng nó trong các hoạt động đăng nhập và đăng xuất, thay đổi cấp đặc quyền trong phiên, hết thời gian chờ, phiên không hợp lệ

Chi tiết nhật ký có thể bao gồm dấu thời gian, địa chỉ IP nguồn, tài nguyên mục tiêu web được yêu cầu (và liên quan đến hoạt động của phiên), tiêu đề HTTP (bao gồm Tác nhân người dùng và Người giới thiệu), tham số GET và POST, mã lỗi và thông báo, tên người dùng (hoặc

Dữ liệu nhạy cảm như ID phiên không nên được đưa vào nhật ký để bảo vệ nhật ký phiên khỏi ID phiên cục bộ hoặc tiết lộ từ xa hoặc truy cập trái phép. Tuy nhiên, một số loại thông tin dành riêng cho phiên phải được ghi lại để tương quan các mục nhập nhật ký với các phiên cụ thể. Bạn nên ghi nhật ký hàm băm muối của ID phiên thay vì chính ID phiên để cho phép tương quan nhật ký theo phiên cụ thể mà không làm lộ ID phiên

Đặc biệt, các ứng dụng web phải bảo vệ triệt để các giao diện quản trị cho phép quản lý tất cả các phiên hoạt động hiện tại. Thông thường, chúng được nhân viên hỗ trợ sử dụng để giải quyết các vấn đề liên quan đến phiên hoặc thậm chí là các vấn đề chung bằng cách mạo danh người dùng và xem ứng dụng web giống như người dùng.

Nhật ký phiên trở thành một trong những nguồn dữ liệu phát hiện xâm nhập ứng dụng web chính và cũng có thể được các hệ thống chống xâm nhập sử dụng để tự động chấm dứt phiên và/hoặc vô hiệu hóa tài khoản người dùng khi phát hiện (một hoặc nhiều) cuộc tấn công. Nếu các biện pháp bảo vệ tích cực được triển khai, các hành động phòng thủ này cũng phải được ghi lại

Đăng nhập phiên đồng thời

Đây là quyết định thiết kế ứng dụng web để xác định xem có cho phép nhiều lần đăng nhập đồng thời từ cùng một người dùng từ cùng một địa chỉ IP hoặc từ các địa chỉ IP máy khách khác nhau hay không. Nếu ứng dụng web không muốn cho phép đăng nhập phiên đồng thời, ứng dụng phải thực hiện các hành động hiệu quả sau mỗi sự kiện xác thực mới, chấm dứt hoàn toàn phiên có sẵn trước đó hoặc hỏi người dùng (thông qua phiên cũ, phiên mới hoặc cả hai) về phiên phải

Các ứng dụng web nên thêm các khả năng của người dùng cho phép kiểm tra chi tiết của các phiên đang hoạt động bất kỳ lúc nào, giám sát và cảnh báo người dùng về các lần đăng nhập đồng thời, cung cấp các tính năng cho người dùng để chấm dứt các phiên theo cách thủ công và theo dõi lịch sử hoạt động của tài khoản (sổ nhật ký) bằng cách ghi lại

Quản lý phiên Bảo vệ WAF

Có những tình huống mà mã nguồn ứng dụng web không có sẵn hoặc không thể sửa đổi được, hoặc khi những thay đổi cần thiết để triển khai nhiều đề xuất bảo mật và các phương pháp hay nhất được nêu chi tiết ở trên ngụ ý thiết kế lại toàn bộ kiến ​​trúc ứng dụng web và do đó, không thể triển khai dễ dàng

Trong các tình huống này hoặc để bổ sung cho các biện pháp bảo vệ ứng dụng web và với mục tiêu giữ cho ứng dụng web an toàn nhất có thể, bạn nên sử dụng các biện pháp bảo vệ bên ngoài như Tường lửa ứng dụng web (WAF) có thể giảm thiểu các mối đe dọa quản lý phiên đã được mô tả

Tường lửa ứng dụng web cung cấp khả năng phát hiện và bảo vệ chống lại các cuộc tấn công dựa trên phiên. Một mặt, việc WAF bắt buộc sử dụng các thuộc tính bảo mật trên cookie, chẳng hạn như các cờ PHPSESSID0 và PHPSESSID3, áp dụng các quy tắc viết lại cơ bản trên tiêu đề 128 bits (16 bytes)7 cho tất cả các phản hồi của ứng dụng web đặt cookie mới là chuyện nhỏ.

Mặt khác, các khả năng nâng cao hơn có thể được triển khai để cho phép WAF theo dõi các phiên và ID phiên tương ứng, đồng thời áp dụng tất cả các loại biện pháp bảo vệ chống cố định phiên (bằng cách gia hạn ID phiên ở phía máy khách khi đặc quyền thay đổi

ModSecurity WAF nguồn mở, cộng với Bộ quy tắc lõi OWASP, cung cấp các khả năng phát hiện và áp dụng các thuộc tính cookie bảo mật, các biện pháp đối phó với các cuộc tấn công cố định phiên và các tính năng theo dõi phiên để thực thi các phiên cố định

Thông thường phiên sử dụng cookie để lưu trữ dữ liệu, nhưng nếu cookie bị tắt trong cài đặt trình duyệt thì phiên PHP cũng có thể hoạt động mà không cần cookie .
Phương thức HTTP POST cung cấp một giải pháp thay thế cho cookie để duy trì trạng thái phiên . Phương thức HTTP POST cung cấp thông tin trạng thái giống như cookie nhưng có ưu điểm là nó hoạt động ngay cả khi không có cookie. Phương pháp này không phổ biến trong thực tế, nhưng nó là một ví dụ tốt để học hỏi từ.

Làm cách nào để dừng truy cập trực tiếp vào một trang mà không cần đăng nhập bằng PHP?

Bản sao có thể có của Cách tạo chuyển hướng trong PHP? . Tháng Một 25, 2016 lúc 10. 13
Đặt biến phiên sau khi đăng nhập và hủy chúng sau khi đăng xuất. tạo một tệp php riêng để kiểm tra xem $_SESSION có được đặt không. Nếu nó được đặt thì không làm gì khác chuyển hướng đến đăng nhập. php. – tơ nhân tạo. Tháng Một 25, 2016 lúc 10. 15

Làm cách nào để sử dụng phiên trong PHP để đăng nhập và đăng xuất?

Trước tiên, bạn sẽ tạo một cơ sở dữ liệu và một bảng có tên đăng nhập, sau đó tạo một biểu mẫu đăng nhập chỉ với hai trường, tên người dùng và mật khẩu. Sau đó, bạn sẽ tạo kết nối với bảng MySQL của mình "đăng nhập" và nhập một số mã PHP. Tôi sẽ sử dụng một phiên cho mục đích xác thực khi đăng nhập và đăng xuất. Đây là "đăng nhập của bạn